基础的CSS3弹性盒Flexbox布局如何使用实例

生命价值不在于获取多少,生命价值在于付出多少。有钱的人更有钱,这往往是一种必然。

flexbox是一个新的盒子模型,当你给一个元素使用了flexbox模块,那么它的子元素就会指定的方向在水平或者纵向方向排列。这些子元素会按照一定的比例进行扩展或收缩来填补容器的可用空间。flexbox有许多很好用的地方,下面就着重讲述一下它的一些使用场景:

Example 1: flexbox等分布局

如果你要实现以下所示的样式,你可能首先想到的是用float:

CSS Code复制内容到剪贴板
  1. <ulid="ranktop3">
  2. <li>
  3. <divclass="ranktab">1</div>
  4. <p>fdeg</p>
  5. <p>霸气值:170</p>
  6. </li>
  7. <li>
  8. <divclass="ranktab">2</div>
  9. <p>bling</p>
  10. <p>霸气值:160</p>
  11. </li>
  12. <li>
  13. <divclass="ranktab">3</div>
  14. <p>lea</p>
  15. <p>霸气值:150</p>
  16. </li>
  17. </ul>
  18. ulli{
  19. width:32.9%;
  20. float:left;
  21. border-right:1pxsolid#fa9900;
  22. padding:5px0;
  23. }


但当只有2个排名后,少了一个li节点后,就会展示如下:

删除两个li节点后如下:

但是用户以及设计师肯定不希望看到这样的界面。他们肯定希望界面是这样的:
减少一个li节点后:

删除两个li节点后如下:

那么这里用display:flex布局是最好不过的了,新的flexbox布局模式被用来重新定义CSS中的布局方式:

CSS Code复制内容到剪贴板
  1. ul{
  2. display:flex;//表示改直接子元素用flex布局,默认横向布局
  3. }
  4. ulli{
  5. /*width:32.9%;*/
  6. /*float:left;*/
  7. border-right:1pxsolid#fa9900;
  8. padding:5px0;
  9. flex:1;表示子元素之间平均分配
  10. }


可见用flex布局非常完美,这就是flex布局的牛逼之处。很遗憾的是最近规范变动过多,导致各个浏览器对它的实现也有所不同。为了兼容更多的浏览器,也可以这样写:

display: flex;display: -webkit-box;这两个属性的方法作用相同。

Example 2: flexbox不等分布局

CSS Code复制内容到剪贴板
  1. <divclass="container">
  2. <sectionclass="initial">
  3. <p>
  4. 空间足够的时候,我的宽度是200px,如果空间不足,
  5. 我会变窄到100px,但不会再窄了。
  6. </p>
  7. </section>
  8. <sectionclass="none">
  9. <p>
  10. 无论窗口如何变化,我的宽度一直是200px。
  11. </p>
  12. </section>
  13. <sectionclass="flex1">
  14. <p>
  15. 我会占满剩余宽度的1/3。
  16. </p>
  17. </section>
  18. <sectionclass="flex2">
  19. <p>
  20. 我会占满剩余宽度的2/3。
  21. </p>
  22. </section>
  23. </div>
  24. .container{
  25. display:-webkit-flex;
  26. display:flex;
  27. }
  28. .initial{
  29. -webkit-flex:initial;
  30. flex:initial;
  31. width:200px;
  32. min-width:100px;
  33. /*空间足够的时候,该div的宽度是200px,如果空间不足,该div会变窄到100px,但不会再窄了。*/
  34. }
  35. .none{
  36. -webkit-flex:none;
  37. flex:none;
  38. width:200px;
  39. /*无论窗口如何变化,我的宽度一直是200px。*/
  40. }
  41. .flex1{
  42. -webkit-flex:1;
  43. flex:1;
  44. /*改div会占满剩余宽度的1/3。*/
  45. }
  46. .flex2{
  47. -webkit-flex:2;
  48. flex:2;
  49. /*改div会占满剩余宽度的2/3。*/
  50. }

效果如下图所示:

Example 3: flexbox基本页面布局

CSS Code复制内容到剪贴板
  1. <divclass="container">
  2. <nav>
  3. <divclass="container">
  4. <nav>
  5. <ul>
  6. <li>
  7. <arel="nofollow noopener noreferrer" href="http://www.alloyteam.com/">menu1</a>
  8. </li>
  9. </ul>
  10. </nav>
  11. <divclass="content">
  12. <section>
  13. ...
  14. </section>
  15. <section>
  16. ...
  17. </section>
  18. </div>
  19. </div>
  20. .container{
  21. display:-webkit-flex;
  22. display:flex;
  23. }
  24. nav{
  25. width:200px;/*固定宽度*/
  26. }
  27. .content{
  28. -webkit-flex:1;/*除去nav的固定宽度后,剩下的宽度都是属于content的*/
  29. flex:1;
  30. }

效果如下图所示:

Example 4: flexbox的居中布局

CSS Code复制内容到剪贴板
  1. <divclass="vertical-container">
  2. <sectionclass="vertically-centered">
  3. <p>
  4. CSS里总算是有了一种简单的垂直居中布局的方法了!
  5. </p>
  6. </section>
  7. </div>
  8. .vertical-container{
  9. display:-webkit-flex;
  10. display:flex;
  11. height:300px;
  12. }
  13. .vertically-centered{
  14. margin:auto;
  15. }

PS:解决兼容性问题

对于Flexbox 以前的几个版本可以使用Autoprefixer后处理程序来实现css3代码自动补全。比如:

CSS Code复制内容到剪贴板
  1. display:flex;

编译后:

CSS Code复制内容到剪贴板
  1. display:-webkit-box;
  2. display:-webkit-flex;
  3. display:-ms-flexbox;
  4. display:flex;

如果你使用Sass,那么可以使用@mixin来解决flexbox版本兼容,直接@include进来就可以轻松解决三个版本的兼容问题;这样可以支持到IE10 +, 移动端浏览器和最新的FF, Safari, Chrome, IE11, Opera等。
github项目地址:sass-flex-mixin

到此这篇关于基础的CSS3弹性盒Flexbox布局如何使用实例就介绍到这了。没要腐朽没要倒退,你的眼光如婴儿般明亮,请拥抱我吧,让我的生命散发迷人的光彩,直教日月黯然。更多相关基础的CSS3弹性盒Flexbox布局如何使用实例内容请查看相关栏目,小编编辑不易,再次感谢大家的支持!

标签: Flexbox