CSS3的Flexbox骰子布局的实现及问题讲解

所属分类: 网页制作 / CSS 阅读数: 770
收藏 0 赞 0 分享

本文中只是熟悉基本属性的用法,并完成一组骰子各个面的制作。在下面的内容我不会涉及flexbox一些比较棘手的问题,比如旧版本语法、供应商前缀、浏览器怪癖等:

一、First Face
我们知道,骰子有六个面,每个面的点的个数代表该面的值,第一个面由一个水平垂直居中的点组成。下面来看具体的实现:

CSS Code复制内容到剪贴板
  1.  <section name="01" class="face-01">   
  2.   <span class="dot"></span>   
  3.  </section>   
  4. face-01 {   
  5. display: flex;   
  6. justify-contentcenter;   
  7. align-items: center;   

关于justify-content和align-items的用法请参考这里justify-content,align-items。使用flexbox,垂直居中两行属性就可以搞定,很easy!

二、Second Face

CSS Code复制内容到剪贴板
  1. .face-02 {   
  2.  display: flex;   
  3.  justify-content: space-between;   
  4. }   
  5. .face-02 .dot:nth-of-type(2) {   
  6.  align-self: flex-end;   
  7. }   
  8.   <section name="02" class="face-02">   
  9.    <span class="dot"></span>   
  10.    <span class="dot"></span>   
  11.   </section>  

这里我们不能使用align-items属性,使用它两个点都会受影响,flexbox提供了一个align-self属性,这个属性可以让我们更方便的控制flex items的各项沿着cross axias方向,设置不同的布局。align-self的用法参考这里align-self。

 

三、Third Face

CSS Code复制内容到剪贴板
  1. .face-03 {   
  2.  display: flex;   
  3.  justify-content: space-between;   
  4. }   
  5. .face-03 .dot:nth-of-type(2) {   
  6.  align-self: center;   
  7. }   
  8. .face-03 .dot:nth-of-type(3) {   
  9.  align-self: flex-end;   
  10. }   
  11. <section name="03" class="face-03">   
  12.  <span class="dot"></span>   
  13.  <span class="dot"></span>   
  14.  <span class="dot"></span>   
  15. </section>  

该face与second face 使用的属性相同,不再解释。

 

四、Fourth Face

CSS Code复制内容到剪贴板
  1. .face-04 {   
  2.  display: flex;   
  3.  justify-content: space-between;   
  4.  flex-direction: column;   
  5. }   
  6. .face-04 .column {   
  7.  display: flex;   
  8.  justify-content: space-between;   
  9. }   
  10. <section name="04" class="face-04">   
  11.   <div class="column">   
  12.     <span class="dot"></span>   
  13.     <span class="dot"></span>   
  14.   </div>   
  15.   <div class="column">   
  16.     <span class="dot"></span>   
  17.     <span class="dot"></span>   
  18.   </div>   
  19. </section>  

本例中使用了flex-direction,从字面意思可以看出,是用来控制flex的方向,即按列还是按行来布局,该属性更详细的用法可以参考这里flex-direction

后面Fifth Face 和 Sixth Face,根据前面的布局思想,就很easy了不再赘述!

写到此,想想配合JS写一个玩骰子的小游戏应该很easy了吧。

 

五、实现1,2,3,4,6,12等份

CSS Code复制内容到剪贴板
  1. .row {   
  2.   display: flex;   
  3.   box-sizing: border-box;   
  4. }   
  5.   
  6. .column {   
  7.   margin10px;   
  8.   flex-grow: 1;   
  9.   flex-shrink: 1;   
  10.   flex-basis: 0;   
  11.   box-sizing: border-box;   
  12. }   
  13. <section class="row">   
  14.   <div class="column">One</div>   
  15. </section>   
  16. <section class="row">   
  17.   <div class="column">One Half</div>   
  18.   <div class="column">One Half</div>   
  19. </section>   
  20. <section class="row">   
  21.   <div class="column">One Third</div>   
  22.   <div class="column">One Third</div>   
  23.   <div class="column">One Third</div>   
  24. </section>   
  25. <section class="row">   
  26.   <div class="column">One Fourth</div>   
  27.   <div class="column">One Fourth</div>   
  28.   <div class="column">One Fourth</div>   
  29.   <div class="column">One Fourth</div>   
  30. </section>   
  31. <section class="row">   
  32.   <div class="column">One Sixth</div>   
  33.   <div class="column">One Sixth</div>   
  34.   <div class="column">One Sixth</div>   
  35.   <div class="column">One Sixth</div>   
  36.   <div class="column">One Sixth</div>   
  37.   <div class="column">One Sixth</div>   
  38. </section>   
  39. <section class="row">   
  40.   <div class="column">One Twelve</div>   
  41.   <div class="column">One Twelve</div>   
  42.   <div class="column">One Twelve</div>   
  43.   <div class="column">One Twelve</div>   
  44.   <div class="column">One Twelve</div>   
  45.   <div class="column">One Twelve</div>   
  46.   <div class="column">One Twelve</div>   
  47.   <div class="column">One Twelve</div>   
  48.   <div class="column">One Twelve</div>   
  49.   <div class="column">One Twelve</div>   
  50.   <div class="column">One Twelve</div>   
  51.   <div class="column">One Twelve</div>   
  52. </section>  

2016627110435616.png (907×374)

在本例中用到了flex-grow,flex-shrink,flex-basis三个属性。
1. flex-grow:根据需要用来定义伸缩项目的扩展能力。它接受一个不带单位的值做为一个比例。主要用来决定伸缩容器剩余空间按比例应扩展多少空间。
如果所有伸缩项目的“flex-grow”设置了“1”,那么每个伸缩项目将设置为一个大小相等的剩余空间。如果你给其中一个伸缩项目设置了“flex-grow”值为“2”,那么这个伸缩项目所占的剩余空间是其他伸缩项目所占剩余空间的两倍。负值无效。
2. flex-shrink:根据需要用来定义伸缩项目收缩的能力。负值同样无效。
3. flex-basis: 用来设置伸缩基准值,剩余的空间按比率进行伸缩,不支持负值。如果设置为0,围绕内容的额外的空间不会考虑在内。如果设置为auto,额外的空间是基于flex-grow的值分配。

六、实现2-3-7布局

CSS Code复制内容到剪贴板
  1. .row237 .column:first-of-type {   
  2.   flex-grow: 2;   
  3.   flex-basis: 5px;   
  4. }   
  5. .row237 .column:nth-of-type(2) {   
  6.   flex-grow: 3;   
  7.   flex-basis: 18px;   
  8. }   
  9. .row237 .column:nth-of-type(3) {   
  10.   flex-grow: 7;   
  11.   flex-basis: 70.5px;   
  12. }   
  13.   
  14. <section class="row row237">   
  15.   <div class="column">One Half</div>   
  16.   <div class="column">One Third</div>   
  17.   <div class="column">One Seventh</div>   
  18. </section>  

此处各项flex-basis的值的计算,应该有个公式(待解决),如果有这个公式,配合sass,less等预处理语言实现多列自适应布局将会很方便。

更多精彩内容其他人还在看

Opera中国的WEB标准课程

网页制作Webjx文章简介:在这篇文章里,我要向大家介绍我和其他很多人花费数月时间开发的一个课程——Web标准课程,该课程旨在向大家提供Web设计和开发的坚实基础,无论读者是谁,此教程完全免费、可访问,并且不需要预备知识。当然,我主要还
收藏 0 赞 0 分享

CSS样式表渐进增强的基本概念

网页制作Webjx文章简介:如果你挠着头想弄清楚优雅降级和渐进增强的区别,我告诉你,这是视角问题。优雅降级和渐进增强都考虑网站在各种设备的各种浏览器上如何良好运转。两者区别的关键在于它们各自关注的焦点,以及这种关注对工作流程的影响
收藏 0 赞 0 分享

简单介绍Web Developer插件制作网页

网页制作Webjx文章简介:Firefox浏览器是一个良好支持W3C标准的开放源代码的浏览器,拥有Linux/Windows/Mac版本。因为Firefox浏览器良好支持W3C标准,所以使用Firefox来调试网页是非常好的。 Firefox浏览器是
收藏 0 赞 0 分享

CSS布局带来的巨大影响:CSS display属性值

网页制作Webjx文章简介:网页元素应用上那些与表格相关的display属性值后,能够模仿出与表格相同的特性。我将会在该文中给大家演示这种方法给CSS布局带来的巨大影响。 应原书编辑要求,先在文章顶部给出链接:《Everything You
收藏 0 赞 0 分享

用div css模拟表格对角线

这只是探讨一种CSS模拟表格对角线的用法,实际在工作中可能觉得这样做有点小题大作,这不是本主题讨论的重点。如果对此深以为然的朋友,请一笑过之 首先声明: 这只是探讨一种CSS模拟表格对角线的
收藏 0 赞 0 分享

IE Firefox在css中的差别 (部分)

1、单位问题 问题:任何距离的数值ie可以不加单位,ff必须要求写单位(0除外) 解决:写全单位如padding:0px; 2、水平居中 问题:div里的内容,ie默认为center,而ff默认left 解决:mairgin:0px auto; 3、高度问题
收藏 0 赞 0 分享

不用js可以实现信息提示效果

[code] <style> body { font:verdena; font-size:14px; color:#000 } h1{ font:verdena; font-size:22px; color:#000 } h2{ font:verdena;
收藏 0 赞 0 分享

CSS解决未知高度的垂直水平居中自适应问题

今天有人问起,晚上试着写出来,供参考; 以下代码兼容主流浏览器IE6、IE7、Firefox、Opera。 从最简单的开始………… 一、如何让一个DIV水平居中? 这个简单不作过多说明! [code] <st
收藏 0 赞 0 分享

CSS cursor 属性 -- 鼠标指针样式效果

取值: [ [<uri> ,]* [ auto | crosshair | default | pointer | move | e-resize | ne-resize | nw-resize | n-resize | se-resize | sw-resize |
收藏 0 赞 0 分享

css 简单区别ie6,ie7,firefox的写法

同一样式里可以这样 [code] margin:17px; FF +margin:17px; IE6 IE7 _margin:17px; IE6 [/code] 按这个顺序,刚好区分开三个浏览器
收藏 0 赞 0 分享
查看更多