由阿里14校招抛砖引玉谈CSS3 box-flex属性和box-orient属性

  比较有意思的是虽然目前没有浏览器支持box-flex,box-orient属性,但CSS3问世以来,这两个属性却一直很火。2014年阿里校招第5题要求使用CSS3中的功能实现三个矩形的布局,总的宽度为100%,其中的三个矩形,第一个矩形的宽度是200px,第二个和第三个矩形的宽度相等,给出HTML结构是:

<div class="box">
    <div class="item">column 1</div>
    <div class="item">column 2</div>
    <div class="item">column 3</div>

</div>>


这里所指的CSS3属性包括box-flex和box-orient。由于没有浏览器支持这两个属性,Firefox支持替代的-moz-box-flex,-moz-box-orient属性,Safari,Opera以及Chrome支持替代的-webkit-box-flex,-webkit-box-orient属性。

下面是该题的CSS样式表

 1 <style type="text/css">
 2         *{padding: 0;margin:0}
 3         .box{
 4             width: 100%;
 5             background: greenyellow;
 6             box-orient:horizontal;
 7             -webkit-box-orient: horizontal;
 8             -ms-box-orient:horizontal;
 9             -o-box-orient:horizontal;
10             -moz-box-orient: horizontal;
11             display: -ms-box;
12             display: -moz-box;
13             display: -webkit-box;
14             display: -o-box;
15         }
16         .box>.item{
17             height: 100px;
18             background: red;
19             margin: 10px 10px 10px 0;
20             -moz-box-flex:1;
21             -webkit-box-flex: 1;
22         }
23         .box .item:first-child{
24             width: 200px;
25             margin-left: 10px;
26             -moz-box-flex: 10px;
27             -webkit-box-flex: 10px;
28         }
29 
30     </style>

1  box-flex:

该属性规定框的子元素是否可以伸缩其尺寸(可伸缩元素能够随着框的缩小或扩大而缩小或放大,只要框中有多余的空间,可伸缩元素就会扩展来填充这些空间),主要让子容器对父容器的宽度按一定规则进行划分。如上述代码三个子块的值都是1,也就是每个子块的宽度占1/3,但由于对这道题来说,由于.box .item:first-child{width:200px}对第一个子元素限定为宽度200px,因此第二个和第三个的宽度均为剩下宽度的1/2。

如下图代码

 1 <html>
 2 <head>
 3 <style> 
 4 div
 5 {
 6 display:-moz-box; /* Firefox */
 7 display:-webkit-box; /* Safari and Chrome */
 8 display:box;
 9 width:300px;
10 border:1px solid black;
11 }
12 
13 #p1
14 {
15 -moz-box-flex:1.0; /* Firefox */
16 -webkit-box-flex:1.0; /* Safari and Chrome */
17 box-flex:1.0;
18 border:1px solid red;
19 }
20 
21 #p2
22 {
23 -moz-box-flex:2.0; /* Firefox */
24 -webkit-box-flex:2.0; /* Safari and Chrome */
25 box-flex:2.0;
26 border:1px solid blue;
27 }
28 </style>
29 </head>
30 <body>
31 
32 <div>
33 <p id="p1">Hello</p>
34 <p id="p2">W3School</p>
35 </div>
36 
37 <p><b>注释:</b>IE 不支持 box-flex 属性。</p>
38 
39 </body>
40 </html>

技术分享这是W3school中的一个例子红色和蓝色各占总宽度的1/3和2/3。

不知道大家有没有注意,上述示例的父容器的display均为box,为什么呢~因为只有这样子容器才可以进行划分,不过还有点小问题,这时如果使用margin:0 auto在chrome下令子元素居中是比较perfect,但是Firefox下就不行了,别着急,我们可以通过把父容器设置为text-align:center;来化险为夷。

2  box-orient:

他也是一个可伸缩框属性,规定框的子元素是否应该水平或者垂直排列。

技术分享

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。