Flex 布局(layout)

Flex 布局(layout)

Flex是Flexible Box(弹性盒)的缩写,意为”弹性布局”。网页布局(layout)是 CSS 的一个重点应用。布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便。

2009年,W3C提出了一种新的方案——Flex布局(Flex layout),可以简便、完整、响应式地实现各种页面布局。注意,设为 Flex 布局以后,子元素的float、clear和vertical-align属性将失效。Internet Explorer 9 及更早版本不支持 flex 属性。

采用Flex布局的元素,称为Flex容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称”项目”。

 

容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。

 

任何一个容器都可以指定为Flex布局。

【在HTML开发中我们常常会使用一类标签作为容器放置一些内容,我们把这类标签称之为容器标签,可以作为容器标签的包括列表标签、表格标签、框架标签、布局标签。参见

https://www.cnblogs.com/yunxiansheng/p/9190454.html】

 

使用Flex 布局(layout),需要了解下面属性语法

flex 属性

flex-basis 属性

flex-direction 属性

flex-flow 属性

flex-grow 属性

flex-shrink 属性

flex-wrap 属性

 

 

首先学习flex 属性

 

实例1

<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8" />
    <title>flex测试</title>
<style>
  #main
  {
       width:220px;
       height:300px;
       border:1px solid black;
       display:flex;
  }

  #main div
  {
       flex:1;   <!--请注意这里将 flex:1;换为 flex: auto; 试试 -->
  }
</style>
</head>
<body>
   <div id="main">
        <div style="background-color:coral;">红色</div>
        <div style="background-color:lightblue;">蓝色</div> 
        <div style="background-color:lightgreen;">带有更多内容的绿色 div</div>
   </div>
   <p><b>注意:</b> Internet Explorer 9 及更早版本不支持 flex 属性。</p>
</body>
</html>

将上面实例代码,保存的flex01.html文件,用浏览器打开运行,显示如下:

 

将 flex:1;换为 flex: auto; 用浏览器打开运行,显示如下:

 

flex 属性语法

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

此属性可取值积极含义:

描述
flex-grow一个数字,规定项目将相对于其他灵活的项目进行扩展的量。
flex-shrink一个数字,规定项目将相对于其他灵活的项目进行收缩的量。
flex-basis项目的长度。合法值:"auto"、"inherit" 或一个后跟 "%"、"px"、"em" 或任何其他长度单位的数字。
auto与 1 1 auto 相同。
none与 0 0 auto 相同。
initial设置该属性为它的默认值,即为 0 1 auto。请参阅 initial
inherit从父元素继承该属性。请参阅 inherit

 

进一步说明

flex 属性可以指定1个,2个或3个值。

单值语法: 值必须为以下其中之一:

一个无单位数(<number>): 它会被当作<flex-grow>的值。

一个有效的宽度(width)值: 它会被当作 <flex-basis>的值。

关键字none,auto或initial.

双值语法: 第一个值必须为一个无单位数,并且它会被当作 <flex-grow> 的值。第二个值必须为以下之一:

一个无单位数:它会被当作 <flex-shrink> 的值。

一个有效的宽度值: 它会被当作 <flex-basis> 的值。

三值语法:

第一个值必须为一个无单位数,并且它会被当作 <flex-grow> 的值。

第二个值必须为一个无单位数,并且它会被当作  <flex-shrink> 的值。

第三个值必须为一个有效的宽度值, 并且它会被当作 <flex-basis> 的值。

initial

元素会根据自身宽高设置尺寸。它会缩短自身以适应 flex 容器,但不会伸长并吸收 flex 容器中的额外自由空间来适应 flex 容器 。相当于将属性设置为"flex: 0 1 auto"。

auto

元素会根据自身的宽度与高度来确定尺寸,但是会伸长并吸收 flex 容器中额外的自由空间,也会缩短自身来适应 flex 容器。这相当于将属性设置为 "flex: 1 1 auto".

none

元素会根据自身宽高来设置尺寸。它是完全非弹性的:既不会缩短,也不会伸长来适应 flex 容器。相当于将属性设置为"flex: 0 0 auto"。

<'flex-grow'>

定义 flex 元素的 flex-grow 属性,详见 <number>。默认值为 0,负值无效。

<'flex-shrink'>

定义 flex 元素的 flex-shrink 属性,详见 <number>。默认值为1,负值无效。

<'flex-basis'>

定义 flex 元素的 flex-basis 属性。若值为0,则必须加上单位,以免被视作伸缩性。 默认值为 auto。

 

flex-basis 属性

实例2

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title> flex-basis测试</title>
<style>
#main {
    width: 350px;
    height: 100px;
    border: 1px solid #c3c3c3;
    display: -webkit-flex; /* Safari */
    display: flex;
}

#main div {
    flex-grow: 0;
    flex-shrink: 0;
    flex-basis: 40px;
}

#main div:nth-of-type(2) {
    flex-basis: 80px;   <!--请注意这里--> 
}
</style>
</head>
<body>

<div id="main">
  <div style="background-color:coral;"></div>
  <div style="background-color:lightblue;"></div>
  <div style="background-color:khaki;"></div>
  <div style="background-color:pink;"></div>
  <div style="background-color:lightgrey;"></div>
</div>

<p><b>注意:</b> Internet Explorer 10 及更早版本浏览器不支持 flex-basis 属性。</p>

</body>
</html>

将上面实例代码,保存的flex02.html文件,用浏览器打开运行,显示如下:

 

flex-basis 属性语法

flex-basis: number|auto|initial|inherit;

 

此属性可取值积极含义:

描述
number一个长度单位或者一个百分比,规定灵活项目的初始长度。
auto默认值。长度等于灵活项目的长度。如果该项目未指定长度,则长度将根据内容决定。
initial设置该属性为它的默认值。请参阅 initial
inherit从父元素继承该属性。请参阅 inherit

 

就介绍到这里吧。

要想更多学习,可参考:

 

https://developer.mozilla.org/zh-CN/docs/Web/CSS/flex

https://www.runoob.com/cssref/css3-pr-flex.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Flex布局Flexible Box Layout)是一种用于网页布局的CSS3模块,它提供了一种更加灵活和自适应的方式来排列和对齐元素。Flex布局的设计目标是为了解决传统的CSS布局中的一些困难和限制。 Flex布局由容器(flex container)和项目(flex item)组成。容器是指应用Flex布局的父元素,而项目则是容器中的子元素。通过在容器上设置属性,可以控制项目在容器中的排列方式。 以下是Flex布局中常用的属性: 1. 容器属性: - `display: flex;`:将容器设置为Flex布局。 - `flex-direction: row/column;`:指定项目的排列方向。默认值为row,表示水平方向,可以设置为column,表示垂直方向。 - `flex-wrap: nowrap/wrap/wrap-reverse;`:控制项目是否换行。nowrap表示不换行,wrap表示自动换行,wrap-reverse表示自动换行且倒序排列。 - `flex-flow: <flex-direction> <flex-wrap>;`:flex-direction和flex-wrap的简写形式。 - `justify-content: flex-start/center/flex-end/space-between/space-around/space-evenly;`:控制项目在主轴上的对齐方式。flex-start表示靠左对齐,center表示居中对齐,flex-end表示靠右对齐,space-between表示两端对齐,space-around表示平均分布,space-evenly表示平均分布且间距相等。 - `align-items: flex-start/center/flex-end/stretch/baseline;`:控制项目在交叉轴上的对齐方式。flex-start表示靠上对齐,center表示居中对齐,flex-end表示靠下对齐,stretch表示拉伸填充,baseline表示基线对齐。 - `align-content: flex-start/center/flex-end/space-between/space-around/stretch;`:控制多行项目在交叉轴上的对齐方式。与align-items的具体效果类似。 2. 项目属性: - `order: <integer>;`:控制项目的排列顺序。默认值为0,可以为正整数或负整数。 - `flex-grow: <number>;`:控制项目的放大比例。默认值为0,表示不放大,可以设置为正整数。 - `flex-shrink: <number>;`:控制项目的缩小比例。默认值为1,表示可以缩小,可以设置为正整数。 - `flex-basis: <length>|auto;`:指定项目在主轴上的初始大小。默认值为auto,表示由项目的内容决定,可以设置为具体的长度值。 - `flex: <flex-grow> <flex-shrink> <flex-basis>;`:flex-grow、flex-shrink和flex-basis的简写形式。 - `align-self: auto/flex-start/center/flex-end/stretch/baseline;`:控制单个项目在交叉轴上的对齐方式,覆盖容器的align-items属性。 Flex布局具有很强的灵活性和自适应性,可以轻松实现各种复杂的网

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学习&实践爱好者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值