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

CSS3弹性盒模型布局

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

一、什么是弹性盒模型

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

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

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

二、主轴和交叉轴

Alt

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

三、浏览器兼容性

Alt

四、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>

Alt

五、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; }

Alt
属性值

简述
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 (默认):不换行。
    Alt
  • wrap:换行,第一行在上方。
    Alt
    -wrap-reverse:换行,第一行在下方。
    Alt

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项目位于容器的基线上。

Alt

5. justify-content属性

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

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

Alt

六、弹性盒子 - 项目属性

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

1. order属性

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

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

2. flex-grow属性

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

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

3. flex-shrink属性

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

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

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从父元素继承该属性。

Alt

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值