澳门新萄京官方网站-www.8455.com-澳门新萄京赌场网址

澳门新萄京官方网站我就是要用CSS实现,微信小

2019-08-10 作者:澳门新萄京赌场网址   |   浏览(75)

我就是要用CSS实现

2016/01/15 · CSS · CSS

原文出处: AlloyTeam   

flexbox简介,flexbox

H5移动端知识点总结

2016/02/05 · CSS, HTML5 · 2 评论 · 移动端

原文出处: 涂根华   

移动开发基本知识点

一. 使用rem作为单位

XHTML

html { font-size: 100px; } @media(min-width: 320px) { html { font-size: 100px; } } @media(min-width: 360px) { html { font-size: 112.5px; } } @media(min-width: 400px) { html { font-size: 125px; } } @media(min-width: 640px) { html { font-size: 200px; } }

1
2
3
4
5
html { font-size: 100px; }
@media(min-width: 320px) { html { font-size: 100px; } }
@media(min-width: 360px) { html { font-size: 112.5px; } }
@media(min-width: 400px) { html { font-size: 125px; } }
@media(min-width: 640px) { html { font-size: 200px; } }

给手机设置100px的字体大小; 对于320px的手机匹配是100px,
其他手机都是等比例匹配; 因此设计稿上是多少像素的话,那么转换为rem的时候,rem = 设计稿的像素/100 即可;

二.  禁用a,button,input,optgroup,select,textarea 等标签背景变暗

在移动端使用a标签做按钮的时候或者文字连接的时候,点击按钮会出现一个 “暗色的”背景,比如如下代码:
button1

在移动端点击后 会出现”暗色”的背景,这时候我们需要在css加入如下代码即可:

CSS

a,button,input,optgroup,select,textarea{ -webkit-tap-highlight-color: rgba(0,0,0,0); }

1
2
3
a,button,input,optgroup,select,textarea{
    -webkit-tap-highlight-color: rgba(0,0,0,0);
}

三. meta基础知识点:

1.页面窗口自动调整到设备宽度,并禁止用户及缩放页面。

XHTML

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0,maximum-scale=1.0, user-scalable=0" />

1
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0,maximum-scale=1.0, user-scalable=0" />

属性基本含义:
content=”width=device-width:
控制 viewport 的大小,device-width 为设备的宽度
initial-scale – 初始的缩放比例
minimum-scale – 允许用户缩放到的最小比例
maximum-scale – 允许用户缩放到的最大比例
user-scalable – 用户是否可以手动缩放

.忽略将页面中的数字识别为电话号码
<meta name=”format-detection” content=”telephone=no” />

  1. 忽略Android平台中对邮箱地址的识别
    <meta name=”format-detection” content=”email=no” />
  2. 当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对ios的safari
    <meta name=”apple-mobile-web-app-capable” content=”yes” />
  3. 将网站添加到主屏幕快速启动方式,仅针对ios的safari顶端状态条的样式
    <meta name=”apple-mobile-web-app-status-bar-style” content=”black” />
    <!– 可选default、black、black-translucent –>
    6. 需要在网站的根目录下存放favicon图标,防止404请求(使用fiddler可以监听到),在页面上需加link如下:
    <link rel=”shortcut icon” href=”/favicon.ico”>

因此页面上通用的模板如下:

XHTML

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport"> <meta content="yes" name="apple-mobile-web-app-capable"> <meta content="black" name="apple-mobile-web-app-status-bar-style"> <meta content="telephone=no" name="format-detection"> <meta content="email=no" name="format-detection"> <title>标题</title> <link rel="shortcut icon" href="/favicon.ico"> </head> <body> 这里开始内容 </body> </html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
        <meta content="yes" name="apple-mobile-web-app-capable">
        <meta content="black" name="apple-mobile-web-app-status-bar-style">
        <meta content="telephone=no" name="format-detection">
        <meta content="email=no" name="format-detection">
        <title>标题</title>
        <link rel="shortcut icon" href="/favicon.ico">
    </head>
    <body>
        这里开始内容
    </body>
</html>

四:移动端如何定义字体font-family

body{font-family: “Helvetica Neue”, Helvetica, sans-serif;}

五:在android或者IOS下 拨打电话代码如下

<a href=”tel:15602512356″>打电话给:15602512356</a>

六:发短信(winphone系统无效)

<a href=”sms:10010″>发短信给: 10010</a>

七:调用手机系统自带的邮件功能

1. 当浏览者点击这个链接时,浏览器会自动调用默认的客户端电子邮件程序,并在收件人框中自动填上收件人的地址下面
<p><a href=”mailto:tugenhua@126.com”>发电子邮件</a></p>

2、填写抄送地址;
在IOS手机下:在收件人地址后用?cc=开头;
如下代码:
<p><a href=”mailto:tugenhua@126.com?cc=879083421@qq.com”>填写抄送地址</a></p>

在android手机下,如下代码:
<p><a href=”mailto:tugenhua@126.com?879083421@qq.com”>填写抄送地址</a></p>

  1. 填上密件抄送地址,如下代码:
    在IOS手机下:紧跟着抄送地址之后,写上&bcc=,填上密件抄送地址
    <a href=”mailto:tugenhua@126.com?cc=879083421@qq.com&bcc=aa@qq.com”>填上密件抄送地址</a>
    在安卓下;如下代码:
    <p><a href=”mailto:tugenhua@126.com?879083421@qq.com?aa@qq.com”>填上密件抄送地址</a></p>

4. 包含多个收件人、抄送、密件抄送人,用分号隔(;)开多个收件人的地址即可实现。如下代码:
<p><a href=”mailto:tugenhua@126.com;879083421@qq.com;aa@qq.com”>包含多个收件人、抄送、密件抄送人,用分号隔(;)开多个收件人的地址即可实现</a></p>

5、包含主题,用?subject=可以填上主题。如下代码:
<p><a href=”mailto:tugenhua@126.com?subject=【邀请函】”>包含主题,可以填上主题</a></p>

6、包含内容,用?body=可以填上内容(需要换行的话,使用 给文本换行);代码如下:
<p><a href=”mailto:tugenhua@126.com?body=我来测试下”>包含内容,用?body=可以填上内容</a></p>

  1. 内容包含链接,含http(s)://等的文本自动转化为链接。如下代码:
    <p><a href=”mailto:tugenhua@126.com?body=;

八:webkit表单输入框placeholder的颜色值改变:

如果想要默认的颜色显示红色,代码如下:
input::-webkit-input-placeholder{color:red;}
如果想要用户点击变为蓝色,代码如下:
input:focus::-webkit-input-placeholder{color:blue;}

九:移动端IOS手机下清除输入框内阴影,代码如下

input,textarea {
-webkit-appearance: none;
}

十:在IOS中 禁止长按链接与图片弹出菜单

a, img {
-webkit-touch-callout: none;
}

calc基本用法

calc基本语法:
.class {width: calc(expression);}
它可以支持加,减,乘,除; 在我们做手机端的时候非常有用的一个知识点;
优点如下:

  1. 支持使用 “ ”,”-“,”*” 和 “/” 四则运算。
  2. 可以混合使用百分比(%),px,em,rem等作为单位可进行计算。
    浏览器的兼容性有如下:
    IE9 ,FF4.0 ,Chrome19 ,Safari6
    如下测试代码:

我是测试calc

CSS

.calc{ margin-left:50px; padding-left:2rem; width:calc(100%-50px-2rem); height:10rem; }

1
2
3
4
5
6
.calc{
    margin-left:50px;
    padding-left:2rem;
    width:calc(100%-50px-2rem);
    height:10rem;
}

box-sizing的理解及使用

该属性是解决盒模型在不同的浏览器中表现不一致的问题。它有三个属性值分别是:
content-box: 默认值(标准盒模型); width和height只包括内容的宽和高,不包括边框,内边距;
比如如下div元素:

box

css如下:.box {width:200px;height:200px;padding:10px;border:1px solid #333;margin:10px;box-sizing:content-box;}
那么在浏览器下渲染的实际宽度和高度分别是:222px,222px; 因为在标准的盒模型下,在浏览器中渲染的实际宽度和高度包括
内边距(padding)和边框的(border);如下图所示:

澳门新萄京官方网站 1

border-box: width与height是包括内边距和边框的,不包括外边距,这是IE的怪异模式使用的盒模型,比如还是上面的代码:
<div>box</div>;
css代码如下:

CSS

.box {width:200px;height:200px;padding:10px;border:1px solid #333;margin:10px;box-sizing:border-box;}

1
.box {width:200px;height:200px;padding:10px;border:1px solid #333;margin:10px;box-sizing:border-box;}

那么此时浏览器渲染的width会是178px,height也是178px; 因为此时定义的width和height会包含padding和border在内;
使用这个属性对于在使用百分比的情况下布局页面非常有用,比如有两列布局宽度都是50%;但是呢还有padding和border,那么这个
时候如果我们不使用该属性的话(当然我们也可以使用calc方法来计算); 那么总宽度会大于页面中的100%;因此这时候可以使用这
个属性来使页面达到100%的布局.如下图所示:

澳门新萄京官方网站 2

浏览器支持的程度如下:

澳门新萄京官方网站 3

理解display:box的布局

display: box; box-flex 是css3新添加的盒子模型属性,它可以为我们解决按比列划分,水平均分,及垂直等高等。

一:按比例划分:

目前box-flex 属性还没有得到firefox, Opera, chrome浏览器的完全支持,但我们可以使用它们的私有属性定义firefox(-moz-),opera(-o-),chrome/safari(-webkit-)。box-flex属性主要让子容器针对父容器的宽度按一定的规则进行划分。
代码如下:

CSS

<div class="test"> <p id="p1">Hello</p> <p id="p2">W3School</p> </div> <style> .test{ display:-moz-box; display:-webkit-box; display:box; width:300px; } #p1{ -moz-box-flex:1.0; -webkit-box-flex:1.0; box-flex:1; border:1px solid red; } #p2{ -moz-box-flex:2.0; -webkit-box-flex:2.0; box-flex:2; border:1px solid blue; } </style>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<div class="test">
      <p id="p1">Hello</p>
      <p id="p2">W3School</p>
</div>
<style>
   .test{
      display:-moz-box;
      display:-webkit-box;
      display:box;
      width:300px;
   }
   #p1{
      -moz-box-flex:1.0;
      -webkit-box-flex:1.0;
      box-flex:1;
      border:1px solid red;
   }
   #p2{
      -moz-box-flex:2.0;
      -webkit-box-flex:2.0;
      box-flex:2;
      border:1px solid blue;
   }
</style>

如下图所示:

澳门新萄京官方网站 4

注意:

  1. 必须给父容器定义 display: box, 其子元素才可以进行划分。如上给id为p1设置box-flex设置为1,给id为p2设置box-flex为2,
    说明分别给其设置1等分和2等分,也就是说给id为p1元素设置宽度为 300 * 1/3 = 100px; 给id为p2元素设置宽度为 300 * 2/3 = 200px;
    2. 如果进行父容器划分的同时,他的子元素有的设置了宽度,有的要进行划分的话,那么划分的宽度 = 父容器的宽度 – 已经设置的宽度 。
    再进行对应的划分。

如下图所示:

澳门新萄京官方网站 5

澳门新萄京官方网站 6

二:box具体的属性如下:

box-orient | box-direction | box-align | box-pack | box-lines

  1. box-orient;
    box-orient 用来确定父容器里的子容器的排列方式,是水平还是垂直,可选属性如下所示:
    horizontal | vertical | inline-axis | block-axis | inherit
    一:horizontal | inline-axis
    给box设置 horizontal 或 inline-axis 属性效果表现一致。都可以将子元素进行水平排列.
    如下html代码:

CSS

<div class="test"> <p id="p1">Hello</p> <p id="p2">W3School</p> </div> css代码如下: <style> .test{ display:-moz-box; display:-webkit-box; display:box; width:300px; height:200px; -moz-box-orient:horizontal; -webkit-box-orient:horizontal; box-orient:horizontal; } #p1{ -moz-box-flex:1.0; -webkit-box-flex:1.0; box-flex:1; border:1px solid red; } #p2{ -moz-box-flex:2.0; -webkit-box-flex:2.0; box-flex:2; border:1px solid blue; } </style>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<div class="test">
       <p id="p1">Hello</p>
       <p id="p2">W3School</p>
   </div>
   css代码如下:
   <style>
       .test{
          display:-moz-box;
          display:-webkit-box;
          display:box;
          width:300px;
          height:200px;
          -moz-box-orient:horizontal;
          -webkit-box-orient:horizontal;
          box-orient:horizontal;
       }
       #p1{
          -moz-box-flex:1.0;
          -webkit-box-flex:1.0;
          box-flex:1;
          border:1px solid red;
       }
       #p2{
          -moz-box-flex:2.0;
          -webkit-box-flex:2.0;
          box-flex:2;
          border:1px solid blue;
       }
    </style>

如下图所示:

澳门新萄京官方网站 7

二:vertical 可以让子元素进行垂直排列; 

css代码如下:

CSS

<style> *{margin:0;padding:0;} .test{ display:-moz-box; display:-webkit-box; display:box; width:300px; height:200px; -moz-box-orient:vertical; -webkit-box-orient:vertical; box-orient:vertical; } #p1{ -moz-box-flex:1.0; -webkit-box-flex:1.0; box-flex:1; border:1px solid red; } #p2{ -moz-box-flex:2.0; -webkit-box-flex:2.0; box-flex:2; border:1px solid blue; } </style>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<style>
   *{margin:0;padding:0;}
   .test{
      display:-moz-box;
      display:-webkit-box;
      display:box;
      width:300px;
      height:200px;
      -moz-box-orient:vertical;
      -webkit-box-orient:vertical;
      box-orient:vertical;
   }
   #p1{
      -moz-box-flex:1.0;
      -webkit-box-flex:1.0;
      box-flex:1;
      border:1px solid red;
   }
   #p2{
      -moz-box-flex:2.0;
      -webkit-box-flex:2.0;
      box-flex:2;
      border:1px solid blue;
   }
</style>

如下图所示:

澳门新萄京官方网站 8

三:inherit。 Inherit属性让子元素继承父元素的相关属性。
效果和第一种效果一样,都是水平对齐;

2. box-direction
还是如下html代码:

XHTML

<div class="test"> <p id="p1">Hello</p> <p id="p2">W3School</p> </div>

1
2
3
4
<div class="test">
     <p id="p1">Hello</p>
     <p id="p2">W3School</p>
</div>

box-direction 用来确定父容器里的子容器的排列顺序,具体的属性如下代码所示:
normal | reverse | inherit
normal是默认值,按照HTML文档里的结构的先后顺序依次展示, 如果box-direction 设置为 normal,则结构顺序还是 id为p1元素,id为p2元素。
reverse: 表示反转。如果设置reverse反转,则结构排列顺序为 id为p2元素,id为p1元素。如下代码:
css代码如下:

CSS

<style> *{margin:0;padding:0;} .test{ display:-moz-box; display:-webkit-box; display:box; width:300px; height:200px; -moz-box-direction:reverse; -webkit-box-direction:reverse; box-direction:reverse; } #p1{ -moz-box-flex:1.0; -webkit-box-flex:1.0; box-flex:1; border:1px solid red; } #p2{ -moz-box-flex:2.0; -webkit-box-flex:2.0; box-flex:2; border:1px solid blue; } </style>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<style>
       *{margin:0;padding:0;}
       .test{
          display:-moz-box;
          display:-webkit-box;
          display:box;
          width:300px;
          height:200px;
          -moz-box-direction:reverse;
          -webkit-box-direction:reverse;
          box-direction:reverse;
       }
       #p1{
          -moz-box-flex:1.0;
          -webkit-box-flex:1.0;
          box-flex:1;
          border:1px solid red;
       }
       #p2{
          -moz-box-flex:2.0;
          -webkit-box-flex:2.0;
          box-flex:2;
          border:1px solid blue;
       }
    </style>

如下图所示:

澳门新萄京官方网站 9

3. box-align:

box-align 表示容器里面字容器的垂直对齐方式,可选参数如下表示:
start | end | center | baseline | stretch

  1. 对齐方式 start:表示居顶对齐
    代码如下:

CSS

*{margin:0;padding:0;} .test{ display:-moz-box; display:-webkit-box; display:box; width:300px; height:200px; -moz-box-align:start; -webkit-box-align:start; box-align:start; } #p1{ -moz-box-flex:1.0; -webkit-box-flex:1.0; box-flex:1; height:160px; border:1px solid red; } #p2{ -moz-box-flex:2.0; -webkit-box-flex:2.0; box-flex:2; height:100px; border:1px solid blue; }<br>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
       *{margin:0;padding:0;}
       .test{
          display:-moz-box;
          display:-webkit-box;
          display:box;
          width:300px;
          height:200px;
          -moz-box-align:start;
          -webkit-box-align:start;
          box-align:start;
       }
       #p1{
          -moz-box-flex:1.0;
          -webkit-box-flex:1.0;
          box-flex:1;
          height:160px;
          border:1px solid red;
       }
       #p2{
          -moz-box-flex:2.0;
          -webkit-box-flex:2.0;
          box-flex:2;
          height:100px;
          border:1px solid blue;
       }<br>

如上 P1 高度为160px p2 为100px; 对齐方式如下图所示:

澳门新萄京官方网站 10

如果改为end的话,那么就是 居低对齐了,如下:

澳门新萄京官方网站 11

center表示居中对齐,如下:

澳门新萄京官方网站 12

stretch 在box-align表示拉伸,拉伸与其父容器等高。如下代码:

澳门新萄京官方网站 13

在firefox下 和父容器下等高,满足条件,如下:

澳门新萄京官方网站 14

在chrome下不满足条件;如下:

澳门新萄京官方网站 15

4. box-pack

box-pack表示父容器里面子容器的水平对齐方式,可选参数如下表示:
start | end | center | justify
box-pack:start; 表示水平居左对齐,对于正常方向的框,首个子元素的左边缘被放在左侧(最后的子元素后是所有剩余的空间)
对于相反方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)代码如下所示:

*{margin:0;padding:0;} .test{ display:-moz-box; display:-webkit-box; display:box; width:400px; height:120px; border:1px solid #333; -moz-box-pack:start; -webkit-box-pack:start; box-pack:start; } #p1{ width:100px; height:108px; border:1px solid red; } #p2{ width:100px; height:108px; border:1px solid blue; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
   *{margin:0;padding:0;}
   .test{
      display:-moz-box;
      display:-webkit-box;
      display:box;
      width:400px;
      height:120px;
      border:1px solid #333;
      -moz-box-pack:start;
      -webkit-box-pack:start;
      box-pack:start;
   }
   #p1{
      width:100px;
      height:108px;
      border:1px solid red;  
   }
   #p2{
      width:100px;
      height:108px;
      border:1px solid blue;
   }

如下图所示:

澳门新萄京官方网站 16

box-pack:center;  表示水平居中对齐,均等地分割多余空间,其中一半空间被置于首个子元素前,另一半被置于最后一个子元素后; 如下图所示:

澳门新萄京官方网站 17

box-pack:end; 表示水平居右对齐;对于正常方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)。
对于相反方向的框,首个子元素的左边缘被放在左侧(最后子元素后是所有剩余的空间)。如下图所示:

澳门新萄京官方网站 18

box-pack:Justify:
在box-pack表示水平等分父容器宽度(在每个子元素之间分割多余的空间(首个子元素前和最后一个子元素后没有多余的空间))
如下:

澳门新萄京官方网站 19

理解flex布局

我们传统的布局方式是基于在盒子模型下的,依赖于display属性的,position属性的或者是float属性的,但是在传统的布局上面并不好布局; 比如我们想让某个元素垂直居中的话,我们常见的会让其元素表现为表格形式,比如display:table-cell属性什么的,我们现在来学习下使用flex布局是非常方便的;
目前的浏览器支持程度: IE10 ,chrome21 ,opera12.1 ,Firefox22 ,safari6.1 等;
如上浏览器的支持程度,我们可以把此元素使用在移动端很方便;
flex是什么呢?Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。
flex的弹性布局有如下优势:
1.独立的高度控制与对齐。
2.独立的元素顺序。
3.指定元素之间的关系。
4.灵活的尺寸与对齐方式。
一:基本概念
采用flex布局的元素,称为flex容器,它的所有子元素自动成为容器成员,称为flex项目。如下图:
澳门新萄京官方网站 20
容器默认存在2根轴,水平的主轴和垂直的侧轴,主轴的开始位置(与边框的交叉点)叫做main start, 结束位置叫做 main end.
交叉轴的开始位置叫做 cross start,结束位置叫做cross end。项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,
占据的交叉轴空间叫做cross size。
二:容器有如下6个属性
flex-direction
flex-wrap
flex-flow
justify-content
align-items
align-content
我们分别来看下上面6个属性有哪些值,分别代表什么意思。
1. flex-direction:该属性决定主轴的方向(即项目的排列方向)。
它可能有四个值:
row(默认值):主轴为水平方向,起点在左端。
row-reverse:主轴为水平方向,起点在右端。
column:主轴为垂直方向,起点在上沿。
column-reverse:主轴为垂直方向,起点在下沿。
我们来做几个demo,来分别理解下上面几个值的含义;我这边只讲解上面第一个和第二个值的含义,下面的也是一样,
就不讲解了; 比如页面上有一个容器,里面有一个元素,看下这个元素的排列方向。
HTML代码:(如没有特别的说明,下面的html代码都是该结构):

XHTML

<div class="first-face container"> <span class="pip">span> <div>

1
2
3
<div class="first-face container">
    <span class="pip">span>
<div>

css代码如下:

CSS

html, body { height: 100%; } .container { width:150px; height:150px; border:1px solid red; } .first-face { display: flex; display: -webkit-flex; flex-direction: row; -webkit-flex-direction:row; display: -webkit-box; -webkit-box-pack:start; } .pip { display:block; width: 24px; height: 24px; border-radius: 50%; background-color: #333; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    html, body {
        height: 100%;
    }
    .container {
        width:150px;
        height:150px;
        border:1px solid red;
    }
    .first-face {
        display: flex;
        display: -webkit-flex;
        flex-direction: row;
        -webkit-flex-direction:row;
        display: -webkit-box;  
        -webkit-box-pack:start;
    }
    .pip {
      display:block;
      width: 24px;
      height: 24px;
      border-radius: 50%;
      background-color: #333;
    }

注意:在android平台的uc浏览器和微信浏览器中使用display: flex;会出问题。不支持该属性,因此使用display: flex;的时候需要加上display: -webkit-box; 还有一些水平对齐或者垂直对齐都需要加上对应的box-pack(box-pack表示父容器里面子容器的水平对齐方式)及box-align(box-align 表示容器里面子容器的垂直对齐方式).具体的可以看如下介绍的 display:box属性那一节。
我们可以看下截图如下:

澳门新萄京官方网站 21

当我们把flex-direction的值改为 row-reverse后(主轴为水平方向,起点在右端),我们截图如下所示:

澳门新萄京官方网站 22

2. flex-wrap属性 默认情况下,项目都排在一条线(又称”轴线”)上。flex-wrap属性定义,如果一条轴线排不下,可以换行。
它有如下三个值:
nowrap(默认):不换行。
wrap:换行,第一行在上方。
wrap-reverse:换行,第一行在下方。

3. flex-flow
该属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

4. justify-content属性
justify-content属性定义了项目在主轴上的对齐方式。下面假设主轴为从左到右。
值为如下:
flex-start | flex-end | center | space-between | space-around;
flex-start(默认值) 左对齐
flex-end 右对齐
center 居中
space-between: 两端对齐,项目之间的间隔都相等
space-around:每个项目两侧的间隔相等。

5. align-items属性
align-items属性定义项目在交叉轴上如何对齐。
它可能取5个值:
flex-start:交叉轴的起点对齐。
flex-end:交叉轴的终点对齐。
center:交叉轴的中点对齐。
baseline: 项目的第一行文字的基线对齐。
stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

6. align-content属性
align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。
该属性可能取6个值。
flex-start:与交叉轴的起点对齐。
flex-end:与交叉轴的终点对齐。
center:与交叉轴的中点对齐。
space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
stretch(默认值):轴线占满整个交叉轴。

三:项目的属性,以下有6个属性可以设置在项目中
order
flex-grow
flex-shrink
flex-basis
flex
align-self
1. order属性
order属性定义项目的排列顺序。数值越小,排列越靠前,默认为0。
基本语法:
.xx {order: ;}
2. flex-grow属性
flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大
基本语法:
.xx {
flex-grow: ;
}
3. flex-shrink属性
flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
基本语法:
.xx {
flex-shrink: ;
}
4. flex-basis属性
flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
基本语法:

.xx { flex-basis: | auto;}

它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
5. flex属性
flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

6. align-self属性
align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。
默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。

基本语法:
.xx {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

上面是基本语法,感觉好模糊啊,看到这么多介绍,感觉很迷茫啊,下面我们趁热打铁来实现下demo。
我们很多人会不会打麻将呢?打麻将中有1-9丙对吧,我们来分别来实现他们的布局;
首先我们的HTML代码还是如下(如果没有特别的说明都是这样的结构):

一: 1丙

HTML代码:

XHTML

<div class="first-face container"> <span class="pip">span> <div>

1
2
3
<div class="first-face container">
    <span class="pip">span>
<div>

上面代码中,div元素(代表骰子的一个面)是Flex容器,span元素(代表一个点)是Flex项目。如果有多个项目,就要添加多个span元素,以此类推。
css代码结构如下:

CSS

html, body { height: 100%; } .container { width:150px; height:150px; border:1px solid red; } .first-face { } .pip { display:block; width: 24px; height: 24px; border-radius: 50%; background-color: #333; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    html, body {
        height: 100%;
    }
    .container {
        width:150px;
        height:150px;
        border:1px solid red;
    }
    .first-face {
 
    }
    .pip {
      display:block;
      width: 24px;
      height: 24px;
      border-radius: 50%;
      background-color: #333;
    }

1. 首先,只有一个左上角的情况下,flex布局默认为左对齐,因此需要display:flex即可;如下代码:

CSS

.first-face { display: flex; display: -webkit-box; }

1
2
3
4
.first-face {
    display: flex;
    display: -webkit-box;
}

上面为了兼容UC浏览器和IOS浏览器下,因此需要加上display: -webkit-box;来兼容,我们也明白,如果不加上.first-face里面的代码,也能做出效果,因为元素默认都是向左对齐的,如下图所示:

澳门新萄京官方网站 23

我们继续来看看对元素进行居中对齐; 需要加上 justify-content: center;即可;但是在UC浏览器下不支持该属性,
我们水平对齐需要加上box-pack,box-pack表示父容器里面子容器的水平对齐方式,具体的值如上面介绍的box的语法,
需要加上 -webkit-box-pack:center; 因此在first-face里面的css代码变为如下代码:

CSS

.first-face { display: flex; display: -webkit-box; justify-content:center; -webkit-box-pack:center; }

1
2
3
4
5
6
.first-face {
    display: flex;
    display: -webkit-box;
    justify-content:center;
    -webkit-box-pack:center;
}

效果如下:

澳门新萄京官方网站 24

上面已经介绍过
justify-content属性定义了项目在主轴上的对齐方式(水平方向上),有五个值,这里不再介绍,具体可以看上面的基本语法。

水平右对齐代码也一样、因此代码变成如下:

CSS

.first-face { display: flex; display: -webkit-box; justify-content:flex-end; -webkit-box-pack:end; }

1
2
3
4
5
6
.first-face {
    display: flex;
    display: -webkit-box;
    justify-content:flex-end;
    -webkit-box-pack:end;
}

如下图所示:

澳门新萄京官方网站 25

  1. 我们接着来分别看看垂直居左对齐,垂直居中对齐,垂直居右对齐.
    一:垂直居左对齐
    我们现在需要使用上align-items属性了,该属性定义项目在交叉轴上如何对齐。具体的语法如上:
    同样为了兼容UC浏览器或其他不支持的浏览器,我们需要加上box-align 该属性表示容器里面字容器的垂直对齐方式;具体的语法如上;
    因此代码变成如下:

CSS

.first-face { display: flex; display: -webkit-box; align-items:center; -webkit-box-align:center; }

1
2
3
4
5
6
.first-face {
    display: flex;
    display: -webkit-box;
    align-items:center;
    -webkit-box-align:center;
}

效果如下:

澳门新萄京官方网站 26

二:垂直居中对齐

现在垂直已经居中对齐了,但是在水平上还未居中对齐,因此在水平上居中对齐,我们需要加上justify-content属性居中即可;
同样为了兼容UC浏览器,需要加上 -webkit-box-pack:center;
代码变为如下:

CSS

.first-face { display: flex; display: -webkit-box; align-items:center; -webkit-box-align:center; justify-content:center; -webkit-box-pack:center; }

1
2
3
4
5
6
7
8
.first-face {
    display: flex;
    display: -webkit-box;
    align-items:center;
    -webkit-box-align:center;
    justify-content:center;
    -webkit-box-pack:center;
}

效果如下:

澳门新萄京官方网站 27

三:垂直居右对齐

原理和上面的垂直居中对齐是一个道理,只是值换了下而已;代码如下:

CSS

.first-face { display: flex; display: -webkit-box; align-items:center; -webkit-box-align:center; justify-content:flex-end; -webkit-box-pack:end; }

1
2
3
4
5
6
7
8
.first-face {
    display: flex;
    display: -webkit-box;
    align-items:center;
    -webkit-box-align:center;
    justify-content:flex-end;
    -webkit-box-pack:end;
}

效果如下:

澳门新萄京官方网站 28

  1. 我们接着来分别看看底部居左对齐,底部居中对齐,底部居右对齐.

一:底部居左对齐

其实属性还是用到上面的,只是值换了一下而已;代码如下:

CSS

.first-face { display: flex; display: -webkit-box; align-items:flex-end; -webkit-box-align:end; justify-content:flex-start; -webkit-box-pack:start; }

1
2
3
4
5
6
7
8
.first-face {
    display: flex;
    display: -webkit-box;
    align-items:flex-end;
    -webkit-box-align:end;
    justify-content:flex-start;
    -webkit-box-pack:start;
}

效果如下:

澳门新萄京官方网站 29

二:底部居中对齐
代码变为如下:

CSS

.first-face { display: flex; display: -webkit-box; align-items:flex-end; -webkit-box-align:end; justify-content:center; -webkit-box-pack:center; }

1
2
3
4
5
6
7
8
.first-face {
    display: flex;
    display: -webkit-box;
    align-items:flex-end;
    -webkit-box-align:end;
    justify-content:center;
    -webkit-box-pack:center;
}

效果如下:

澳门新萄京官方网站 30

三:底部居右对齐
代码变为如下:

CSS

.first-face { display: flex; display: -webkit-box; align-items:flex-end; -webkit-box-align:end; justify-content:flex-end; -webkit-box-pack:end; }

1
2
3
4
5
6
7
8
.first-face {
    display: flex;
    display: -webkit-box;
    align-items:flex-end;
    -webkit-box-align:end;
    justify-content:flex-end;
    -webkit-box-pack:end;
}

效果如下:

澳门新萄京官方网站 31

二:2丙
1. 水平上2端对齐; 需要使用的属性justify-content: space-between;该属性能使第一个元素在左边,最后一个元素在右边。
因此代码变成如下:

CSS

.first-face { display: flex; justify-content: space-between; }

1
2
3
4
.first-face {
    display: flex;
    justify-content: space-between;
}

但是在UC浏览器下不生效,因此我们需要 display: -webkit-box;和-webkit-box-pack:Justify;这两句代码;
display: -webkit-box;我不多介绍,上面已经讲了,-webkit-box-pack:Justify;的含义是在box-pack表示水平等分父容器宽度。
因此为了兼容UC浏览器,所以代码变成如下:

CSS

.first-face { display: flex; justify-content: space-between; display: -webkit-box; -webkit-box-pack:Justify; }

1
2
3
4
5
6
.first-face {
    display: flex;
    justify-content: space-between;
    display: -webkit-box;
    -webkit-box-pack:Justify;
}

效果如下:

澳门新萄京官方网站 32

2. 垂直两端对齐;
垂直对齐需要使用到的flex-direction属性,该属性有一个值为column:主轴为垂直方向,起点在上沿。
代码变为如下:

CSS

.first-face { display: flex; justify-content: space-between; flex-direction: column; }

1
2
3
4
5
.first-face {
    display: flex;
    justify-content: space-between;
    flex-direction: column;
}

再加上justify-content: space-between;说明两端对齐.但是在UC浏览器并不支持该属性,使其不能垂直两端对齐,因此为了兼容UC浏览器,需要使用-webkit-box;因此
整个代码变成如下:

CSS

.first-face { display: flex; justify-content: space-between; -webkit-flex-direction: column; flex-direction: column; display: -webkit-box; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-box-pack:justify; }

1
2
3
4
5
6
7
8
9
10
.first-face {
    display: flex;
    justify-content: space-between;
    -webkit-flex-direction: column;
    flex-direction: column;
    display: -webkit-box;
    -webkit-box-direction: normal;
    -webkit-box-orient: vertical;
    -webkit-box-pack:justify;
}

如上使用 -webkit-box-direction: normal; 使其对齐方向为水平从左端开始,-webkit-box-orient: vertical;使用这句代码告诉
浏览器是垂直的,-webkit-box-pack:justify;这句代码告诉浏览器垂直的两端对齐。
如下图所示:

澳门新萄京官方网站 33

3. 垂直居中两端对齐
代码如下:

CSS

.first-face { display: flex; flex-direction: column; justify-content: space-between; align-items: center; }

1
2
3
4
5
6
.first-face {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    align-items: center;
}

多加一句 align-items: center;代码; 表示交叉轴上居中对齐。同理在UC浏览器下不支持的,因此我们为了兼容UC浏览器,可以加上如下代码,因此整个代码如下:

CSS

.first-face { display: flex; justify-content: space-between; -webkit-flex-direction: column; flex-direction: column; align-items:center; display: -webkit-box; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-box-pack:justify; -webkit-box-align:center; }

1
2
3
4
5
6
7
8
9
10
11
12
13
.first-face {
    display: flex;
    justify-content: space-between;
    -webkit-flex-direction: column;
    flex-direction: column;
    align-items:center;
 
    display: -webkit-box;
    -webkit-box-direction: normal;
    -webkit-box-orient: vertical;
    -webkit-box-pack:justify;
    -webkit-box-align:center;
}

再加上-webkit-box-align:center;这句代码,告诉浏览器垂直居中。
如下图所示:

澳门新萄京官方网站 34

4. 垂直居右两端对齐
代码如下:

CSS

.first-face { display: flex; flex-direction: column; justify-content: space-between; align-items: flex-end; }

1
2
3
4
5
6
.first-face {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    align-items: flex-end;
}

同理为了兼容UC浏览器,整个代码变成如下:

CSS

.first-face { display: flex; justify-content: space-between; -webkit-flex-direction: column; flex-direction: column; align-items:flex-end; display: -webkit-box; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-box-pack:justify; -webkit-box-align:end; }

1
2
3
4
5
6
7
8
9
10
11
12
.first-face {
    display: flex;
    justify-content: space-between;
    -webkit-flex-direction: column;
    flex-direction: column;
    align-items:flex-end;
    display: -webkit-box;
    -webkit-box-direction: normal;
    -webkit-box-orient: vertical;
    -webkit-box-pack:justify;
    -webkit-box-align:end;
}

和上面代码一样,只是更改了一下垂直对齐方式而已;
如下图所示:

澳门新萄京官方网站 35

注意:下面由于时间的关系,先不考虑UC浏览器的兼容

三:3丙
代码如下:
HTML代码:

CSS

<div class="first-face container"> <span class="pip">span> <span class="pip">span> <span class="pip">span> <div>

1
2
3
4
5
<div class="first-face container">
    <span class="pip">span>
    <span class="pip">span>
    <span class="pip">span>
<div>

CSS代码如下:

CSS

.first-face { display: flex; flex-direction: column; justify-content: space-between; } .pip:nth-child(2) { align-self: center; } .pip:nth-child(3) { align-self: flex-end; }

1
2
3
4
5
6
7
8
9
10
11
.first-face {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}
.pip:nth-child(2) {
    align-self: center;
}
.pip:nth-child(3) {
    align-self: flex-end;
}

如下图所示:

澳门新萄京官方网站 36

四: 4丙
代码如下:
HTML代码:

CSS

<div class="first-face container"> <div class="column"> <span class="pip"></span> <span class="pip"></span> </div> <div class="column"> <span class="pip"></span> <span class="pip"></span> </div> </div>

1
2
3
4
5
6
7
8
9
10
<div class="first-face container">
    <div class="column">
        <span class="pip"></span>
        <span class="pip"></span>
    </div>
    <div class="column">
        <span class="pip"></span>
        <span class="pip"></span>
    </div>
</div>

CSS代码如下:

CSS

.column{ display: flex; justify-content: space-between; } .first-face { display: flex; flex-direction: column; justify-content: space-between; }

1
2
3
4
5
6
7
8
9
.column{
    display: flex;
    justify-content: space-between;
}
.first-face {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

如下图所示:

澳门新萄京官方网站 37

五:5丙
HTML结构如下:

XHTML

<div class="first-face container"> <div class="column"> <span class="pip"></span> <span class="pip"></span> </div> <div class="column"> <span class="pip"></span> </div> <div class="column"> <span class="pip"></span> <span class="pip"></span> </div> </div>

1
2
3
4
5
6
7
8
9
10
11
12
13
<div class="first-face container">
    <div class="column">
        <span class="pip"></span>
        <span class="pip"></span>
    </div>
    <div class="column">
        <span class="pip"></span>
    </div>
    <div class="column">
        <span class="pip"></span>
        <span class="pip"></span>
    </div>
</div>

css代码如下:

CSS

.column{ display: flex; justify-content: space-between; } .first-face { display: flex; flex-direction: column; justify-content: space-between; } .first-face .column:nth-of-type(2){ justify-content: center; }

1
2
3
4
5
6
7
8
9
10
11
12
.column{
    display: flex;
    justify-content: space-between;
}
.first-face {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}
.first-face .column:nth-of-type(2){
    justify-content: center;
}

如下图所示:

澳门新萄京官方网站 38

六:6丙
HTML结构如下:

XHTML

<div class="first-face container"> <div class="column"> <span class="pip"></span> <span class="pip"></span> </div> <div class="column"> <span class="pip"></span> <span class="pip"></span> </div> <div class="column"> <span class="pip"></span> <span class="pip"></span> </div> </div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="first-face container">
    <div class="column">
        <span class="pip"></span>
        <span class="pip"></span>
    </div>
    <div class="column">
        <span class="pip"></span>
         <span class="pip"></span>
    </div>
    <div class="column">
        <span class="pip"></span>
        <span class="pip"></span>
    </div>
</div>

css代码如下:

CSS

.column{ display: flex; justify-content: space-between; } .first-face { display: flex; flex-direction: column; justify-content: space-between; }

1
2
3
4
5
6
7
8
9
.column{
    display: flex;
    justify-content: space-between;
}
.first-face {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
}

如下图所示:

澳门新萄京官方网站 39

7,8,9丙也是一个意思,这里先不做了;

Flex布局兼容知识点总结

假设父容器class为 box,子项目为item.
旧版语法如下:
一:定义容器的display属性。
旧语法如下写法:

CSS

.box { display: -moz-box; display: -webkit-box; display: box; }

1
2
3
4
5
.box {
    display: -moz-box;
    display: -webkit-box;
    display: box;
}

新版语法需要如下写:

CSS

.box{ display: -webkit-flex; display: flex; }

1
2
3
4
.box{
    display: -webkit-flex;
    display: flex;
}

或者 行内

CSS

.box{ display: -webkit-inline-flex; display:inline-flex; }

1
2
3
4
.box{
    display: -webkit-inline-flex;
    display:inline-flex;
}

二:容器属性(旧版语法)

  1. box-pack 属性;(水平方向上对齐方式)
    box-pack定义子元素主轴对齐方式。

CSS

.box{ -moz-box-pack: center; -webkit-box-pack: center; box-pack: center; }

1
2
3
4
5
.box{
    -moz-box-pack: center;
    -webkit-box-pack: center;
    box-pack: center;
}

box-pack属性总共有4个值:

.box{
box-pack: start | end | center | justify;
/*主轴对齐:左对齐(默认) | 右对齐 | 居中对齐 | 左右对齐*/
}

各个值的含义如下:
start:
对于正常方向的框,首个子元素的左边缘被放在左侧(最后的子元素后是所有剩余的空间)
对于相反方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)
end:
对于正常方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)。
对于相反方向的框,首个子元素的左边缘被放在左侧(最后子元素后是所有剩余的空间)。
center:
均等地分割多余空间,其中一半空间被置于首个子元素前,另一半被置于最后一个子元素后.
justify:
在每个子元素之间分割多余的空间(首个子元素前和最后一个子元素后没有多余的空间)。

2.box-align 属性(垂直方向上的对齐方式)
box-align定义子元素交叉轴对齐方式。

CSS

.box{ -moz-box-align: center; /*Firefox*/ -webkit-box-align: center; /*Safari,Opera,Chrome*/ box-align: center; }

1
2
3
4
5
.box{
    -moz-box-align: center; /*Firefox*/
    -webkit-box-align: center; /*Safari,Opera,Chrome*/
    box-align: center;
}

box-align属性总共有5个值:

CSS

.box{ box-align: start | end | center | baseline | stretch; /*交叉轴对齐:顶部对齐(默认) | 底部对齐 | 居中对齐 | 文本基线对齐 | 上下对齐并铺满*/ }

1
2
3
4
.box{
    box-align: start | end | center | baseline | stretch;
    /*交叉轴对齐:顶部对齐(默认) | 底部对齐 | 居中对齐 | 文本基线对齐 | 上下对齐并铺满*/
}

各个值的含义如下:
start:
对于正常方向的框,每个子元素的上边缘沿着框的顶边放置。
对于反方向的框,每个子元素的下边缘沿着框的底边放置。
end:
对于正常方向的框,每个子元素的下边缘沿着框的底边放置。
对于反方向的框,每个子元素的上边缘沿着框的顶边放置。
center:
均等地分割多余的空间,一半位于子元素之上,另一半位于子元素之下。
baseline:
如果 box-orient 是inline-axis或horizontal,所有子元素均与其基线对齐。
stretch:
拉伸子元素以填充包含块

3.box-direction 属性
box-direction定义子元素的显示方向。

CSS

.box{ -moz-box-direction: reverse; /*Firefox*/ -webkit-box-direction: reverse; /*Safari,Opera,Chrome*/ box-direction: reverse; }

1
2
3
4
5
.box{
    -moz-box-direction: reverse; /*Firefox*/
    -webkit-box-direction: reverse; /*Safari,Opera,Chrome*/
    box-direction: reverse;
}

box-direction属性总共有3个值:

CSS

.box{ box-direction: normal | reverse | inherit; /*显示方向:默认方向 | 反方向 | 继承子元素的 box-direction*/ }

1
2
3
4
.box{
    box-direction: normal | reverse | inherit;
    /*显示方向:默认方向 | 反方向 | 继承子元素的 box-direction*/
}

4.box-orient 属性

box-orient定义子元素是否应水平或垂直排列。

CSS

.box{ -moz-box-orient: horizontal; /*Firefox*/ -webkit-box-orient: horizontal; /*Safari,Opera,Chrome*/ box-orient: horizontal; }

1
2
3
4
5
.box{
    -moz-box-orient: horizontal; /*Firefox*/
    -webkit-box-orient: horizontal; /*Safari,Opera,Chrome*/
    box-orient: horizontal;
}

box-orient属性总共有5个值:

CSS

.box{ box-orient: horizontal | vertical | inline-axis | block-axis | inherit; /*排列方向:水平 | 垂直 | 行内方式排列(默认) | 块方式排列 | 继承父级的box-orient*/ }

1
2
3
4
.box{
    box-orient: horizontal | vertical | inline-axis | block-axis | inherit;
    /*排列方向:水平 | 垂直 | 行内方式排列(默认) | 块方式排列 | 继承父级的box-orient*/
}

horizontal: 在水平行中从左向右排列子元素。
vertical: 从上向下垂直排列子元素。
inline-axis: 沿着行内轴来排列子元素(映射为 horizontal)。
block-axis: 沿着块轴来排列子元素(映射为 vertical)。
inherit: 应该从父元素继承 box-orient 属性的值。

5.box-lines 属性
box-lines定义当子元素超出了容器是否允许子元素换行。

CSS

.box{ -moz-box-lines: multiple; /*Firefox*/ -webkit-box-lines: multiple; /*Safari,Opera,Chrome*/ box-lines: multiple; }

1
2
3
4
5
.box{
    -moz-box-lines: multiple; /*Firefox*/
    -webkit-box-lines: multiple; /*Safari,Opera,Chrome*/
    box-lines: multiple;
}

box-lines属性总共有2个值:

CSS

.box{ box-lines: single | multiple; /*允许换行:不允许(默认) | 允许*/ }

1
2
3
4
.box{
    box-lines: single | multiple;
    /*允许换行:不允许(默认) | 允许*/
}

single:伸缩盒对象的子元素只在一行内显示
multiple:伸缩盒对象的子元素超出父元素的空间时换行显示

6.box-flex 属性。
box-flex定义是否允许当前子元素伸缩。

CSS

.item{ -moz-box-flex: 1.0; /*Firefox*/ -webkit-box-flex: 1.0; /*Safari,Opera,Chrome*/ box-flex: 1.0; }

1
2
3
4
5
.item{
    -moz-box-flex: 1.0; /*Firefox*/
    -webkit-box-flex: 1.0; /*Safari,Opera,Chrome*/
    box-flex: 1.0;
}

box-flex属性使用一个浮点值:

CSS

.item{ box-flex: ; /*伸缩:*/ }

1
2
3
4
.item{
    box-flex: ;
    /*伸缩:*/
}

7.box-ordinal-group 属性
box-ordinal-group定义子元素的显示次序,数值越小越排前。

.item{ -moz-box-ordinal-group: 1; /*Firefox*/ -webkit-box-ordinal-group: 1; /*Safari,Opera,Chrome*/ box-ordinal-group: 1; }

1
2
3
4
5
.item{
    -moz-box-ordinal-group: 1; /*Firefox*/
    -webkit-box-ordinal-group: 1; /*Safari,Opera,Chrome*/
    box-ordinal-group: 1;
}

box-direction属性使用一个整数值:

.item{ box-ordinal-group: ; /*显示次序:*/ }

1
2
3
4
.item{
    box-ordinal-group: ;
    /*显示次序:*/
}

新版语法如下:

定义容器的display属性:

.box{ display: -webkit-flex; /*webkit*/ display: flex; } /*行内flex*/ .box{ display: -webkit-inline-flex; /*webkit*/ display:inline-flex; }

1
2
3
4
5
6
7
8
9
10
.box{
    display: -webkit-flex; /*webkit*/
    display: flex;
}
 
/*行内flex*/
.box{
    display: -webkit-inline-flex; /*webkit*/
    display:inline-flex;
}

容器样式

.box{ flex-direction: row | row-reverse | column | column-reverse; /*主轴方向:左到右(默认) | 右到左 | 上到下 | 下到上*/ flex-wrap: nowrap | wrap | wrap-reverse; /*换行:不换行(默认) | 换行 | 换行并第一行在下方*/ flex-flow: ; /*主轴方向和换行简写*/ justify-content: flex-start | flex-end | center | space-between | space-around; /*主轴对齐方式:左对齐(默认) | 右对齐 | 居中对齐 | 两端对齐 | 平均分布*/ align-items: flex-start | flex-end | center | baseline | stretch; /*交叉轴对齐方式:顶部对齐(默认) | 底部对齐 | 居中对齐 | 上下对齐并铺满 | 文本基线对齐*/ align-content: flex-start | flex-end | center | space-between | space-around | stretch; /*多主轴对齐:顶部对齐(默认) | 底部对齐 | 居中对齐 | 上下对齐并铺满 | 上下平均分布*/ }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.box{
    flex-direction: row | row-reverse | column | column-reverse;
    /*主轴方向:左到右(默认) | 右到左 | 上到下 | 下到上*/
 
    flex-wrap: nowrap | wrap | wrap-reverse;
    /*换行:不换行(默认) | 换行 | 换行并第一行在下方*/
 
    flex-flow: ;
    /*主轴方向和换行简写*/
 
    justify-content: flex-start | flex-end | center | space-between | space-around;
    /*主轴对齐方式:左对齐(默认) | 右对齐 | 居中对齐 | 两端对齐 | 平均分布*/
 
    align-items: flex-start | flex-end | center | baseline | stretch;
    /*交叉轴对齐方式:顶部对齐(默认) | 底部对齐 | 居中对齐 | 上下对齐并铺满 | 文本基线对齐*/
 
    align-content: flex-start | flex-end | center | space-between | space-around | stretch;
    /*多主轴对齐:顶部对齐(默认) | 底部对齐 | 居中对齐 | 上下对齐并铺满 | 上下平均分布*/
}

flex-direction值介绍如下:
row: 默认值。灵活的项目将水平显示,正如一个行一样。
row-reverse: 与 row 相同,但是以相反的顺序。
column: 灵活的项目将垂直显示,正如一个列一样。
column-reverse: 与 column 相同,但是以相反的顺序。

flex-wrap 值介绍如下:
nowrap: flex容器为单行。该情况下flex子项可能会溢出容器。
wrap: flex容器为多行。该情况下flex子项溢出的部分会被放置到新行,子项内部会发生断行。
wrap-reverse: 换行并第一行在下方

flex-flow值介绍如下(主轴方向和换行简写):
: 定义弹性盒子元素的排列方向
:控制flex容器是单行或者多行。

justify-content值介绍如下:
flex-start: 弹性盒子元素将向行起始位置对齐。
flex-end: 弹性盒子元素将向行结束位置对齐。
center: 弹性盒子元素将向行中间位置对齐。
space-between: 第一个元素的边界与行的主起始位置的边界对齐,同时最后一个元素的边界与行的主结束位置的边距对齐,
而剩余的伸缩盒项目则平均分布,并确保两两之间的空白空间相等。

space-around: 伸缩盒项目则平均分布,并确保两两之间的空白空间相等,同时第一个元素前的空间以及最后一个元素后的空间为其他空白空间的一半。

align-items值介绍如下:
flex-start: 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
flex-end: 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。
center: 弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
baseline: 如弹性盒子元素的行内轴与侧轴为同一条,则该值与’flex-start’等效。其它情况下,该值将参与基线对齐。
stretch: 如果指定侧轴大小的属性值为’auto’,则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照’min/max-width/height’属性的限制。

align-content值介绍如下:
flex-start: 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
flex-end: 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。
center: 弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
space-between: 第一行的侧轴起始边界紧靠住弹性盒容器的侧轴起始内容边界,最后一行的侧轴结束边界紧靠住弹性盒容器的侧轴结束内容边界,
剩余的行则按一定方式在弹性盒窗口中排列,以保持两两之间的空间相等。
space-around: 各行会按一定方式在弹性盒容器中排列,以保持两两之间的空间相等,同时第一行前面及最后一行后面的空间是其他空间的一半。
stretch: 各行将会伸展以占用剩余的空间。如果剩余的空间是负数,该值等效于’flex-start’。在其它情况下,剩余空间被所有行平分,以扩大它们的侧轴尺寸。

子元素属性

.item{ order: ; /*排序:数值越小,越排前,默认为0*/ flex-grow: ; /* default 0 */ /*放大:默认0(即如果有剩余空间也不放大,值为1则放大,2是1的双倍大小,以此类推)*/ flex-shrink: ; /* default 1 */ /*缩小:默认1(如果空间不足则会缩小,值为0不缩小)*/ flex-basis: | auto; /* default auto */ /*固定大小:默认为0,可以设置px值,也可以设置百分比大小*/ flex: none | [ ? || ] /*flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto,*/ align-self: auto | flex-start | flex-end | center | baseline | stretch; /*单独对齐方式:自动(默认) | 顶部对齐 | 底部对齐 | 居中对齐 | 上下对齐并铺满 | 文本基线对齐*/ }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
.item{
    order: ;
    /*排序:数值越小,越排前,默认为0*/
 
    flex-grow: ; /* default 0 */
    /*放大:默认0(即如果有剩余空间也不放大,值为1则放大,2是1的双倍大小,以此类推)*/
 
    flex-shrink: ; /* default 1 */
    /*缩小:默认1(如果空间不足则会缩小,值为0不缩小)*/
 
    flex-basis:  | auto; /* default auto */
    /*固定大小:默认为0,可以设置px值,也可以设置百分比大小*/
 
    flex: none | [  ? ||  ]
    /*flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto,*/
 
    align-self: auto | flex-start | flex-end | center | baseline | stretch;
    /*单独对齐方式:自动(默认) | 顶部对齐 | 底部对齐 | 居中对齐 | 上下对齐并铺满 | 文本基线对齐*/
}

兼容写法

1. 首先是定义容器的 display 属性:

.box{ display: -webkit-box; /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */ display: -moz-box; /* 老版本语法: Firefox (buggy) */ display: -ms-flexbox; /* 混合版本语法: IE 10 */ display: -webkit-flex; /* 新版本语法: Chrome 21 */ display: flex; /* 新版本语法: Opera 12.1, Firefox 22 */ }

1
2
3
4
5
6
7
.box{
    display: -webkit-box; /* 老版本语法: Safari, iOS, Android browser, older WebKit browsers. */
    display: -moz-box; /* 老版本语法: Firefox (buggy) */
    display: -ms-flexbox; /* 混合版本语法: IE 10 */
    display: -webkit-flex; /* 新版本语法: Chrome 21 */
    display: flex; /* 新版本语法: Opera 12.1, Firefox 22 */
}

这里还要注意的是,如果子元素是行内元素,在很多情况下都要使用 display:block 或 display:inline-block
把行内子元素变成块元素(例如使用 box-flex 属性),这也是旧版语法和新版语法的区别之一。

2. 子元素主轴对齐方式(水平居中对齐)

.box{ -webkit-box-pack: center; -moz-justify-content: center; -webkit-justify-content: center; justify-content: center; }

1
2
3
4
5
6
.box{
    -webkit-box-pack: center;
    -moz-justify-content: center;
    -webkit-justify-content: center;
    justify-content: center;
}

兼容写法新版语法的 space-around 是不可用的:如下新版语法space-around;

.box{ box-pack: start | end | center | justify; /*主轴对齐:左对齐(默认) | 右对齐 | 居中对齐 | 左右对齐*/ justify-content: flex-start | flex-end | center | space-between | space-around; /*主轴对齐方式:左对齐(默认) | 右对齐 | 居中对齐 | 两端对齐 | 平均分布*/ }

1
2
3
4
5
6
7
.box{
    box-pack: start | end | center | justify;
    /*主轴对齐:左对齐(默认) | 右对齐 | 居中对齐 | 左右对齐*/
 
    justify-content: flex-start | flex-end | center | space-between | space-around;
    /*主轴对齐方式:左对齐(默认) | 右对齐 | 居中对齐 | 两端对齐 | 平均分布*/
}

3. 子元素交叉轴对齐方式(垂直居中对齐)

.box{ box-align: start | end | center | baseline | stretch; /*交叉轴对齐:顶部对齐(默认) | 底部对齐 | 居中对齐 | 文本基线对齐 | 上下对齐并铺满*/ align-items: flex-start | flex-end | center | baseline | stretch; /*交叉轴对齐方式:顶部对齐(默认) | 底部对齐 | 居中对齐 | 上下对齐并铺满 | 文本基线对齐*/ }

1
2
3
4
5
6
7
.box{
    box-align: start | end | center | baseline | stretch;
    /*交叉轴对齐:顶部对齐(默认) | 底部对齐 | 居中对齐 | 文本基线对齐 | 上下对齐并铺满*/
 
    align-items: flex-start | flex-end | center | baseline | stretch;
    /*交叉轴对齐方式:顶部对齐(默认) | 底部对齐 | 居中对齐 | 上下对齐并铺满 | 文本基线对齐*/
}

4. 子元素的显示方向。

子元素的显示方向可通过 box-direction box-orient flex-direction 实现,如下代码:
1. 左到右(水平方向)

.box{ -webkit-box-direction: normal; -webkit-box-orient: horizontal; -moz-flex-direction: row; -webkit-flex-direction: row; flex-direction: row; }

1
2
3
4
5
6
7
.box{
    -webkit-box-direction: normal;
    -webkit-box-orient: horizontal;
    -moz-flex-direction: row;
    -webkit-flex-direction: row;
    flex-direction: row;
}

2. 右到左(水平方向)

.box{ -webkit-box-pack: end; -webkit-box-direction: reverse; -webkit-box-orient: horizontal; -moz-flex-direction: row-reverse; -webkit-flex-direction: row-reverse; flex-direction: row-reverse; }

1
2
3
4
5
6
7
8
.box{
    -webkit-box-pack: end;
    -webkit-box-direction: reverse;
    -webkit-box-orient: horizontal;
    -moz-flex-direction: row-reverse;
    -webkit-flex-direction: row-reverse;
    flex-direction: row-reverse;
}

如上代码:box 写法的 box-direction 只是改变了子元素的排序,并没有改变对齐方式,需要新增一个 box-pack 来改变对齐方式。

3. 上到下(垂直方向上)

.box{ -webkit-box-direction: normal; -webkit-box-orient: vertical; -moz-flex-direction: column; -webkit-flex-direction: column; flex-direction: column; }

1
2
3
4
5
6
7
.box{
    -webkit-box-direction: normal;
    -webkit-box-orient: vertical;
    -moz-flex-direction: column;
    -webkit-flex-direction: column;
    flex-direction: column;
}

4. 下到上(垂直方向上)

.box{ -webkit-box-pack: end; -webkit-box-direction: reverse; -webkit-box-orient: vertical; -moz-flex-direction: column-reverse; -webkit-flex-direction: column-reverse; flex-direction: column-reverse; }

1
2
3
4
5
6
7
8
.box{
    -webkit-box-pack: end;
    -webkit-box-direction: reverse;
    -webkit-box-orient: vertical;
    -moz-flex-direction: column-reverse;
    -webkit-flex-direction: column-reverse;
    flex-direction: column-reverse;
}

5. 是否允许子元素伸缩

.item{ -webkit-box-flex: 1.0; -moz-flex-grow: 1; -webkit-flex-grow: 1; flex-grow: 1; }

1
2
3
4
5
6
.item{
    -webkit-box-flex: 1.0;
    -moz-flex-grow: 1;
    -webkit-flex-grow: 1;
    flex-grow: 1;
}

box语法中 box-flex 如果不是0就表示该子元素允许伸缩,而flex是分开的,上面 flex-grow 是允许放大(默认不允许)

.item{ -webkit-box-flex: 1.0; -moz-flex-shrink: 1; -webkit-flex-shrink: 1; flex-shrink: 1; }

1
2
3
4
5
6
.item{
    -webkit-box-flex: 1.0;
    -moz-flex-shrink: 1;
    -webkit-flex-shrink: 1;
    flex-shrink: 1;
}

flex-shrink 是允许缩小(默认允许)。box-flex 默认值为0,也就是说,在默认的情况下,在两个浏览器中的表现是不一样的:
介绍如下:

.item{ box-flex: ; /*伸缩:*/ flex-grow: ; /* default 0 */ /*放大:默认0(即如果有剩余空间也不放大,值为1则放大,2是1的双倍大小,以此类推)*/ flex-shrink: ; /* default 1 */ /*缩小:默认1(如果空间不足则会缩小,值为0不缩小)*/ }

1
2
3
4
5
6
7
8
9
10
.item{
    box-flex: ;
    /*伸缩:*/
 
    flex-grow: ; /* default 0 */
    /*放大:默认0(即如果有剩余空间也不放大,值为1则放大,2是1的双倍大小,以此类推)*/
 
    flex-shrink: ; /* default 1 */
    /*缩小:默认1(如果空间不足则会缩小,值为0不缩小)*/
}

6. 子元素的显示次序

.item{ -webkit-box-ordinal-group: 1; -moz-order: 1; -webkit-order: 1; order: 1; }

1
2
3
4
5
6
.item{
    -webkit-box-ordinal-group: 1;
    -moz-order: 1;
    -webkit-order: 1;
    order: 1;
}

注意:目前还有一个问题没有弄明白,旧版本中的那个属性对应着新版本的 align-self属性,有知道的请告知,谢谢!

4 赞 30 收藏 2 评论

澳门新萄京官方网站 40

上一篇文章介绍了Flex布局的语法,今天介绍常见布局的Flex写法。
你会看到,不管是什么布局,Flex往往都可以几行命令搞定。

阅读目录移动开发基本知识点

写在最前

我们都是前端工程师,无论你现在是页面仔,还是Node服务开发者,抑或是全端大神,毋庸置疑的是,我们都是前端工程师,我们生来就对追求页面的极致拥有敏锐的触觉,无论是页面实现方式的高大上、页面的极致的性能还是页面完美的展现,都是我们孜孜不倦的追求目标。即使这些在别人眼里,只是跟其他的页面一样没什么不同,但我们却能为其中那只有我们才知道的一抹别致而窃喜。

而今天我要讲的,就是我们最熟悉的老朋友,CSS。不讲枯燥的语法,抛开js,让我们一起来看业务中那别致的纯CSS实现,让我们一起来追求那更好的页面实现,希望我带着你走完这段旅程后,你能收获一些惊喜甚至灵感。

一、概述

浮动在移动布局中不再重要,flex盒模型越来越重要。

flexbox经历过三个版本,主要区别是2009年到2012年之间的语法变化。

最新的语法和现在规范是同步的(例display:flex和“flex-{*}”属性)。
在这之间的语法是2011年出现的非官方语法,只能被IE识别(例display:flexbox;display: -ms-flexbox)。
最老的语法产生于2009年(例display: box;或者“box-{*}”属性)

flexbox是css3新增盒子模型,可以实现复杂的布局。flexbox没有得到firefox,Opera,chrome浏览器的完全支持,但可以使用它们的私有属性定义firefox(-moz),opera(-o),chrome/safari(-webkit)。

flexbox经典的布局应用是垂直等高,水平均分,按比例划分。

澳门新萄京官方网站 41

calc基本用法
box-sizing的理解及使用理解
display:box的布局理解
flex布局Flex布局兼容知识点总结回到顶部移动开发基本知识点
一.
使用rem作为单位html { font-size: 100px; }
@media(min-width: 320px) { html { font-size: 100px; } }
@media(min-width: 360px) { html { font-size: 112.5px; } }
@media(min-width: 400px) { html { font-size: 125px; } }
@media(min-width: 640px) { html { font-size: 200px; } }

WHY,为什么

“我有很多事要做诶,忙都忙不过来,难道我要在这CSS上面浪费很多时间?”

不,不,不,我们要做的事情,当然不会只是满足技术的追求,而是会有实质的好处的!

我的观点如下:

  1. CSS跟UI结合更加紧密;
  2. 用CSS来实现,能减少JS计算,减少样式修改,减少重绘,提升渲染效率;
  3. 用CSS实现的,是一种模块化,更符合Web Components组件化思想,shadow DOM不就是致力于这么做么;
  4. 咱最爱的,逼格更高~

 

二、flexbox常用属性

我只列出代码,详细的语法解释请查阅《Flex布局教程:语法篇》。我的主要参考资料是Landon Schropp的文章和Solved by Flexbox。
一、骰子的布局
骰子的一面,最多可以放置9个点。

给手机设置100px的字体大小;
对于320px的手机匹配是100px,其他手机都是等比例匹配; 因此设计稿上是多少像素的话,那么转换为rem的时候,rem = 设计稿的像素/100 即可;

WHEN,何时

“我懂了,看起来是有那么点意思,可是我什么时候能用CSS来做大事啊?”

在我看来:

  1. 实现的对象是非交互性UI;
  2. 这么做不会给你带来过量的DOM。要知道最不能忍受的,就是臃肿的页面;
  3. 这么做能完美实现UI、能覆盖所有场景,否则设计跟产品不服。

澳门新萄京官方网站,什么是非交互性UI,就是不会在用户触发了某种行为时,哗啦啦来个闪瞎眼的交互,吓得用户直接高潮,而是从页面渲染后,就一直在那里,那么安静,那么美的女子,哦不,UI。

 

1、用于父元素的样式

  • display:block;该属性会将此元素及其直系子代加入弹性框模型中。(flexbox模型只适用于直系子代)
  • box-orient:horizontal|vertical|inline-axis|block-axis|inherit;该属性定义父元素中的子元素是如何排列的。horizontal对父元素的宽度分配划分。
  • box-pack:start|end|center|justify;box-pack表示父容器里面子容器的水平对齐方式

澳门新萄京官方网站 42

  • box-align:start|end|center|baseline|stretch;表示父容器里面子容器的垂直对齐方式。

澳门新萄京官方网站 43

澳门新萄京官方网站 44

二. 禁用a,button,input,optgroup,select,textarea 等标签背景变暗在移动端使用a标签做按钮的时候或者文字连接的时候,点击按钮会出现一个 "暗色的"背景,
比如如下代码:
<a href="">button1</a><input type="button" value="提交"/>在移动端点击后 会出现"暗色"的背景,
这时候我们需要在css加入如下代码即可:
a,button,input,optgroup,select,textarea{ -webkit-tap-highlight-color: rgba(0,0,0,0);}三. meta基础知识点:
1.页面窗口自动调整到设备宽度,并禁止用户及缩放页面。
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0,maximum-scale=1.0, user-scalable=0" />
属性基本含义:
content="width=device-width:控制 viewport 的大小,device-width 为设备的宽度initial-scale - 初始的缩放比例minimum-scale - 允许用户缩放到的最小比例maximum-scale - 允许用户缩放到的最大比例user-scalable - 用户是否可以手动缩放

HOW,该怎么做

“可是我还是不懂该如何做才能这么有逼格”

我个人的见解:

  1. 布局之美,理解透盒子模型,熟悉各种布局,不要忘了这是咱的根本;
  2. 自适应之美,放心交给浏览器去做,我们要做的,是思考规则;
  3. Magic,新技术及小技巧,总能在某一刹那给你最需要的援助;
  4. 前人之鉴,坑王之王,你已经身经百战了,还怕什么。

这些就是我总结出你要用CSS来实现一个别人想不到的东西时,应该具有素质。最重要的还是思考,因为没有一个东西是绝对最好的,我们总在前进。

澳门新萄京官方网站 45

下面就以两个手机QQ实际业务的例子,带领大家感受一下CSS的魅力。

 

2、用于子元素的样式

  • box-flex:0|任意数字;该属性让子容器针对父容器的宽度按一定规则进行划分。 

下面,就来看看Flex如何实现,从1个点到9个点的布局。你可以到codepen查看Demo。

2.忽略将页面中的数字识别为电话号码<meta name="format-detection" content="telephone=no" />

一、手Q吃喝玩乐  好友去哪儿九宫格图

下图是手Q吃喝玩乐  好友去哪儿九宫格图的图示:

澳门新萄京官方网站 46

 

从上图我们可以分析出如下需求:

  • 图片大小自适应;
  • 图片个数不同时,图片按照指定方式排列;
  • 图片相邻处有1px空白间隙。

我们以最复杂的6图布局为例,一步一步来看如何以纯CSS实现。

三、快速入门demo

澳门新萄京官方网站 47

  1. 忽略Android平台中对邮箱地址的识别<meta name="format-detection" content="email=no" />

  2. 当网站添加到主屏幕快速启动方式,可隐藏地址栏,仅针对ios的safari<meta name="apple-mobile-web-app-capable" content="yes" />

  3. 将网站添加到主屏幕快速启动方式,仅针对ios的safari顶端状态条的样式<meta name="apple-mobile-web-app-status-bar-style" content="black" />

  4. 需要在网站的根目录下存放favicon图标,防止404请求(使用fiddler可以监听到),在页面上需加link如下:
    <link rel="shortcut icon" href="/favicon.ico">因此页面上通用的模板如下:
    <!DOCTYPE html><html>
    <head>
    <meta charset="utf-8">
    <meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
    <meta content="yes" name="apple-mobile-web-app-capable">
    <meta content="black" name="apple-mobile-web-app-status-bar-style">
    <meta content="telephone=no" name="format-detection">
    <meta content="email=no" name="format-detection">
    <title>标题</title>
    <link rel="shortcut icon" href="/favicon.ico">
    </head>
    <body>

float布局

最容易想到的,也是最简单的方案,就是 float 布局:

  • 图片大小自适应:宽度百分比,高度使用 padding-top 百分比
  • 图片个数不同时,图片按照指定方式排列:使用 nth-child 伪类指定不同情况下的元素大小
  • 图片相邻处有1px空白间隙:使用 border-box border模拟边框

这里父元素的高度未知,height使用百分比行不通,而padding的百分比值是依据父元素的宽度来计算的,我们可以使用padding-top撑开高度。

让我们一瞅伪码,猛击我看demo

XHTML

<div class="float"> <div class="item">1</div> ... <div class="item">6</div> </div>

1
2
3
4
5
<div class="float">
    <div class="item">1</div>
    ...
    <div class="item">6</div>
</div>

 

CSS

.float { overflow: hidden; } .item { float: left; padding-top: 33.3%; width: 33.3%; border-right: 1px solid #fff; border-top: 1px solid #fff; } .item:nth-child(1) { padding-top: 66.6%; width: 66.6%; } .item:nth-child(2), .item:nth-child(3), .item:nth-child(6) { border-right: 0 none; } .item:nth-child(1), .item:nth-child(2) { border-top: 0 none; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
.float {
    overflow: hidden;
}
.item {
    float: left;
    padding-top: 33.3%;
    width: 33.3%;
    border-right: 1px solid #fff;
    border-top: 1px solid #fff;
}
.item:nth-child(1) {
    padding-top: 66.6%;
    width: 66.6%;
}
.item:nth-child(2), .item:nth-child(3), .item:nth-child(6) {
    border-right: 0 none;
}
.item:nth-child(1), .item:nth-child(2) {
    border-top: 0 none;
}

 

实际效果并不理想,如下图:

澳门新萄京官方网站 48

可以看到 float 布局的优点是DOM结构十分简单,缺点是容易出现空白间隙错位,优缺点都十分明显,它更适用于js计算的版本。

1、子元素水平排列,按比例分割父元素宽度

.parent宽度500px,其子元素水平排列,child-one占1/6,child-two占2/6,child-three占了3/6。

<style>
        .parent{
            width: 500px;
            height: 200px;
            display: -webkit-box;
            -webkit-box-orient: horizontal;/* 虽然默认的排列方式是水平的,但是为了区分起见,加上该属性 */
        }
        .child-one{
            background: lightblue;
            -webkit-box-flex: 1;
        }
        .child-two{
            background: lightgray;
            -webkit-box-flex: 2;
        }
        .child-three{
            background: lightgreen;
            -webkit-box-flex: 3;
        }
    </style>
</head>
<div style="display: -webkit-box;-webkit-box-pack: center;border: 1px solid #000;"><!---webkit-box-pack:center让.parent水平居中-->
    <div class="parent">
        <div class="child-one">1</div>
        <div class="child-two">2</div>
        <div class="child-three">3</div>
    </div>
</div>

澳门新萄京官方网站 49

如果不加说明,本节的HTML模板一律如下。
<div class="box"> <span class="item"></span></div>

这里开始内容 </body></html>

flex布局

还有谁?flex!flex布局有以下重要特性

  • 可以将 flex 布局下的元素展示在同一水平、垂直方向上;
  • 可以支持自动换行、换列(移动端-webkit-box暂不支持,好消息是从iOS9.2、Android4.4开始都支持新flex了);
  • 可以指定 flex 布局下的元素如何分配空间,可以让元素自动占满父元素剩余空间;
  • 可以指定 flex 布局下的元素的展示方向,排列方式。

这里面的子元素同一水平、垂直方向展示对我们很有帮助,它使我们更容易控制子元素的排列,而不会错位。

使用 flex 布局与 float 布局不同的地方在于,移动端目前主要还是-webkit-box,因此图片个数不同时,我们需要使用不同的html,组合出不同的块。

2、子元素水平排列,一个子元素定宽,剩余子元素按比例分割

澳门新萄京官方网站 50<style> .parent{ width: 500px; height: 200px; display: -webkit-box; background-color:pink; -webkit-box-orient: horizontal;/* 虽然默认的排列方式是水平的,但是为了区分起见,加上该属性 */ } .child-one{ background: lightblue; -webkit-box-flex: 1; } .child-two{ background: lightgray; -webkit-box-flex: 2; } .child-three{ background: lightgreen; /*定宽,并加上左右margin,父元素加上粉色背景色更好理解*/ width:150px; margin:0 15px; } </style> </head> <div style="display: -webkit-box;-webkit-box-pack: center;border: 1px solid #000;"><!---webkit-box-pack:center让.parent水平居中--> <div class="parent"> <div class="child-one">1</div> <div class="child-two">2</div> <div class="child-three">3</div> </div> </div> View Code

澳门新萄京官方网站 51

上面代码中,div元素(代表骰子的一个面)是Flex容器,span元素(代表一个点)是Flex项目。如果有多个项目,就要添加多个span元素,以此类推。
1.1 单项目
首先,只有左上角1个点的情况。Flex布局默认就是首行左对齐,所以一行代码就够了。

四:移动端如何定义字体font-familybody{font-family: "Helvetica Neue", Helvetica, sans-serif;}

flex 布局上下划分

来,我们快动手分块吧!新解决方案出现导致的肾上腺素上升,使我们迫不及待使用了传统css文档流自上而下的方式来划分,我称为上下划分,如下图:

澳门新萄京官方网站 52

上面一块包含左侧1个2/3的大块,右侧2个1/3的小块,下面一块则是3个1/3的小块。

我们指定2/3的大块宽度是66.6%,1/3的小块宽度是33.3%(实际可以使用-webkit-box-flex来分配,这里为了下面的计算方便)。

来看下实际效果,你也可以猛击demo来查看源码:

澳门新萄京官方网站 53

demo中我们看到中间那条竖空白间隙错位了,为什么?按照预期我们上面块左侧宽度66.6%,下面块左侧宽度33.3%

  • 33.3%,两个宽度应该相等才对。

然而我们忽略了flex一个重要特性,子元素会自动占满父元素剩余空间,这时子元素宽度计算受flex控制,下面块的3个子元素宽度计算并非一定是相等的,会有些许差异,此时66.6% != 33.3% 33.3%

怎么破!别急,我们刚刚只是受到了肾上激素的影响,让我们冷静下来重新思考如何划分。

3、子元素垂直排列,分割父元素高度

.parent中的子元素垂直排列,所以每个子元素宽度占100%。

澳门新萄京官方网站 54<style> .parent{ width: 400px; height: 600px; display: -webkit-box; background-color:pink; -webkit-box-orient: vertical;/*子元素垂直排列 */ } .child-one{ background: lightblue; -webkit-box-flex: 1; } .child-two{ background: lightgray; -webkit-box-flex: 2; } .child-three{ background: lightgreen; /*定高,有上下margin,父元素加上粉色背景色更好理解*/ height:200px; margin:15px 0; } </style> </head> <div style="display: -webkit-box;-webkit-box-pack: center;border: 1px solid #000;"><!---webkit-box-pack:center让.parent水平居中--> <div class="parent"> <div class="child-one">1</div> <div class="child-two">2</div> <div class="child-three">3</div> </div> </div> View Code

澳门新萄京官方网站 55

澳门新萄京官方网站 56

五:在android或者IOS下 拨打电话代码如下:<a href="tel:15602512356">打电话给:15602512356</a>

flex 布局左右划分

问题在于竖间隙涉及到的左右侧宽度计算不稳定,既然如此,我们可以考虑依据竖间隙左右划分,排除不稳定因素,如下图:

澳门新萄京官方网站 57

这样就解决了竖间隙错位问题,但我们依然有所担心,中间的横间隙会错位吗?我们来算一下。

整体父元素宽度确定,为W;

整体父元素高度由子元素撑开,不确定;

左侧大块高度:左侧flex父元素宽度(W * 66.6%) * 100% = W * 66.6%;

左侧小块高度:左侧flex父元素宽度( W * 66.6%) * 50% = W * 33.3%;

右侧小块高度:右侧flex父元素宽度( W * 33.3%) * 100% = W * 33.3%。

依然是66.6%与33.3% 33.3%的等式,但这次高度计算会受 flex 影响吗?

不会,因为此时整体父元素的高度是不确定的,是由子元素内容撑开的,flex的高度也是由子元素来撑开的。

最终 66.6% === 33.3% 33.3%

我们来看下伪码,猛击我看demo:

XHTML

<div class="wrap-box wrap-6"> <div class="flex-inner"> <div class="flex-box1 flex-item"></div> <div class="flex-box2"> <div class="flex-item"></div> <div class="flex-item"></div> </div> </div> <div class="flex-inner"> <div class="flex-item"></div> <div class="flex-item"></div> <div class="flex-item"></div> </div> </div>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<div class="wrap-box wrap-6">
    <div class="flex-inner">
      <div class="flex-box1 flex-item"></div>
      <div class="flex-box2">
        <div class="flex-item"></div>
        <div class="flex-item"></div>
      </div>
    </div>
    <div class="flex-inner">
      <div class="flex-item"></div>
      <div class="flex-item"></div>
      <div class="flex-item"></div>
    </div>
</div>

 

CSS

.wrap-box { display: -webkit-box; } .flex-inner { -webkit-box-flex: 1; display: -webkit-box; } .flex-item { -webkit-box-flex: 1; position: relative; } .wrap-6 { -webkit-box-orient: horizontal; } .wrap-6 .flex-inner { -webkit-box-flex: 0; -webkit-box-orient: vertical; } .wrap-6 .flex-inner:first-child { width: 66.6%; } .wrap-6 .flex-inner:last-child { width: 33.3%; } .wrap-6 .flex-item { padding-top: 100%; } .wrap-6 .flex-box2 .flex-item { padding-top: 50%; } .wrap-6 .flex-box2 { display: -webkit-box; -webkit-box-orient: horizontal; } .wrap-6 .flex-inner:first-child, .wrap-6 .flex-box2 .flex-item:first-child { margin-right: 1px; } .wrap-6 .flex-box1, .wrap-6 .flex-inner:last-child .flex-item:first-child, .wrap-6 .flex-inner:last-child .flex-item:nth-child(2) { margin-bottom: 1px; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
.wrap-box {
  display: -webkit-box;
}
 
.flex-inner {
    -webkit-box-flex: 1;
    display: -webkit-box;
}
 
.flex-item {
    -webkit-box-flex: 1;
    position: relative;
}
.wrap-6 {
      -webkit-box-orient: horizontal;
}
.wrap-6 .flex-inner {
      -webkit-box-flex: 0;
      -webkit-box-orient: vertical;
}
.wrap-6 .flex-inner:first-child {
      width: 66.6%;
}
.wrap-6 .flex-inner:last-child {
      width: 33.3%;
}
.wrap-6 .flex-item {
      padding-top: 100%;
}
.wrap-6 .flex-box2 .flex-item {
      padding-top: 50%;
}
.wrap-6 .flex-box2 {
      display: -webkit-box;
      -webkit-box-orient: horizontal;
}
.wrap-6 .flex-inner:first-child,
.wrap-6 .flex-box2 .flex-item:first-child {
      margin-right: 1px;
}
.wrap-6 .flex-box1,
.wrap-6 .flex-inner:last-child .flex-item:first-child,
.wrap-6 .flex-inner:last-child .flex-item:nth-child(2) {
      margin-bottom: 1px;
}

 

实际效果:

澳门新萄京官方网站 58

澳门新萄京官方网站 59

 

4、子元素水平排列,定高垂直方向居中对齐

父元素中子元素水平排列,子元素定高时设置垂直方向对齐方式为居中对齐。

澳门新萄京官方网站 60<style> .parent{ width: 400px; height: 200px; display: -webkit-box; background-color:pink; -webkit-box-orient: horizontal; /*-webkit-box-align:center;/*父元素中子元素水平排列,定高时设置垂直方向对齐方式为垂直居中*/ } .child-one{ background: lightblue; -webkit-box-flex: 1; height:100px; } .child-two{ background: lightgray; -webkit-box-flex: 2; height:110px; } .child-three{ background: lightgreen; -webkit-box-flex: 2; height:120px; } </style> </head> <div style="display: -webkit-box;-webkit-box-pack: center;border: 1px solid #000;"><!---webkit-box-pack:center让.parent水平居中--> <div class="parent"> <div class="child-one">1</div> <div class="child-two">2</div> <div class="child-three">3</div> </div> </div> View Code

澳门新萄京官方网站 61

.box { display: flex;}

六:发短信(winphone系统无效)<a href="sms:10010">发短信给: 10010</a>

二、手Q家校群先锋教师进度条

下图是手Q家校群先锋教师进度条设计稿:

澳门新萄京官方网站 62

图中的12345便是主角进度条。分析需求如下:

  • 线的长度不固定
  • 点平均地分布在一条线上
  • 点的个数不固定,可能会改变
  • 激活的点之间线的颜色是绿色的

让我们看下如何用纯CSS实现。

四、经典布局

flexbox经典的布局应用是垂直等高,水平均分,按比例划分,水平垂直居中,还可以实现移动端的弹窗。

设置项目的对齐方式,就能实现居中对齐和右对齐。

七:调用手机系统自带的邮件功能1. 当浏览者点击这个链接时,浏览器会自动调用默认的客户端电子邮件程序,并在收件人框中自动填上收件人的地址下面
<p><a href="mailto:tugenhua@126.com">发电子邮件</a></p>2、填写抄送地址;在IOS手机下:
在收件人地址后用?cc=开头;如下代码:<p><a href="mailto:tugenhua@126.com?cc=879083421@qq.com">填写抄送地址</a></p>在android手机下,
如下代码:
<p><a href="mailto:tugenhua@126.com?879083421@qq.com">填写抄送地址</a></p>3. 填上密件抄送地址,
如下代码:
在IOS手机下:紧跟着抄送地址之后,写上&bcc=,填上密件抄送地址<a href="mailto:tugenhua@126.com?cc=879083421@qq.com&bcc=aa@qq.com">填上密件抄送地址</a>在安卓下;
如下代码:
<p><a href="mailto:tugenhua@126.com?879083421@qq.com?aa@qq.com">填上密件抄送地址</a></p>4. 包含多个收件人、抄送、密件抄送人,用分号隔(;)开多个收件人的地址即可实现。
如下代码:
<p><a href="mailto:tugenhua@126.com;879083421@qq.com;aa@qq.com">包含多个收件人、抄送、密件抄送人,用分号隔(;)开多个收件人的地址即可实现</a></p>5、包含主题,用?subject=可以填上主题。
如下代码:
<p><a href="mailto:tugenhua@126.com?subject=【邀请函】">包含主题,可以填上主题</a></p>6、包含内容,用?body=可以填上内容(需要换行的话,使用 给文本换行);
代码如下:
<p><a href="mailto:tugenhua@126.com?body=我来测试下">包含内容,用?body=可以填上内容</a></p>

绝对定位大法

我们看了第一眼,便想起了最受青睐的万金油 absoulte,方案图如下:

澳门新萄京官方网站 63

  • 将点、线分离,灰色背景线使用父元素的after实现;
  • 点使用绝对定位,left百分比值定位;
  • 绿色线条使用父元素before实现,绝对定位,宽度百分比值。

不消一会儿我们就做出来了,但再多看一眼觉得十分不妥,点和线百分比值都要手动指定,不便修改点的数量,且过多的绝对定位不优雅。

这并不是我们想要的CSS实现。

1、垂直等高,水平均分,按比例划分

.parent{display: -webkit-box; display: -webkit-flex; display: flex;}
.child{-webkit-box-flex: 1; -webkit-flex: 1; flex: 1;}

完整demo

澳门新萄京官方网站 64<style> .parent{display: -webkit-box; display: -webkit-flex; display: flex; height:100px; width:150px; background-color:pink;} .child{-webkit-box-flex: 1; -webkit-flex: 1; flex: 1; border:1px solid green; } </style> <div class="parent"> <div class="child"></div> <div class="child"></div> <div class="child"></div> </div> View Code

澳门新萄京官方网站 65

澳门新萄京官方网站 66

  1. 内容包含链接,含http(s)://等的文本自动转化为链接。如下代码:<p><a href="mailto:tugenhua@126.com?body=;

百分比宽度切分

于是我们回归本源,遵从CSS世界的规则来,将点线合起来看,每个子元素包含自己的点线,从左至右排列,并使用自适应布局的方式,子元素宽度为百分比,如下图的方案:

澳门新萄京官方网站 67

  • 灰色背景线依旧使用父元素的after实现;
  • 每个子元素宽度一致,为平均下来的百分比值,如25%;
  • 点绝对定位在子元素右侧;
  • 绿色线条在子元素内实现。

然而我们发现这么做不灵,在普通盒子模型里,子元素宽度总和无法溢出父元素(除了flex),在这里总宽度是4个带线子元素(百分比) 1个点宽度(固定),实际25%的划分展示与理想不符。

此外,最左侧只有点,没有线条,点的宽度固定,线条宽度不定,css无法计算(忘掉表达式吧),无法隐藏线条,fail!

2、水平居中

.parent{display: -webkit-box; display: -webkit-flex; display: flex; -webkit-box-pack: center; -webkit-justify-content: center; justify-content: center;}

完整demo:

澳门新萄京官方网站 68<style> .parent{display: -webkit-box; display: -webkit-flex; display: flex; -webkit-box-pack: center; -webkit-justify-content: center; justify-content: center; height:100px; width:150px; background-color:pink;} .child{ width:50px; height:50px; border:1px solid green; } </style> <div class="parent"> <div class="child"></div> </div> View Code

澳门新萄京官方网站 69

.box { display: flex; justify-content: center;}

八:webkit表单输入框placeholder的颜色值改变:如果想要默认的颜色显示红色,
代码如下:
input::-webkit-input-placeholder{color:red;}如果想要用户点击变为蓝色,
代码如下:
input:focus::-webkit-input-placeholder{color:blue;}

百分比宽度切分进化版

搅屎棍就是最左侧那固定的点,难道就不能把最左边那该死的点从我们的百分比团队里排除掉吗?如下图:

澳门新萄京官方网站 70

当然可以!我们只需父元素腾出这个子元素宽度出来,不算在其余子元素宽度百分比计算内。

腾出空间方式:父元素 margin-left 出空间,子元素负 margin-left 移回原位。

此时父元素给子元素的内容计算宽度就是width – margin-left,除首个子元素外,其余每个子元素宽度一致,为平均下来的百分比值。

实际效果,由于源码较长,请猛击demo看源码:

澳门新萄京官方网站 71

完(美),话还没说完,产品就找来要改点的数量。

澳门新萄京官方网站 72

我们一看宽度是百分比设死的,这样在点的数量修改时,我们还是要改css,完。

澳门新萄京官方网站 73

3、垂直居中

.parent{display: -webkit-box; display: -webkit-flex; display: flex; -webkit-box-align: center; -webkit-align-items: center; align-items: center;}

完整demo

澳门新萄京官方网站 74<style> .parent{display: -webkit-box; display: -webkit-flex; display: flex; -webkit-box-align: center; -webkit-align-items: center; align-items: center; height:100px; width:150px; background-color:pink;} .child{ width:50px; height:50px; border:1px solid green; } </style> </head> <body> <div class="parent"> <div class="child"></div> </div> View Code

澳门新萄京官方网站 75

澳门新萄京官方网站 76

九:移动端IOS手机下清除输入框内阴影,代码如下input,textarea {-webkit-appearance: none;}十:
在IOS中 禁止长按链接与图片弹出菜单a, img {-webkit-touch-callout: none;}回到顶部calc基本用法calc基本语法:
.class {width: calc(expression);}
它可以支持加,减,乘,除; 在我们做手机端的时候非常有用的一个知识点;
优点如下:

百分比宽度划分究极版

来,心中默念3遍“要优雅不要污”,灵光一闪,flex大法好!

flex重要特性之一,可以指定 flex 布局下的元素如何分配空间,我们将点线元素宽度改为-webkit-box-flex:1,此时子元素就自动平均分了父元素宽度。

实际效果,猛击demo:

澳门新萄京官方网站 77

澳门新萄京官方网站 78

 

4、移动端弹窗 

 现在移动端很多弹窗组件使用flexbox来实现,直接嵌套div.overlay>div.pop。

澳门新萄京官方网站 79<style> .overlay{ /*flex style*/ display:-webkit-box; -webkit-box-orient:horizontal; -webkit-box-pack:center; -webkit-box-align:center; display:-moz-box; -moz-box-orient:horizontal; -moz-box-pack:center; -moz-box-align:center; display:-o-box; -o-box-orient:horizontal; -o-box-pack:center; -o-box-align:center; display:-ms-box; -ms-box-orient:horizontal; -ms-box-pack:center; -ms-box-align:center; display:box; box-orient:horizontal; box-pack:center; box-align:center; display: -webkit-flex; -webkit-align-items: center; -webkit-justify-content: center; display: flex; align-items: center; justify-content: center; /*other style*/ width:100%; max-width:750px; height:100%; position:fixed; top:0; left:0; background:rgba(0,0,0,0.5); } .popup{ width:90%; max-width:650px; border:1px solid green; padding:20px 4% 4% 4%; box-sizing:border-box; height:auto; background:#fff; border-radius:4px; position:relative; } .popup-close{ width:15px; height:14px; background:url(image/close.png) no-repeat; background-size:100% 100%; position:absolute; top:8px; right:8px; } </style> 主页面的文字 <div class="overlay"> <div class="popup"> <a href="javascript:;" class="popup-close"></a> 弹层的文字 </div> </div> View Code

澳门新萄京官方网站 80

.box { display: flex; justify-content: flex-end;}

  1. 支持使用 " ","-","*" 和 "/" 四则运算。
  2. 可以混合使用百分比(%),px,em,rem等作为单位可进行计算。
    浏览器的兼容性有如下:IE9 ,FF4.0 ,Chrome19 ,Safari6
    如下测试代码:
    <div class="calc">我是测试calc</div>.calc{ margin-left:50px; padding-left:2rem; width:calc(100%-50px-2rem); height:10rem;}
    回到顶部box-sizing的理解及使用该属性是解决盒模型在不同的浏览器中表现不一致的问题。
    它有三个属性值分别是:content-box: 默认值(标准盒模型);
    width和height只包括内容的宽和高,不包括边框,内边距;
    比如如下div元素:<div class="box">box</div>css
    如下:.box {width:200px;height:200px;padding:10px;border:1px solid #333;margin:10px;box-sizing:content-box;}
    那么在浏览器下渲染的实际宽度和高度分别是:222px,222px;
    因为在标准的盒模型下,在浏览器中渲染的实际宽度和高度包括内边距(padding)和边框的(border);
    如下图所示:border-box: width与height是包括内边距和边框的,不包括外边距,这是IE的怪异模式使用的盒模型,
    比如还是上面的代码:
    <div class="box">box</div>;
    css代码如下:
    .box {width:200px;height:200px;padding:10px;border:1px solid #333;margin:10px;box-sizing:border-box;}
    那么此时浏览器渲染的width会是178px,height也是178px; 因为此时定义的width和height会包含padding和border在内;
    使用这个属性对于在使用百分比的情况下布局页面非常有用,比如有两列布局宽度都是50%;
    但是呢还有padding和border,那么这个时候如果我们不使用该属性的话(当然我们也可以使用calc方法来计算);
    那么总宽度会大于页面中的100%;因此这时候可以使用这个属性来使页面达到100%的布局.
    如下图所示:
    浏览器支持的程度如下:
    回到顶部理解display:box的布局display: box;
    box-flex 是css3新添加的盒子模型属性,它可以为我们解决按比列划分,水平均分,及垂直等高等。
    一:按比例划分:目前box-flex 属性还没有得到firefox, Opera, chrome浏览器的完全支持,但我们可以使用它们的私有属性定义firefox(-moz-),opera(-o-),chrome/safari(-webkit-)。
    box-flex属性主要让子容器针对父容器的宽度按一定的规则进行划分。
    代码如下:
    <div class="test">
    <p id="p1">Hello</p>
    <p id="p2">W3School</p>
    </div>
    <style>
    .test{
    display:-moz-box;
    display:-webkit-box;
    display:box;
    width:300px;
    }

旅程还在继续

本文讲了笔者对前端页面开发中尽量思考多用CSS实现的一些见解,主观性强烈,欢迎大家的一起来探讨。

通过业务实践中的两个例子带领大家走了一回CSS实现旅程,还望各位观众姥爷过了瘾,如大家有一些更好的实践十分欢迎与我分享。

我跟你的旅程就在此结束了,但你的旅程依然在继续,若本文能给你带来启发,我就最开心不过了。

最后,flex大法好!

 

行文匆忙,如大家发现错误欢迎指正。

感谢你的阅读!

 

4 赞 12 收藏 评论

澳门新萄京官方网站 81

五、兼容性

澳门新萄京官方网站 82

 

PC端:

  • 无前缀:Chrome 29 , Firefox 28 , IE 11 , Opera 17
  • 需要前缀:Chrome 21 , Safari 6.1 , Opera 15 需要前缀-webkit-

提示:旧版本的Firefox(22-27)支持除了flex-wrapflex-flow之外的新语法。Opera (12.1 - 17 )使用flex可以没有私有前缀,但是中间的15和16版本需要私有前缀。

移动端:

  • 无前缀:Android 4.4 , Opera mobile 12.1 , BlackBerry 10 , Chrome for Android 39 , Firefox for Android 33 , IE 11 mobile
  • 需要前缀:iOS 7.1 需要前缀-webkit-

设置交叉轴对齐方式,可以垂直移动主轴。

p1{

-moz-box-flex:1.0;
-webkit-box-flex:1.0;
box-flex:1;
border:1px solid red;
}

六、资源链接

display:-webkit-box

A Complete Guide to Flexbox

探索Flexbox

时下Web App中的Flexbox应用

 

本文作者starof,因知识本身在变化,作者也在不断学习成长,文章内容也不定时更新,为避免误导读者,方便追根溯源,请诸位转载注明出处:

 

一、概述 浮动在移动布局中不再重要,flex盒模型越来越重要。 flexbox经历过三个版本,主要区别是2009年到2012年之间的语...

澳门新萄京官方网站 83

p2{

-moz-box-flex:2.0;
-webkit-box-flex:2.0;
box-flex:2;
border:1px solid blue;
}
</style>
如下图所示:
注意:

  1. 必须给父容器定义 display: box, 其子元素才可以进行划分。如上给id为p1设置box-flex设置为1,给id为p2设置box-flex为2,说明分别给其设置1等分和2等分,也就是说给id为p1元素设置宽度为 300 * 1/3 = 100px; 给id为p2元素设置宽度为 300 * 2/3 = 200px;

  2. 如果进行父容器划分的同时,他的子元素有的设置了宽度,有的要进行划分的话,那么划分的宽度 = 父容器的宽度 – 已经设置的宽度 。再进行对应的划分。

如下图所示:

二:box具体的属性如下:box-orient | box-direction | box-align | box-pack | box-lines1. box-orient;box-orient 用来确定父容器里的子容器的排列方式,是水平还是垂直,
可选属性如下所示:
horizontal | vertical | inline-axis | block-axis | inherit一:horizontal | inline-axis给box设置 horizontal 或 inline-axis 属性效果表现一致。

都可以将子元素进行水平排列.如下html代码:
<div class="test">
<p id="p1">Hello</p>
<p id="p2">W3School</p>
</div>

css代码如下:
<style>
.test{
display:-moz-box;
display:-webkit-box;
display:box;
width:300px;
height:200px;
-moz-box-orient:horizontal;
-webkit-box-orient:horizontal;
box-orient:horizontal;
}

.box { display: flex; align-items: center;}

p1{

-moz-box-flex:1.0;
-webkit-box-flex:1.0;
box-flex:1;
border:1px solid red;
}

澳门新萄京官方网站 84

p2{

-moz-box-flex:2.0;
-webkit-box-flex:2.0;
box-flex:2;
border:1px solid blue;
}
</style>

如下图所示:
二:
vertical 可以让子元素进行垂直排列;
css代码如下:
<style>
*{margin:0;padding:0;}
.test{
display:-moz-box;
display:-webkit-box;
display:box;
width:300px;
height:200px;
-moz-box-orient:vertical;
-webkit-box-orient:vertical;
box-orient:vertical;
}

.box { display: flex; justify-content: center; align-items: center;}

p1{

-moz-box-flex:1.0;
-webkit-box-flex:1.0;
box-flex:1;
border:1px solid red;
}

澳门新萄京官方网站 85

p2{

-moz-box-flex:2.0;
-webkit-box-flex:2.0;
box-flex:2;
border:1px solid blue;
}
</style>

如下图所示:
三:
inherit。
Inherit属性让子元素继承父元素的相关属性。效果和第一种效果一样,都是水平对齐;2. box-direction
还是如下html代码:
<div class="test">
<p id="p1">Hello</p>
<p id="p2">W3School</p>
</div>box-direction 用来确定父容器里的子容器的排列顺序,
具体的属性如下代码所示:
normal | reverse | inheritnormal是默认值,按照HTML文档里的结构的先后顺序依次展示,
如果box-direction 设置为 normal,则结构顺序还是 id为p1元素,id为p2元素。reverse: 表示反转。
如果设置reverse反转,则结构排列顺序为 id为p2元素,id为p1元素。
如下代码:
css代码如下:
<style>
*{margin:0;padding:0;}
.test{
display:-moz-box;
display:-webkit-box;
display:box;
width:300px;
height:200px;
-moz-box-direction:reverse;
-webkit-box-direction:reverse;
box-direction:reverse;
}

.box { display: flex; justify-content: center; align-items: flex-end;}

p1{

-moz-box-flex:1.0;
-webkit-box-flex:1.0;
box-flex:1;
border:1px solid red;
}

澳门新萄京官方网站 86

p2{

-moz-box-flex:2.0;
-webkit-box-flex:2.0;
box-flex:2;
border:1px solid blue;
}
</style>

如下图所示:

  1. box-align:box-align 表示容器里面字容器的垂直对齐方式,可选参数如下表示:
    start | end | center | baseline | stretch1.
    对齐方式 start:
    表示居顶对齐代码如下:
    <style>
    *{margin:0;padding:0;}
    .test{
    display:-moz-box;
    display:-webkit-box;
    display:box;
    width:300px;
    height:200px;
    -moz-box-align:start;
    -webkit-box-align:start;
    box-align:start;
    }

.box { display: flex; justify-content: flex-end; align-items: flex-end;}

p1{

-moz-box-flex:1.0;
-webkit-box-flex:1.0;
box-flex:1;
height:160px;
border:1px solid red;
}

1.2 双项目

p2{

-moz-box-flex:2.0;
-webkit-box-flex:2.0;
box-flex:2;
height:100px;
border:1px solid blue;
}
</style>

如上 P1 高度为160px p2 为100px;

对齐方式如下图所示:
如果改为end的话,那么就是 居低对齐了,
如下:
center表示居中对齐,如下:stretch 在box-align表示拉伸,拉伸与其父容器等高。
如下代码:
在firefox下 和父容器下等高,满足条件,如下:在chrome下不满足条件;

如下:

  1. box-packbox-pack表示父容器里面子容器的水平对齐方式,
    可选参数如下表示:start | end | center | justifybox-pack:start; 表示水平居左对齐,对于正常方向的框,首个子元素的左边缘被放在左侧(最后的子元素后是所有剩余的空间)对于相反方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)

代码如下所示:
<style>
*{margin:0;padding:0;}
.test{
display:-moz-box;
display:-webkit-box;
display:box;
width:400px;
height:120px;
border:1px solid #333;
-moz-box-pack:start;
-webkit-box-pack:start;
box-pack:start;
}

澳门新萄京官方网站 87

p1{

width:100px;
height:108px;
border:1px solid red;
}

.box { display: flex; justify-content: space-between;}

p2{

width:100px;
height:108px;
border:1px solid blue;
}
</style>

如下图所示:
box-pack:center;表示水平居中对齐,均等地分割多余空间,其中一半空间被置于首个子元素前,另一半被置于最后一个子元素后;

如下图所示:
box-pack:end;表示水平居右对齐;对于正常方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)。对于相反方向的框,首个子元素的左边缘被放在左侧(最后子元素后是所有剩余的空间)。

如下图所示:

box-pack:Justify:
在box-pack表示水平等分父容器宽度(在每个子元素之间分割多余的空间(首个子元素前和最后一个子元素后没有多余的空间))

如下:
回到顶部理解flex布局我们传统的布局方式是基于在盒子模型下的,依赖于display属性的,position属性的或者是float属性的,但是在传统的布局上面并不好布局;
比如我们想让某个元素垂直居中的话,我们常见的会让其元素表现为表格形式,
比如display:table-cell属性什么的,我们现在来学习下使用flex布局是非常方便的;目前的浏览器支持程度:IE10 ,chrome21 ,opera12.1 ,Firefox22 ,safari6.1 等;

如上浏览器的支持程度,我们可以把此元素使用在移动端很方便;flex是什么呢?
Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
flex的弹性布局有如下优势:

1.独立的高度控制与对齐。
2.独立的元素顺序。
3.指定元素之间的关系。
4.灵活的尺寸与对齐方式。

一:
基本概念:
采用flex布局的元素,称为flex容器,它的所有子元素自动成为容器成员,称为flex项目。
如下图:
容器默认存在2根轴,水平的主轴和垂直的侧轴,主轴的开始位置(与边框的交叉点)叫做main start, 结束位置叫做 main end.交叉轴的开始位置叫做 cross start,结束位置叫做cross end。
项目默认沿主轴排列。
单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

二:
容器有如下6个属性flex-directionflex-wrapflex-flowjustify-contentalign-itemsalign-content我们分别来看下上面6个属性有哪些值,分别代表什么意思。

  1. flex-direction:该属性决定主轴的方向(即项目的排列方向)。
    它可能有四个值:row(默认值):主轴为水平方向,起点在左端。
    row-reverse:主轴为水平方向,起点在右端。
    column:主轴为垂直方向,起点在上沿。
    column-reverse:主轴为垂直方向,起点在下沿。
    我们来做几个demo,来分别理解下上面几个值的含义;
    我这边只讲解上面第一个和第二个值的含义,下面的也是一样,就不讲解了;
    比如页面上有一个容器,里面有一个元素,看下这个元素的排列方向。
    HTML代码:
    (如没有特别的说明,下面的html代码都是该结构):
    <div class="first-face container">
    <span class="pip">
    </span>
    </div>
    css代码如下:
    <style>
    html, body { height: 100%; }
    .container { width:150px; height:150px; border:1px solid red; }
    .first-face { display: flex; display: -webkit-flex; flex-direction: row; -webkit-flex-direction:row; display: -webkit-box; -webkit-box-pack:start; }

.pip { display:block; width: 24px; height: 24px; border-radius: 50%; background-color: #333; }
</style>注意:
在android平台的uc浏览器和微信浏览器中使用display: flex;
会出问题。
不支持该属性,因此使用display: flex;的时候需要加上display: -webkit-box;
还有一些水平对齐或者垂直对齐都需要加上对应的box-pack(box-pack表示父容器里面子容器的水平对齐方式)及box-align(box-align 表示容器里面子容器的垂直对齐方式).具体的可以看如下介绍的 display:box属性那一节。
我们可以看下截图如下:
当我们把flex-direction的值改为 row-reverse后(主轴为水平方向,起点在右端),我们截图如下所示:

  1. flex-wrap属性 默认情况下,项目都排在一条线(又称"轴线")上。
    flex-wrap属性定义,如果一条轴线排不下,可以换行。
    它有如下三个值:nowrap(默认):不换行。
    wrap:换行,第一行在上方。
    wrap-reverse:换行,第一行在下方。
  2. flex-flow该属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
  3. justify-content属性justify-content属性定义了项目在主轴上的对齐方式。下面假设主轴为从左到右。值为如下:flex-start | flex-end | center | space-between | space-around;flex-start(默认值) 左对齐flex-end 右对齐center 居中space-between: 两端对齐,项目之间的间隔都相等space-around:每个项目两侧的间隔相等。
  4. align-items属性align-items属性定义项目在交叉轴上如何对齐。它可能取5个值:flex-start:交叉轴的起点对齐。
    flex-end:交叉轴的终点对齐。center:交叉轴的中点对齐。baseline: 项目的第一行文字的基线对齐。stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
  5. align-content属性align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。该属性可能取6个值。
    flex-start:与交叉轴的起点对齐。
    flex-end:与交叉轴的终点对齐。
    center:与交叉轴的中点对齐。
    space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
    space-around:每根轴线两侧的间隔都相等。
    所以,轴线之间的间隔比轴线与边框的间隔大一倍。stretch(默认值):轴线占满整个交叉轴。

三:项目的属性,以下有6个属性可以设置在项目中,orderflex-growflex-shrinkflex-basisflexalign-self1. order属性order属性定义项目的排列顺序。
数值越小,排列越靠前,默认为0。
基本语法:.xx {order: <integer>;}

  1. flex-grow属性flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大基本语法:.xx {flex-grow: <number>;}
  2. flex-shrink属性flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
    基本语法:.xx {flex-shrink: <number>;}
  3. flex-basis属性flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。基本语法:.xx { flex-basis: <length> | auto; }它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
  4. flex属性flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。
  5. align-self属性align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch。
    基本语法:.xx {align-self: auto | flex-start | flex-end | center | baseline | stretch;}上面是基本语法,感觉好模糊啊,看到这么多介绍,感觉很迷茫啊,下面我们趁热打铁来实现下demo。
    我们很多人会不会打麻将呢?打麻将中有1-9丙对吧,我们来分别来实现他们的布局;

首先我们的HTML代码还是如下(如果没有特别的说明都是这样的结构):
一:
1丙HTML代码:
<div class="first-face container">
<span class="pip">
</span>
</div>
上面代码中,div元素(代表骰子的一个面)是Flex容器,span元素(代表一个点)是Flex项目。
如果有多个项目,就要添加多个span元素,以此类推。
css代码结构如下:
<style>
html, body { height: 100%; }
.container { width:150px; height:150px; border:1px solid red; }
.first-face { }
.pip { display:block; width: 24px; height: 24px; border-radius: 50%; background-color: #333; }
</style>

  1. 首先,只有一个左上角的情况下,flex布局默认为左对齐,因此需要display:flex

即可;如下代码:
.first-face { display: flex; display: -webkit-box;}
上面为了兼容UC浏览器和IOS浏览器下,因此需要加上display: -webkit-box;来兼容,我们也明白,如果不加上.first-face里面的代码,也能做出效果,因为元素默认都是向左对齐的,
如下图所示:
我们继续来看看对元素进行居中对齐;
需要加上 justify-content: center;即可;但是在UC浏览器下不支持该属性,我们水平对齐需要加上box-pack,box-pack表示父容器里面子容器的水平对齐方式,具体的值如上面介绍的box的语法,需要加上 -webkit-box-pack:center;
因此在first-face里面的
css代码变为如下代码:
.first-face { display: flex; display: -webkit-box; justify-content:center; -webkit-box-pack:center;}
效果如下:
上面已经介绍过justify-content属性定义了项目在主轴上的对齐方式(水平方向上),有五个值,这里不再介绍,具体可以看上面的基本语法。水平右对齐代码也一样、因此代码变成如下:
.first-face { display: flex; display: -webkit-box; justify-content:flex-end; -webkit-box-pack:end;}如下图所示:

  1. 我们接着来分别看看垂直居左对齐,垂直居中对齐,垂直居右对齐.一:垂直居左对齐我们现在需要使用上align-items属性了,该属性定义项目在交叉轴上如何对齐。
    具体的语法如上:
    同样为了兼容UC浏览器或其他不支持的浏览器,我们需要加上box-align 该属性表示容器里面字容器的垂直对齐方式;具体的语法如上;因此代码变成如下:
    .first-face { display: flex; display: -webkit-box; align-items:center; -webkit-box-align:center;}
    效果如下:
    二:垂直居中对齐现在垂直已经居中对齐了,但是在水平上还未居中对齐,因此在水平上居中对齐,我们需要加上justify-content属性居中即可;同样为了兼容UC浏览器,需要加上 -webkit-box-pack:center;
    代码变为如下:
    .first-face { display: flex; display: -webkit-box; align-items:center; -webkit-box-align:center; justify-content:center; -webkit-box-pack:center;}效果如下:
    三:垂直居右对齐原理和上面的垂直居中对齐是一个道理,只是值换了下而已;

代码如下:.first-face { display: flex; display: -webkit-box; align-items:center; -webkit-box-align:center; justify-content:flex-end; -webkit-box-pack:end;}
效果如下:
3.我们接着来分别看看底部居左对齐,底部居中对齐,底部居右对齐.一:底部居左对齐其实属性还是用到上面的,只是值换了一下而已;
代码如下:
.first-face { display: flex; display: -webkit-box; align-items:flex-end; -webkit-box-align:end; justify-content:flex-start; -webkit-box-pack:start;}
效果如下:
二:底部居中对齐代码变为如下:
.first-face { display: flex; display: -webkit-box; align-items:flex-end; -webkit-box-align:end;
justify-content:center; -webkit-box-pack:center;}
效果如下:
三:底部居右对齐代码变为如下:
.first-face { display: flex; display: -webkit-box; align-items:flex-end; -webkit-box-align:end; justify-content:flex-end; -webkit-box-pack:end;}
效果如下:
二:2丙1. 水平上2端对齐;需要使用的属性justify-content: space-between;该属性能使第一个元素在左边,最后一个元素在右边。
因此代码变成如下:
.first-face { display: flex; justify-content: space-between;}但是在UC浏览器下不生效,因此我们需要 display: -webkit-box;和-webkit-box-pack:Justify;
这两句代码;display: -webkit-box;我不多介绍,上面已经讲了,-webkit-box-pack:Justify;的含义是在box-pack表示水平等分父容器宽度。
因此为了兼容UC浏览器,所以代码变成如下:.first-face { display: flex; justify-content: space-between; display: -webkit-box; -webkit-box-pack:Justify;}
效果如下:

  1. 垂直两端对齐;垂直对齐需要使用到的flex-direction属性,该属性有一个值为column:主轴为垂直方向,起点在上沿。
    代码变为如下:.first-face { display: flex; justify-content: space-between; flex-direction: column;}再加上justify-content: space-between;说明两端对齐.但是在UC浏览器并不支持该属性,使其不能垂直两端对齐,因此为了兼容UC浏览器,需要使用-webkit-box;
    因此整个代码变成如下:
    .first-face { display: flex; justify-content: space-between; -webkit-flex-direction: column; flex-direction: column; display: -webkit-box; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-box-pack:justify;}
    如上使用 -webkit-box-direction: normal;
    使其对齐方向为水平从左端开始,-webkit-box-orient: vertical;使用这句代码告诉浏览器是垂直的,-webkit-box-pack:justify;
    这句代码告诉浏览器垂直的两端对齐。
    如下图所示:
    3 . 垂直居中两端对齐代码如下:
    .first-face { display: flex; flex-direction: column; justify-content: space-between; align-items: center;}
    多加一句 align-items: center;代码;
    表示交叉轴上居中对齐。同理在UC浏览器下不支持的,因此我们为了兼容UC浏览器,可以加上如下代码,因此整个代码如下:
    .first-face { display: flex; justify-content: space-between; -webkit-flex-direction: column; flex-direction: column; align-items:center; display: -webkit-box; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-box-pack:justify; -webkit-box-align:center;}
    再加上-webkit-box-align:center;这句代码,告诉浏览器垂直居中。
    如下图所示:
  2. 垂直居右两端对齐代码如下:
    .first-face { display: flex; flex-direction: column; justify-content: space-between; align-items: flex-end;}同理为了兼容UC浏览器,
    整个代码变成如下:
    .first-face { display: flex; justify-content: space-between; -webkit-flex-direction: column; flex-direction: column; align-items:flex-end; display: -webkit-box; -webkit-box-direction: normal; -webkit-box-orient: vertical; -webkit-box-pack:justify; -webkit-box-align:end;}
    和上面代码一样,只是更改了一下垂直对齐方式而已;如下图所示:注意:下面由于时间的关系,先不考虑UC浏览器的兼容三:
    3丙代码如下:
    HTML代码:
    <div class="first-face container">
    <span class="pip"></span>
    <span class="pip"></span>
    澳门新萄京官方网站我就是要用CSS实现,微信小程序学习之flex布局实例篇。<span class="pip"></span></div>

CSS代码如下:
.first-face { display: flex; flex-direction: column; justify-content: space-between;}.pip:nth-child(2) { align-self: center;}
.pip:nth-child(3) { align-self: flex-end;}

如下图所示:
四:
4丙代码如下:
HTML代码:
<div class="first-face container">
<div class="column">
<span class="pip"></span>
<span class="pip"></span>
</div>
<div class="column">
<span class="pip"></span>
<span class="pip"></span>
</div></div>

CSS代码如下:
.column{ display: flex; justify-content: space-between;}
.first-face { display: flex; flex-direction: column; justify-content: space-between;}如下图所示:
五:
5丙HTML结构如下:
<div class="first-face container">
<div class="column">
<span class="pip"></span>
<span class="pip"></span>
</div>
<div class="column">
<span class="pip"></span>
</div>
<div class="column">
<span class="pip"></span>
<span class="pip"></span>
</div></div>
css代码如下:
.column{ display: flex; justify-content: space-between;}
.first-face { display: flex; flex-direction: column; justify-content: space-between;}
.first-face .column:nth-of-type(2){ justify-content: center;}

如下图所示:
六:6丙HTML结构如下:
<div class="first-face container">
<div class="column">
<span class="pip"></span>
<span class="pip"></span>
</div> <div class="column">
<span class="pip"></span>
<span class="pip"></span>
</div> <div class="column">
<span class="pip"></span>
<span class="pip"></span>
</div></div>
css代码如下:
.column{ display: flex; justify-content: space-between;}
.first-face { display: flex; flex-direction: column; justify-content: space-between;}

如下图所示:

7,8,9丙也是一个意思,这里先不做了;回到顶部Flex布局兼容知识点总结假设父容器class为 box,子项目为item.旧版语法如下:一:定义容器的display属性。
旧语法如下写法:
.box { display: -moz-box; display: -webkit-box; display: box;}
新版语法需要如下写:
.box{ display: -webkit-flex; display: flex;}或者 行内.box{ display: -webkit-inline-flex; display:inline-flex;}

二:容器属性(旧版语法)

  1. box-pack 属性;(水平方向上对齐方式)box-pack定义子元素主轴对齐方式。
    .box{ -moz-box-pack: center; -webkit-box-pack: center; box-pack: center;}box-pack
    属性总共有4个值:
    .box{box-pack: start | end | center | justify;}
    各个值的含义如下:
    start:对于正常方向的框,首个子元素的左边缘被放在左侧(最后的子元素后是所有剩余的空间)对于相反方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)
    end:对于正常方向的框,最后子元素的右边缘被放在右侧(首个子元素前是所有剩余的空间)。对于相反方向的框,首个子元素的左边缘被放在左侧(最后子元素后是所有剩余的空间)。
    center:均等地分割多余空间,其中一半空间被置于首个子元素前,另一半被置于最后一个子元素后
    justify:在每个子元素之间分割多余的空间(首个子元素前和最后一个子元素后没有多余的空间)。
    2.box-align 属性(垂直方向上的对齐方式)box-align定义子元素交叉轴对齐方式。
    .box{ -moz-box-align: center;
    -webkit-box-align: center;
    box-align: center;}
    box-align属性总共有5个值:
    .box{ box-align: start | end | center | baseline | stretch; }
    各个值的含义如下:
    start:对于正常方向的框,每个子元素的上边缘沿着框的顶边放置。对于反方向的框,每个子元素的下边缘沿着框的底边放置。
    end:对于正常方向的框,每个子元素的下边缘沿着框的底边放置。对于反方向的框,每个子元素的上边缘沿着框的顶边放置。center:均等地分割多余的空间,一半位于子元素之上,另一半位于子元素之下。
    baseline:如果 box-orient 是inline-axis或horizontal,所有子元素均与其基线对齐。stretch:拉伸子元素以填充包含块3.box-direction 属性box-direction定义子元素的显示方向。
    .box{ -moz-box-direction: reverse; -webkit-box-direction: reverse; box-direction: reverse;}box-direction属性总共有3个值:
    .box{ box-direction: normal | reverse | inherit; }
    4.box-orient 属性box-orient定义子元素是否应水平或垂直排列。.box{ -moz-box-orient: horizontal; -webkit-box-orient: horizontal; box-orient: horizontal;}box-orient属性总共有5个值:
    .box{ box-orient: horizontal | vertical | inline-axis | block-axis | inherit; }horizontal: 在水平行中从左向右排列子元素。vertical: 从上向下垂直排列子元素。inline-axis: 沿着行内轴来排列子元素(映射为 horizontal)。
    block-axis: 沿着块轴来排列子元素(映射为 vertical)。
    inherit: 应该从父元素继承 box-orient 属性的值。5.box-lines 属性box-lines定义当子元素超出了容器是否允许子元素换行。
    .box{ -moz-box-lines: multiple; -webkit-box-lines: multiple; box-lines: multiple;}

box-lines属性总共有2个值:
.box{ box-lines: single | multiple; }single:伸缩盒对象的子元素只在一行内显示multiple:伸缩盒对象的子元素超出父元素的空间时换行显示6.box-flex 属性。box-flex定义是否允许当前子元素伸缩。.item{ -moz-box-flex: 1.0; -webkit-box-flex: 1.0; box-flex: 1.0;}box-flex属性使用一个浮点值:.item{ box-flex: <value>; }7.box-ordinal-group 属性box-ordinal-group定义子元素的显示次序,数值越小越排前。.item{ -moz-box-ordinal-group: 1; -webkit-box-ordinal-group: 1; box-ordinal-group: 1;}

box-direction属性使用一个整数值:.item{ box-ordinal-group: <integer>; }
新版语法如下:定义容器的display属性:
.box{ display: -webkit-flex; display: flex;}
.box{ display: -webkit-inline-flex; display:inline-flex;}
容器样式
.box{ flex-direction: row | row-reverse | column | column-reverse;
flex-wrap: nowrap | wrap | wrap-reverse;
flex-flow: <flex-direction> <flex-wrap>;
justify-content: flex-start | flex-end | center | space-between | space-around; align-items: flex-start | flex-end | center | baseline | stretch;
align-content: flex-start | flex-end | center | space-between | space-around | stretch; }

flex-direction值介绍如下:
row: 默认值。灵活的项目将水平显示,正如一个行一样。row-reverse: 与 row 相同,但是以相反的顺序。
column: 灵活的项目将垂直显示,正如一个列一样。column-reverse: 与 column 相同,但是以相反的顺序。
flex-wrap 值介绍如下:nowrap: flex容器为单行。
该情况下flex子项可能会溢出容器。wrap: flex容器为多行。该情况下flex子项溢出的部分会被放置到新行,子项内部会发生断行。
wrap-reverse: 换行并第一行在下方flex-flow值介绍如下(主轴方向和换行简写):
<flex-direction>: 定义弹性盒子元素的排列方向<flex-wrap>:控制flex容器是单行或者多行。
justify-content值介绍如下:flex-start: 弹性盒子元素将向行起始位置对齐。flex-end: 弹性盒子元素将向行结束位置对齐。
center: 弹性盒子元素将向行中间位置对齐。
space-between: 第一个元素的边界与行的主起始位置的边界对齐,同时最后一个元素的边界与行的主结束位置的边距对齐,而剩余的伸缩盒项目则平均分布,并确保两两之间的空白空间相等。space-around: 伸缩盒项目则平均分布,并确保两两之间的空白空间相等,同时第一个元素前的空间以及最后一个元素后的空间为其他空白空间的一半。

align-items值介绍如下:flex-start: 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
flex-end: 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。center: 弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
baseline: 如弹性盒子元素的行内轴与侧轴为同一条,则该值与'flex-start'等效。其它情况下,该值将参与基线对齐。
stretch: 如果指定侧轴大小的属性值为'auto',则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照'min/max-width/height'属性的限制。
align-content值介绍如下:flex-start: 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
flex-end: 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴结束边界。center: 弹性盒子元素在该行的侧轴(纵轴)上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度)。
space-between: 第一行的侧轴起始边界紧靠住弹性盒容器的侧轴起始内容边界,最后一行的侧轴结束边界紧靠住弹性盒容器的侧轴结束内容边界,剩余的行则按一定方式在弹性盒窗口中排列,以保持两两之间的空间相等。
space-around: 各行会按一定方式在弹性盒容器中排列,以保持两两之间的空间相等,同时第一行前面及最后一行后面的空间是其他空间的一半。
stretch: 各行将会伸展以占用剩余的空间。如果剩余的空间是负数,该值等效于'flex-start'。在其它情况下,剩余空间被所有行平分,以扩大它们的侧轴尺寸。子元素属性
.item{ order: <integer>;
flex-grow: <number>;
flex-shrink: <number>;
flex-basis: <length> | auto;
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
align-self: auto | flex-start | flex-end | center | baseline | stretch; }
兼容写法

  1. 首先是定义容器的 display 属性:
    .box{ display: -webkit-box; display: -moz-box; display: -ms-flexbox; display: -webkit-flex; display: flex; }
    这里还要注意的是,如果子元素是行内元素,在很多情况下都要使用 display:block 或 display:inline-block把行内子元素变成块元素(例如使用 box-flex 属性),这也是旧版语法和新版语法的区别之一。
  2. 子元素主轴对齐方式(水平居中对齐).box{ -webkit-box-pack: center; -moz-justify-content: center; -webkit-justify-content: center; justify-content: center;}

兼容写法新版语法的 space-around 是不可用的:如下新版语法space-around;.box{ box-pack: start | end | center | justify; justify-content: flex-start | flex-end | center | space-between | space-around; }

  1. 子元素交叉轴对齐方式(垂直居中对齐).box{ box-align: start | end | center | baseline | stretch; align-items: flex-start | flex-end | center | baseline | stretch; }4. 子元素的显示方向。子元素的显示方向可通过 box-direction box-orient flex-direction 实现,
    如下代码:

  2. 左到右(水平方向).box{ -webkit-box-direction: normal; -webkit-box-orient: horizontal; -moz-flex-direction: row; -webkit-flex-direction: row; flex-direction: row;}

  3. 右到左(水平方向)
    .box{ -webkit-box-pack: end; -webkit-box-direction: reverse; -webkit-box-orient: horizontal; -moz-flex-direction: row-reverse; -webkit-flex-direction: row-reverse; flex-direction: row-reverse;}
    如上代码:box 写法的 box-direction 只是改变了子元素的排序,并没有改变对齐方式,需要新增一个 box-pack 来改变对齐方式。

  4. 上到下(垂直方向上).box{ -webkit-box-direction: normal; -webkit-box-orient: vertical; -moz-flex-direction: column; -webkit-flex-direction: column; flex-direction: column;}

  5. 下到上(垂直方向上).box{ -webkit-box-pack: end; -webkit-box-direction: reverse; -webkit-box-orient: vertical; -moz-flex-direction: column-reverse; -webkit-flex-direction: column-reverse; flex-direction: column-reverse;}

  6. 是否允许子元素伸缩.item{ -webkit-box-flex: 1.0; -moz-flex-grow: 1; -webkit-flex-grow: 1; flex-grow: 1;}box语法中 box-flex 如果不是0就表示该子元素允许伸缩,而flex是分开的,上面 flex-grow 是允许放大(默认不允许).item{ -webkit-box-flex: 1.0; -moz-flex-shrink: 1; -webkit-flex-shrink: 1; flex-shrink: 1;}flex-shrink 是允许缩小(默认允许)。box-flex 默认值为0,也就是说,在默认的情况下,在两个浏览器中的表现是不一样的:
    介绍如下:.item{ box-flex: <value>; flex-grow: <number>; flex-shrink: <number>; }

  7. 子元素的显示次序.item{ -webkit-box-ordinal-group: 1; -moz-order: 1; -webkit-order: 1; order: 1;}

澳门新萄京官方网站 88

.box { display: flex; flex-direction: column; justify-content: space-between;}

澳门新萄京官方网站 89

.box { display: flex; flex-direction: column; justify-content: space-between; align-items: center;}

澳门新萄京官方网站 90

.box { display: flex; flex-direction: column; justify-content: space-between; align-items: flex-end;}

澳门新萄京官方网站 91

.box { display: flex;}.item:nth-child(2) { align-self: center;}

澳门新萄京官方网站 92

.box { display: flex; justify-content: space-between;}.item:nth-child(2) { align-self: flex-end;}

1.3 三项目

澳门新萄京官方网站 93

.box { display: flex;}.item:nth-child(2) { align-self: center;}.item:nth-child(3) { align-self: flex-end;}

1.4 四项目

澳门新萄京官方网站 94

.box { display: flex; flex-wrap: wrap; justify-content: flex-end; align-content: space-between;}

澳门新萄京官方网站 95

HTML代码如下。
<div class="box"> <div class="column"> <span class="item"></span> <span class="item"></span> </div> <div class="column"> <span class="item"></span> <span class="item"></span> </div></div>

CSS代码如下。
.box { display: flex; flex-wrap: wrap; align-content: space-between;}.column { flex-basis: 100%; display: flex; justify-content: space-between;}

1.5 六项目

澳门新萄京官方网站 96

.box { display: flex; flex-wrap: wrap; align-content: space-between;}

澳门新萄京官方网站 97

.box { display: flex; flex-direction: column; flex-wrap: wrap; align-content: space-between;}

澳门新萄京官方网站 98

HTML代码如下。
<div class="box"> <div class="row"> <span class="item"></span> <span class="item"></span> <span class="item"></span> </div> <div class="row"> <span class="item"></span> </div> <div class="row"> <span class="item"></span> <span class="item"></span> </div></div>

CSS代码如下。
.box { display: flex; flex-wrap: wrap;}.row{ flex-basis: 100%; display:flex;}.row:nth-child(2){ justify-content: center;}.row:nth-child(3){ justify-content: space-between;}

1.6 九项目

澳门新萄京官方网站 99

.box { display: flex; flex-wrap: wrap;}

二、网格布局
2.1 基本网格布局
最简单的网格布局,就是平均分布。在容器里面平均分配空间,跟上面的骰子布局很像,但是需要设置项目的自动缩放。

澳门新萄京官方网站 100

HTML代码如下。
<div class="Grid"> <div class="Grid-cell">...</div> <div class="Grid-cell">...</div> <div class="Grid-cell">...</div></div>

CSS代码如下。
.Grid { display: flex;}.Grid-cell { flex: 1;}

2.2 百分比布局
某个网格的宽度为固定的百分比,其余网格平均分配剩余的空间。

澳门新萄京官方网站 101

HTML代码如下。
<div class="Grid"> <div class="Grid-cell u-1of4">...</div> <div class="Grid-cell">...</div> <div class="Grid-cell u-1of3">...</div></div>

.Grid { display: flex;}.Grid-cell { flex: 1;}.Grid-cell.u-full { flex: 0 0 100%;}.Grid-cell.u-1of2 { flex: 0 0 50%;}.Grid-cell.u-1of3 { flex: 0 0 33.3333%;}.Grid-cell.u-1of4 { flex: 0 0 25%;}

三、圣杯布局
圣杯布局)(Holy Grail Layout)指的是一种最常见的网站布局。页面从上到下,分成三个部分:头部(header),躯干(body),尾部(footer)。其中躯干又水平分成三栏,从左到右为:导航、主栏、副栏。

澳门新萄京官方网站 102

HTML代码如下。
<body class="HolyGrail"> <header>...</header> <div class="HolyGrail-body"> <main class="HolyGrail-content">...</main> <nav class="HolyGrail-nav">...</nav> <aside class="HolyGrail-ads">...</aside> </div> <footer>...</footer></body>

CSS代码如下。
.HolyGrail { display: flex; min-height: 100vh; flex-direction: column;}header,footer { flex: 1;}.HolyGrail-body { display: flex; flex: 1;}.HolyGrail-content { flex: 1;}.HolyGrail-nav, .HolyGrail-ads { /* 两个边栏的宽度设为12em / flex: 0 0 12em;}.HolyGrail-nav { / 导航放到最左边 */ order: -1;}

如果是小屏幕,躯干的三栏自动变为垂直叠加。
@media (max-width: 768px) { .HolyGrail-body { flex-direction: column; flex: 1; } .HolyGrail-nav, .HolyGrail-ads, .HolyGrail-content { flex: auto; }}

四、输入框的布局
我们常常需要在输入框的前方添加提示,后方添加按钮。

澳门新萄京官方网站 103

HTML代码如下。
<div class="InputAddOn"> <span class="InputAddOn-item">...</span> <input class="InputAddOn-field"> <button class="InputAddOn-item">...</button></div>

CSS代码如下。
.InputAddOn { display: flex;}.InputAddOn-field { flex: 1;}

五、悬挂式布局
有时,主栏的左侧或右侧,需要添加一个图片栏。

澳门新萄京官方网站 104

HTML代码如下。
<div class="Media"> <img class="Media-figure" src="" alt=""> <p class="Media-body">...</p></div>

CSS代码如下。
.Media { display: flex; align-items: flex-start;}.Media-figure { margin-right: 1em;}.Media-body { flex: 1;}

六、固定的底栏
有时,页面内容太少,无法占满一屏的高度,底栏就会抬高到页面的中间。这时可以采用Flex布局,让底栏总是出现在页面的底部。

澳门新萄京官方网站 105

HTML代码如下。
<body class="Site"> <header>...</header> <main class="Site-content">...</main> <footer>...</footer></body>

CSS代码如下。

.Site { display: flex; min-height: 100vh; flex-direction: column;}.Site-content { flex: 1;}

七,流式布局
每行的项目数固定,会自动分行。

澳门新萄京官方网站 106

CSS的写法。
.parent { width: 200px; height: 150px; background-color: black; display: flex; flex-flow: row wrap; align-content: flex-start;}.child { box-sizing: border-box; background-color: white; flex: 0 0 25%; height: 50px; border: 1px solid red;}

(完)

本文由澳门新萄京官方网站发布于澳门新萄京赌场网址,转载请注明出处:澳门新萄京官方网站我就是要用CSS实现,微信小

关键词: