当前位置:Gxlcms > html代码 > 【CSS3】CSS3:弹性盒子(FlexBox)

【CSS3】CSS3:弹性盒子(FlexBox)

时间:2021-07-01 10:21:17 帮助过:13人阅读

  1. Flex布局是什么

  2. 如何指定一个容器为Flex布局

  3. Flex的基本语法

    1. display

    2. flex-direction

    3. justify-content

    4. align-items

    5. flew-wrap

    6. align-self

    7. flex-flow

    8. flex

    9. order

  4. 示例

    1. 骰子的布局

    2. 圣杯的布局

  5. 参考文章

一, Flex布局是什么

布局的传统解决方案,基于盒状模型,依赖 display属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。Flex布局是W3C组织于2009年提出的一种布局方案,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持。Flex布局将会成为未来布局的首选方案。

二,如何指定一个容器为Flex布局

只需要在容器中添加值为flex的display属性。

  1. .box{
  2. display: flex;
  3. }

三,Flex的基本语法

display

语法: display:flex;

指定Flex。

flex-direction

语法: flex-direction: row | row-reverse | column | column-reverse

指定弹性子元素在父容器中的排列顺序。这个也可以通过设置 direction:rtl; 或是 direction:ltr; 来等效实现,其中的rtl、ltr是right to left、left to right的简写。

justify content

 语法: justify-content: flex-start | flex-end | center | space-between | space-around

内容对齐(justify-content)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐。

概念理解图:

其中space-around,笔者总结了一个简单的公式:

x=(W2-N*W1)/(2N)

x:最两边留下的宽度。

W2:就是模块的width。

W1:一个子模块的宽度(每个均匀)。

N:

align-items

语法: align-items: flex-start | flex-end | center | baseline | stretch

设置弹性盒子元素在侧轴(纵轴)方向上的对齐方式。

下面这张图片可以帮助读者理解baseline:

flex-wrap

语法: flex-flow: nowrap | warp | warp-reverse

align-content

语法: align-content: flex-start | flex-end | center | space-between | space-around | stretch

设置各个行的对齐方式。

align-self

语法: align-self: auto | flex-start | flex-end | center | baseline | stretch

设置弹性元素自身在侧轴方向的对齐。这个属性要区别与align-content,align-content的范围是每一行,然而align-self只是某一行里面的某个弹性元素。

flex-flow

语法:flex-direction和flex-wrap的简写。

flex

语法: flex: flex-grow flex-shrink flex-basis|auto|initial|inherit;

指定元素分配空间。需要注意,如果flex-basis为100%,那么该弹性模块就会单独占一行。

oder

语法: order: number|initial|inherit;

指定弹性模块的排列顺序,其中值越小,越优先,可以为负值。

四,示例

1,骰子的布局

骰子的一面,最多可以放置9个点。

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

如果不加说明,本节的HTML模板一律如下。

  1. <p class="box"> <span class="item">>>

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

1.1 单项目

首先,只有左上角1个点的情况。Flex布局默认就是首行左对齐,所以一行代码就够了。

  1. .box { display: flex;}

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

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

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

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

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

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

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

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

1.2 双项目

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

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

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

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

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

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

1.3 三项目

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

1.4 四项目

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

HTML代码如下。

  1. <p class="box"> <p class="column"><span class="item">><span class="item">> >
  2. <p class="column"><span class="item">><span class="item">> >>

CSS代码如下。

  1. .box { display: flex; flex-wrap: wrap; align-content: space-between;}
  2. .column { flex-basis: 100%; display: flex; justify-content: space-between;}

1.5 六项目

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

  1. .box { display: flex;
  2. flex-direction: column;
  3. flex-wrap: wrap;
  4. align-content: space-between;
  5. }

HTML代码如下。

  1. <p class="box"> <p class="row"><span class="item">>
  2. <span class="item">><span class="item">> > <p class="row"><span class="item">> >
  3. <p class="row"> <span class="item">> <span class="item">> >>

CSS代码如下。

  1. .box { display: flex; flex-wrap: wrap;}
  2. .row{ flex-basis: 100%; display:flex;}
  3. .row:nth-child(2){ justify-content: center;}
  4. .row:nth-child(3){ justify-content: space-between;}

1.6 九项目

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

2,圣杯布局

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

HTML代码如下:

  1. <p class="flex-container">
  2. <header class="header">头部header>
  3. <article class="main"><p>主体p>
  4. article>
  5. <aside class="aside aside1">边栏 1aside>
  6. <aside class="aside aside2">边栏 2aside>
  7. <footer class="footer">底部footer>p>

CSS代码入下:

  1. .flex-container {
  2. display: -webkit-flex;display: flex;
  3. -webkit-flex-flow: row wrap;flex-flow: row wrap;font-weight: bold;text-align: center;
  4. }
  5. .flex-container > * {padding: 10px;flex: 1 100%;
  6. }
  7. .main {text-align: left;background: cornflowerblue;
  8. }
  9. .header {background: coral;}
  10. .footer {background: lightgreen;}
  11. .aside1 {background: moccasin;}
  12. .aside2 {background: violet;}@media all and (min-width: 600px) {.aside { flex: 1 auto; }}
  13. @media all and (min-width: 800px) {
  14. .main
  15. {
  16. flex: 3 0px;
  17. }
  18. .aside1
  19. {
  20. order: 1;
  21. }
  22. .main
  23. { order: 2;
  24. }
  25. .aside2 { order: 3; }
  26. .footer
  27. {
  28. order: 4;
  29. }
  30. }


以上就是【CSS3】 CSS3:弹性盒子(Flex Box)的内容,更多相关内容请关注PHP中文网(www.gxlcms.com)!

人气教程排行