Flex知识小结

栏目: Html · 发布时间: 6年前

内容简介:flex 容器默认存在两根轴主轴(main axis): 默认水平,可通过设置flex-direction改变主轴方向。交叉轴(cross axis): 默认垂直。
Flex知识小结

flex 容器默认存在两根轴

主轴(main axis): 默认水平,可通过设置flex-direction改变主轴方向。

交叉轴(cross axis): 默认垂直。

主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;

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

项目默认沿主轴排列

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

复制代码

1. flex-direction

决定主轴的方向(即项目的排列方向)。

默认为row(水平轴),设置为column则为垂直轴。

当有reverse时,主轴起点和终点交换位置。

row
row-reverse
column
column-reverse

对于下面的例子:

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
        ul{   
            display: flex;   
            flex-direction: row;  
        }
        
        ul>li{
            width:100px;
            height:50px;
            background:#ffff00;
            border:1px red solid;
            display: inline-block;   
        }
	</style>
</head>
<body>
    <ul>    	
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
</body>
</html>

复制代码

1) flex-direction: row

从左边向右依次排开(截图中红色框指空白部分)。

Flex知识小结

2) flex-direction: row-reverse

从右边向左依次排开。

Flex知识小结

3) flex-direction: column

从上边向下依次排开。

Flex知识小结

4) flex-direction: column-reverse

从下边向上依次排开。

Flex知识小结

2. flex-wrap

项目默认都排在主轴上,如果一行排不下,如何换行?可用flex-wrap属性设置。

nowrap
wrap
wrap-reverse

1) flex-wrap: nowrap

每个项目依次排开不换行(每个项目宽度固定时,按照宽度依次放置,如果项目过宽一行放不下,且内部元素不会撑开容器时,会导致压缩,如果内部元素撑开容器会出现滚动条,如果上个例子li的宽度改为600px,实际只有400++px , 压缩原因参考7.flex属性 )。

Flex知识小结

2) flex-wrap: wrap

依次排开,一行不够换行展示。

Flex知识小结

flex-wrap:wrap 类似浮动float(当flex-direction为row-reverse时,类似 float:right )。

与浮动有一点不同,flex布局每一行高度都是一行所有项目中最高项目的高度,即每一行高度一致,就像给每一行嵌套一个div,这个div嵌套的项目个数取决于设备,多么厉害的布局,这种布局防止页面错乱。

而float每个项目高度不同,可能会导致页面错乱。根据 float 的定义,我们知道,它是浮在页面上方,换行时可能不是从页面最左侧开始排列,这取决于上一行最右边项目的高度和宽度等,而flex布局换行都是从最左侧排列。

下面用一个示例解释这个问题,把第1个项目高度改为60px(其他都是50px)。

flex布局示例:

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
        ul{   
            display: flex;   
            flex-direction: row;  
        }
        
        ul>li{
            width:100px;
            height:50px;
            background:#ffff00;
            border:1px red solid;
            display: inline-block;   
        }
        ul>li:first-child{
             height: 60px;
        }
	</style>
</head>
<body>
    <ul>    	
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
</body>
</html>
复制代码

float布局示例:

<!DOCTYPE html>
<html>
<head>
	<title></title>
	<style type="text/css">
		ul>li{
			float: left;
		    width:400px;
		    height:50px;
		    background:#ffff00;
		    border:1px red solid;
		    display: inline-block;   
		}
		ul>li:first-child{
			height: 60px;
		}
	</style>
</head>
<body>
	<ul>    	
		<li>1</li>	    
		<li>2</li>	    
		<li>3</li>	    
		<li>4</li>  
		<li>5</li>   
	</ul>
</body>
</html>
复制代码

跟float的区别在下面两个图中可以看出来,flex的项目4在1下方,而float的项目4贴在2的下面。如果把项目1高度改为20px,两者没有差别。

Flex知识小结
Flex知识小结

3) flex-wrap: wrap-reverse

这个更厉害了,换行且第一行在最下面。我的理解是这样,我们往地上一点点放盒子(这些盒子高度可能不同),一行放满之后放一个挡板,在上面继续放盒子,而flex-wrap:wrap是从上面放,一行放不下时,放个挡板,第二行继续放。

Flex知识小结

3. flex-flow

flex-flow属性就是flex-direction和flex-wrap的简写形式,默认值为row nowrap。不再多解释。

.box {
    flex-flow:row-reverse wrap;
}
复制代码

4. justify-content

justify-content 定义了项目在主轴上的对齐方式,即每一行的排布方式,当每个项目宽度都不相同时设置项目间隔和整体位置。

flex-start
flex-end
center
space-between
space-around

1) justify-content: flex-start

左对齐(默认)。

Flex知识小结

2) justify-content: flex-end

右对齐。

Flex知识小结

3) justify-content:center

居中。

Flex知识小结

4) justify-content: space-between

两端对齐,项目之间的间隔都相等。项目与边框无间距。

Flex知识小结

5) justify-content: space-around

每个项目两侧的间隔相等。项目之间的间隔比项目与边框的间隔大一倍。

Flex知识小结

5. align-items

align-items属性定义项目在交叉轴上如何对齐,即每一行项目高度不同时设置该属性改变布局。

flex-start
flex-end
center
baseline
stretch

1) align-items: flex-start

交叉轴的起点对齐(在本例中是上对齐)。

Flex知识小结

2) align-items:flex-end

交叉轴的终点对齐(在本例中是下对齐)。

Flex知识小结

3) align-items:center

交叉轴的中点对齐(居中)。

Flex知识小结

4) align-items:baseline

项目的第一行文字的基线对齐,本例给项目2增加padding-top,如下图,文字1/2/3对齐。

Flex知识小结

5) align-items:stretch

如果项目未设置高度或设为auto,将占满整个容器的高度,我们试图把项目3设置height:auto,如下图,它会撑满整个高度,这个也十分有用。

Flex知识小结

6. align-content

定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。align-content类似justify-content,只不过justify-content定义主轴对齐方式,而align-content是定义交叉轴的对齐方式。

The align-items property will align the items on the cross axis.
复制代码
flex-start
flex-end
center
space-between
space-around

下面所有示例把flex容器高度改为300px,结合上面说到的justify-content的示例,即可明白:

1) align-content:flex-start

与交叉轴的起点对齐。

Flex知识小结

2) align-content:flex-end

与交叉轴的终点对齐。

Flex知识小结

3) align-content:center

与交叉轴的中点对齐(面试垂直居中的一种方法)。

Flex知识小结

4) align-content:space-between

与交叉轴两端对齐,轴线之间的间隔平均分布。

Flex知识小结

5) align-content:space-around

每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。

Flex知识小结

6) align-content:stretch(默认值)

轴线占满整个交叉轴。这个暂时没想到好的例子说明。

7. flex

设置flex属性,会根据属性的比例进行划分。

布局空白 available space,这几个 flex 属性的作用其实就是改变了 flex 容器中的布局空白的行为。

Where the flex-grow property deals with adding space in the main axis,
the flex-shrink property controls how it is taken away.

If we do not have enough space in the container to lay out our items and 
flex-shrink is set to a positive integer the item can become smaller than the flex-basis.
复制代码

包含三个属性:flex-grow flex-shrink flex-basis

flwx-basis
flex-grow
flex-shrink

flex预定义值:

flex: initial  =  flex:0 1 auto
flex: auto  =  flex:1 1 auto
flex: none  =  flex: 0 0 auto
flex: <positive-number>
复制代码

flex详解: www.w3.org/TR/2017/CR-…


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Automate This

Automate This

Christopher Steiner / Portfolio / 2013-8-9 / USD 25.95

"The rousing story of the last gasp of human agency and how today's best and brightest minds are endeavoring to put an end to it." It used to be that to diagnose an illness, interpret legal docume......一起来看看 《Automate This》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具