一、flexbox弹性盒子

2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

二、基本概念

Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

开启flex布局:只需在最外层容器设置display:flex;

采用flex布局称为flex容器,整个网页可看成一个flex容器,所有子容器自动生成容器成员称为flex项目。

容器默认存在两根轴:

水平的主轴(main axis): Flex容器的主轴主要用来配置Flex项目,默认是水平方向(x轴正向)

垂直的交叉轴(cross axis): 与主轴垂直的轴 ,称作侧轴

主轴的开始位置(与边框的交叉点)(main start)

结束位置叫做(main end)

交叉轴的开始位置叫做(cross start),结束位置叫做(cross end)

单个项目占据的主轴空间叫做(main size),占据的交叉轴空间叫做(cross size)

三、容器属性

1.父级属性

可以简单的理解为作用外层div。

  1. flex-direction:调整主轴方向(默认为水平方向)。
  2. justify-content:调整主轴对齐。
  3. align-items:调整侧轴对齐(子元素可以使用align-self覆盖)。
  4. flex-wrap:控制是否换行。
  5. align-content:堆栈(由flex-wrap产生的独立行)对齐。
  6. flex-flow:是flex-direction + flex-wrap的简写形式。

2.子级属性

可以简单的理解为作用内层div。

  1. flex:是子项目在主轴的缩放比例,不指定flex属性,则不参与伸缩分配。
  2. align-self:可覆盖align-items属性,默认值为auto,表示继承父元素align-items属性,如果没有父元素,则等同于strech
  3. order:控制子项目的排列顺序,正序方式排序,从小到大。

四、代码+解释

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. body{
  10. width: 508px;
  11. height: 500px;
  12. border: 1px solid red;
  13. display: flex;
  14. /* 父项常见属性(设置父元素) */
  15. /* ---------------------------flex-direction---------------------- */
  16. /* 决定了主轴的方向,注意这个属性是给父元素设置的 */
  17. flex-direction: row;
  18. /* 主轴反方向 */
  19. /* flex-direction: row-reverse; */
  20. /* 侧轴反方向*/
  21. /* flex-direction: column-reverse; */
  22. /* ----------------------------justify-content------------------------ */
  23. /* 定义了子项目在主轴上的对齐方式 */
  24. /* 默认值,从头部开始,如果主轴是x轴,则从左到右 */
  25. justify-content: flex-start;
  26. /* 从尾部开始排列 */
  27. /* justify-content: flex-end; */
  28. /* 在主轴居中对齐(如果主轴是x轴则水平居中) */
  29. /* justify-content: center; */
  30. /* 平分剩余空间 */
  31. /* justify-content: space-around; */
  32. /* 先两边贴边 再平分剩余空间 */
  33. /* justify-content: space-between; */
  34. /* -----------------------------flex-wrap------------------------------ */
  35. /* 默认情况下,所有的子项目都是排列在一条线上的,也就是说默认不换行。
  36. 当所有子项目的总宽度大于父元素的宽度的时候,子项目会均分父元素的宽度。 */
  37. /* flex-wrap: nowrap; */
  38. /* 设置换行 */
  39. flex-wrap: wrap;
  40. /* --------------------------align-item(单行)----------------------------- */
  41. /* 设置侧轴上的子元素排列方式 */
  42. /* 针对单行的子项目 */
  43. /* 想要让子项目水平垂直居中,相当于实现项目在主轴和侧轴上的居中。
  44. align-item属性是控制子项在侧轴(默认是y轴)上的排列方式,可以在子项为单行的时候使用 */
  45. /* 默认值,从上到下 */
  46. /* align-items: flex-start; */
  47. /* 从下到上 */
  48. /* align-items: flex-end; */
  49. /* 挤在一起居中(垂直居中) */
  50. /* align-items: center; */
  51. /* 拉伸,用这个的时候子盒子不要给高度。设置这个属性后盒子会沿着侧轴拉伸 */
  52. /* align-items: stretch; */
  53. /* -----------------------align-content(多行)------------------------------ */
  54. /* 适用于子项出现换方(多行)的情况,在单行下是没有效果的 */
  55. /* 默认值,在侧轴的头部开始排列 */
  56. align-content: flex-start;
  57. /* 在侧轴的尾部开始排列 */
  58. /* align-content: flex-end; */
  59. /* 在侧轴中间显示 */
  60. /* align-content: center; */
  61. /* 子项在侧轴平分剩余空间 */
  62. /* align-content: space-around; */
  63. /* 子项在侧轴先分布在两头、再平分剩余空间 */
  64. /* align-content: space-between; */
  65. /* 设置子项元素高度平分子元素高度,同样的,子项不能设置高度,盒子沿着侧轴拉伸 */
  66. /* align-content: stretch; */
  67. /* ------------------------------------flex-flow------------------------------ */
  68. /* flex-flow是flex-direction + flex-wrap的复合属性。 */
  69. /* flex-diection: column; */
  70. /* flex-wrap: wrap; */
  71. /* 相当于 */
  72. /* flex-flow: column wrap; */
  73. }
  74. /* 子项常见属性(设置子元素) */
  75. /* ----------------------------------flex-------------------------------------------- */
  76. /* flex属性定义子项目分配剩余空间,用flex来表示占多少份数 */
  77. /* flex: 2; */
  78. /* flex属性是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。
  79. 后两个属性可选。
  80. flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
  81. auto --> (1 1 auto) 和 none --> (0 0 auto)。
  82. 建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。
  83. */
  84. /*
  85. flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。
  86. flex-grow: <number>; --> default 0
  87. 如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。
  88. 如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。
  89. */
  90. /*
  91. flex-shrink属性定义了项目的缩小比例,默认为1,即如果空间不足,该项目将缩小。
  92. flex-shrink: <number>; --> default 1
  93. 如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。
  94. 如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。
  95. 负值对该属性无效。
  96. */
  97. /*
  98. flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。
  99. 浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。
  100. flex-basis: <length> | auto; --> default auto
  101. 它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
  102. */
  103. /* ----------------------------------align-self------------------------------------- */
  104. /* align-self属性可覆盖align-items属性,默认值为auto,
  105. 允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性.
  106. 表示继承父元素align-items属性,如果没有父元素,则等同于strech; */
  107. /* ------------------------------order属性定义项目的排列顺序-------------------------- */
  108. /* 数值越小,排列越靠前,默认为0. */
  109. /*
  110. order:-1;
  111. align-self: flex-end;
  112. */
  113. .box1{
  114. height: 100px;
  115. width: 100px;
  116. background-color: aqua;
  117. border: 1px solid rgb(25, 24, 24);
  118. /* 由于第一行没有剩余空间,所以无法起作用 */
  119. /* flex: 2; */
  120. /* align-self: center; */
  121. /* 行内元素也可以使用 Flex 布局 */
  122. /* 使用了display: flex 属性后,父元素不设置宽度,宽度就是100%;不会被子元素宽度撑开;
  123. 使用了display: inline-flex 属性后,父元素不设置宽度,
  124. 宽度就是所有的子元素宽度之和,会被子元素宽度撑开,实现宽度自适应; */
  125. display: inline-flex;
  126. }
  127. .box11{
  128. height: 40px;
  129. width: 40px;
  130. background-color: chartreuse;
  131. }
  132. .box12{
  133. height: 40px;
  134. width: 40px;
  135. background-color: rgb(158, 187, 128);
  136. }
  137. .box2{
  138. height: 100px;
  139. width: 100px;
  140. background-color: rgb(38, 255, 0);
  141. border: 1px solid rgb(25, 24, 24);
  142. }
  143. .box3{
  144. height: 100px;
  145. width: 100px;
  146. background-color: rgb(30, 0, 255);
  147. border: 1px solid rgb(25, 24, 24);
  148. }
  149. .box4{
  150. height: 100px;
  151. width: 100px;
  152. background-color: rgb(164, 123, 154);
  153. border: 1px solid rgb(25, 24, 24);
  154. }
  155. .box5{
  156. height: 100px;
  157. width: 100px;
  158. background-color: rgb(255, 0, 21);
  159. border: 1px solid rgb(25, 24, 24);
  160. }
  161. .box6{
  162. height: 100px;
  163. width: 100px;
  164. background-color: rgb(247, 0, 255);
  165. border: 1px solid rgb(25, 24, 24);
  166. }
  167. .box7{
  168. height: 100px;
  169. width: 100px;
  170. background-color: rgb(255, 153, 0);
  171. border: 1px solid rgb(25, 24, 24);
  172. flex: 2;
  173. /* align-self: center; */
  174. }
  175. </style>
  176. </head>
  177. <body>
  178. <div class="box1">1
  179. <div class="box11">11</div>
  180. <div class="box12">12</div>
  181. </div>
  182. <div class="box2">2</div>
  183. <div class="box3">3</div>
  184. <div class="box4">4</div>
  185. <div class="box5">5</div>
  186. <div class="box6">6</div>
  187. <div class="box7">7</div>
  188. </body>
  189. </html>

五、运行结果

读者可适当放开注释,自行体验不同效果。

记录每一个学习瞬间

css3 flex弹性布局详解的更多相关文章

  1. day17—Flex弹性布局详解(一)

    转行学开发,代码100天——2018-04-02 今天看到一篇大神的文章,关于flex布局的详解,对flex用法介绍的相当详细,非常有助于我等初学者更深入了解这种布局方式. 文章链接 [基础知识]Fl ...

  2. day18—Flex弹性布局详解(二)

    转行学开发,代码100天——2018-04-03 2.6 align-content属性 align-content 属性定义了在交叉轴方向对齐方式和额外空间分配,类似于justify-content ...

  3. 弹性布局详解——5个div让你学会弹性布局

      前  言 JRedu 在网页制作过程中,布局是我们最重要的一个环节.可以说布局的好坏直接影响到整个网页的成败!布局成,则事半功倍:布局败,则事倍功半. 随着移动互联的到来,响应式网站风靡.这也就兴 ...

  4. css--flex弹性布局详解和使用

    前言 前端开发最基础的能力是根据 ui 设计稿迅速还原页面,拿到设计稿不要急于写代码,首先要对页面进行分析,对页面的整体布局有个大概的了解,然后先实现一个整体的布局,再把布局拆分成逐个小模块,逐个去实 ...

  5. flex弹性布局属性详解!

    详细看下flex弹性布局具体属性: flex容器属性详解:flex-direction:row/column:(横排/竖排) 决定元素的排列方向:flex-wrap:nowrap/wrap/wrap- ...

  6. 弹性盒布局详解(display: flex;)

    弹性盒布局详解 弹性盒介绍 弹性盒的CSS属性 开启弹性盒 弹性容器的CSS属性 flex-direction设置弹性元素在弹性容器中的排列方向 主轴与侧轴(副轴) flex-wrap设置弹性容器空间 ...

  7. 转帖:弹性布局(display:flex;)属性详解

    它之所以被称为 Flexbox ,是因为它能够扩展和收缩 flex 容器内的元素,以最大限度地填充可用空间.与以前布局方式(如 table 布局和浮动元素内嵌块元素)相比,Flexbox 是一个更强大 ...

  8. CSS3动画属性和flex弹性布局各个属性

    [CSS3动画的使用] 1.声明一个关键帧(动画): @keynames name{ from{} to{} } 每个阶段的写法: ①可以直接使用from-to的写法 ②可以设置0%-100%的写法, ...

  9. css进阶之二:flex弹性布局

    布局模式是指一个盒子与其兄弟.祖先盒的关系决定其尺寸与位置的算法.css2.1中定义了四种布局模式,分别是块布局.行内布局.表格布局.以及定位布局.css3引入了新的布局模式Flexbox布局,灵活度 ...

  10. css3 FlexBox 弹性布局

    Flex 弹性布局 这个是css3中新添加的内容,现在已经支持所有的浏览器,利用Flex布局,可以简便.完整.响应式地实现各种页面布局. 注意:在设置 flex 后,子元素的flaot ,clear, ...

随机推荐

  1. Mac 系统下 xxx.py 在终端运行

    1.在文件中添加注释首先在你所要运行的python文件里首行添加一个特殊的注释(我使用的是python 3.7.3) #!/usr/bin/env python3 注意:如果是python3的话,&q ...

  2. Microsoft SQL Server,错误: 3023

    对数据库的备份.文件操作(如 ALTER DATABASE ADD FILE)以及加密更改必须序列化.请在当前备份或文件操作完成后重新发出该语句.ALTER DATABASE 语句失败. (Micro ...

  3. Serverless 架构演进与实践

    Serverless 架构演进与实践 1. 介绍 Serverless 并不仅仅是一个概念,很多地方都已经有了它的影子和思想,本文将给大家介绍最近比较火的 Serverless. 首先放出官方对 Se ...

  4. 在win10上装vmware虚拟机+ubuntu一打开就蓝屏重启怎么办?

    一般就是虚拟机和系统一些性能不兼容导致的 因为我原来装的版本是15.0的vmware,现在重新装了16的vmware

  5. 文本的格式化标签(粗体,斜体)和 <div>和<span>标签(都是双标签)

    上一个笔记有提到各种型号的标题,为了保证文章的美观,又会有除了标题之外的东西,比如粗体,斜体,下划线,删除线和各种分隔 1加粗,<strong><strong/>或者<b ...

  6. SAP transformation特殊字符

    unicode 0000 在transformation中总被翻译成,这个转义在其他语法中不存在,所以总是报错.

  7. 关于再次报错500--Servlet报出异常

    我是根据这样的方法解决的: 本来在前几篇里面,我是将get或者post的没有用到的方法里面自带的super方法直接删除了的,然后今天运行发现,功能实现不了,还报出500的异常错误: 心态直接裂开,然后 ...

  8. java 中文繁简体转换工具 opencc4j 使用介绍 1.8.0

    Opencc4j Opencc4j 支持中文繁简体转换,考虑到词组级别. 在线体验 Features 特点 严格区分「一简对多繁」和「一简对多异」. 完全兼容异体字,可以实现动态替换. 严格审校一简对 ...

  9. 页面录制服务上线:RESTful API 调用实现,所见所录即所得

    我们为很多实时互动场景提供了服务.在一些场景中,用户不仅需要实时互动,还需要把互动的过程录下来.那么一个好的录制解决方案究竟需要具备哪些特征呢? 在回答这个问题之前,先聊一下客户使用录制的原因.一般来 ...

  10. 百度生成式AI产品文心一言邀你体验AI创作新奇迹:百度CEO李彦宏详细透露三大产业将会带来机遇(文末附文心一言个人用户体验测试邀请码获取方法,亲测有效)

    目录 中国版ChatGPT上线发布 强大中文理解能力 智能文学创作.商业文案创作 图片.视频智能生成 中国生成式AI三大产业机会 新型云计算公司 行业模型精调公司 应用服务提供商 总结 获取文心一言邀 ...