小言_互联网的博客

实战开发经验:CSS3弹性盒模型布局

186人阅读  评论(0)

CSS3弹性盒模型布局

最近在项目中大量使用到了弹性盒模型布局,在特殊情况下,对于容器中的元素进行排列、对齐以及分配空白空间,都在很大程度上为我们节约了处理的时间。

一、什么是弹性盒模型

采用Flex布局元素,称为Flex容器(flex contaniner),简称"容器"。他的所有子元素自动成为容器成员,称为Flex项目(flex item),简称“项目” 任何一个容器都可以被指定为Flex布局。

  • display: flex | inline-flex 定义弹性伸缩盒容器类型。
    flex 将被作为弹性伸缩盒显示。
    inline-flex 将被作为内联块级弹性伸缩盒显示。

  • 注意:元素设为flex布局以后,子元素的float、clear和vertical-align属性将会失效。

二、主轴和交叉轴

  • 容器默认存在两根轴:水平的主轴和垂直的交叉轴。主轴的起始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的起始位置叫做cross start,结束位置叫做cross end
  • 项目默认沿着主轴排列,单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size

三、浏览器兼容性

四、CSS3 弹性盒子结构分析

  1. 弹性盒模型由弹性容器(Flex container)和弹性子元素(Flex item)组成。
  2. 弹性盒模型通过设置 display 属性的值为 flex 或 inline-flex将其定义为弹性容器。
  3. 弹性盒模型内包含了一个或多个弹性子元素。
  4. 每个容器默认情况下单行显示弹性子元素。
例:弹性子元素在一行内显示,从左到右:
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
	<title>flex布局</title>
	<meta name="description" content="">
	<meta name="keywords" content="">
	<link href="" rel="stylesheet">
	<style>
		.flex-box{
		   display: flex;
            flex-direction: row;
            flex-wrap: wrap;
            width: 1200px;
            height: 500px;
            background-color: #2c3e50;
		}
		.flex-box > .flex-item {
            width: 200px;
            height: 180px;
            margin: 10px;
            background-color:#e74c3c;
        }
	</style>
</head>
<body>
    <div class="flex-box">
    	<div class="flex-item"></div>
    	<div class="flex-item"></div>
    	<div class="flex-item"></div>
    	<div class="flex-item"></div>
    </div>
</body>
</html>

五、CSS3 弹性盒子属性

属性 描述
flex-direction 指定弹性容器中子元素排列方式
flex-wrap 定义弹性盒子的子元素超出父容器时是否换行
flex-flow 属性是flex-direction属性 和 flex-wrap属性 的简写
align-items 定义弹性盒子元素在主轴(纵轴)方向上的对齐方式
align-content 定义弹性盒子元素多跟轴线上的对齐方式
justify-content 定义弹性盒子元素在主轴(横轴)方向上的对齐方式

1. flex-direction 属性

排列盒子的方向。

注意:如果元素不是弹性盒对象的元素,则 flex-direction 属性不起作用。

.flex-box { flex-direction: row | row-reverse | column | column-reverse; }


属性值

简述
row 默认值,元素将水平显示,横向从左到右排列。
row-reverse 与 row 相同,倒序排列。
column 元素将垂直显示,纵向从上到下排列 。
column-reverse 与 column 相同,倒序排列。

2. flex-wrap 属性

flex-wrap 属性定义flex容器是单行或者多行,同时横轴的方向决定了新行堆叠的方向。

简述
nowrap 默认值。规定元素不换行。
wrap 规定元素超出换行。
wrap-reverse 规定元素在必要的时候换行,倒序排列。
.flex-box { flex-wrap: nowrap | wrap | wrap-reverse; }

可以取三个值:

  • nowrap (默认):不换行。
  • wrap:换行,第一行在上方。

    -wrap-reverse:换行,第一行在下方。

3. flex-flow 属性

flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap。

.flex-box { flex-flow: <flex-direction> <flex-wrap> }

4. align-items属性

align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式。

简述
stretch 默认值。项目被拉伸以适应容器。
stretch 项目位于容器的中心。
stretch 项目位于容器的开头。
stretch 项目位于容器的结尾。
stretch 项目位于容器的基线上。

5. justify-content属性

justify-content 用于设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式。

简述
flex-start 默认值。项目左对齐。
flex-end 项目右对齐。
center 项目居中对齐。
space-between 项目两端对齐,项目间隔相等
space-around 项目两侧间隔相等,项目距离 = 2倍项目边距距离

六、弹性盒子 - 项目属性

属性 简述
order 定义项目的排列顺序。
flex-grow 项目放大比例,默认为0 。
flex-shrink 项目缩小比例,默认为1 。
flex-basis 用于设置或检索弹性盒伸缩基准值。
flex 复合属性,定义弹性盒子的子元素如何分配空间。
align-self 定义的flex子项单独在侧轴(纵轴)方向上的对齐方式。

1. order属性

.flex-box .flex-item { order: <integer>; }

<integer>:用整数值来定义排列顺序,数值小的排在前面。可以为负值,默认为0。

2. flex-grow属性

.flex-box .flex-item { flex-grow: <integer>; }

<integer>:一个数字,规定项目将相对于其他灵活的项目进行扩展的量。默认值是 0。

3. flex-shrink属性

.flex-box .flex-item { flex-shrink: <integer>; }

<integer>:一个数字,规定项目将相对于其他灵活的项目进行收缩的量。默认值是 1。

4. flex-basis属性

.flex-box .flex-item { flex-basis: <integer> | auto; }

<integer>:一个长度单位或者一个百分比,规定元素的初始长度。
auto:默认值。长度等于元素的长度。如果该项目未指定长度,则长度将根据内容决定。

5. flex属性

.flex-box .flex-item { 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。
inherit 从父元素继承该属性。

6. align-self属性

.flex-box .flex-item {
    align-self: auto | stretch | center | flex-start | flex-end | baseline | initial | inherit;
}

允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。(默认值为auto,表示继承父元素的align-items属性)。如果没有父元素,则等同于stretch。

属性 简述
auto 默认值。元素继承了它的父容器的 align-items 属性。如果没有父容器则为 “stretch”。
stretch 元素被拉伸以适应容器。
center 元素位于容器的中心。
flex-start 元素位于容器的开头。
flex-end 元素位于容器的结尾。
baseline 元素位于容器的基线上。
initial 设置该属性为它的默认值。
inherit 从父元素继承该属性。


转载:https://blog.csdn.net/Myan_/article/details/101979441
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场