详解CSS3 弹性布局快速入门


Posted in HTML / CSS onJune 06, 2019

前言

弹性布局是新一代的布局方式,传统布局中使用浮动布局会给我们带来不少弊端,如CSS代码高度依赖于HTML代码结构等等,下面我将用几个例子让大家快速学会弹性布局。

PS:弹性布局适用于较简单的场景,过于复杂的场景可以尝试着使用CSS3的Grid布局,弹性布局在PC端中还存在兼容性问题,移动端中无兼容性问题,可以放心使用。

1.容器属性

css3为新增的弹性布局提供了多个属性,分别为弹性盒模型的容器属性,以及弹性盒子中子元素的子元素属性。

1.1display

css3中为display新增了两个属性值,分别为flex、inline-flex

display:flex;           /*将容器声明为一个弹性盒模型且容器表现为块级元素*/
display:inline-flex;    /*将容器声明为一个弹性盒模型且容器表现为行内元素*/

容器display:block;

详解CSS3 弹性布局快速入门

容器display:flex;

详解CSS3 弹性布局快速入门

此时弹性盒模型内的子元素变得类似浮动后的布局,这里要引入弹性盒模型中两条重要的轴线,分别为主轴和垂直轴,如下图所示,弹性盒模型内的子元素默认按照主轴的方向排列。

详解CSS3 弹性布局快速入门 

1.2flex-direction

flex-direction可以设置主轴的方向,默认值为row。

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

详解CSS3 弹性布局快速入门

理解两条轴线至关重要,搞定轴线之后后面就是简单的使用属性了。

1.3flex-wrap

.box {
    width:500px;
    height:500px;
    margin:100px auto 0 auto;
    background: #eee;
    display: flex;
    flex-direction: row;
}
.box-item {
    width:200px;
    height:200px;
    line-height:200px;
    text-align: center;
    color:#fff;
    font-size:20px;
}

从上面可以看出容器的宽高都是500px,子元素的宽高都是200px,那如果我们一行放3个元素,元素会像浮动布局那样换行吗?

详解CSS3 弹性布局快速入门

并没有,同时我们发现了,现在一个子元素的宽度只有166.66px,三个子元素没有换行同时自动等比例缩放至放好可以在容器中放下。 flex-wrap就是控制弹性盒模型的子元素换行方式的,默认值为nowrap。

flex-wrap:nowrap | wrap | wrap-reverse

  • flex-wrap:nowrap; /*不换行,等比例缩小*/
  • flex-wrap:wrap; /*自动换行*/
  • flex-wrap:wrap-reverse; /*自动反方向换行,往下换行变成往上换行*/

详解CSS3 弹性布局快速入门 

1.4justify-content

justify-content控制主轴的对齐方式,默认向主轴开始起点位置对齐,值为flex-start。

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

  • justify-content:flex-start; /*向主轴开始位置对齐*/
  • justify-content:flex-end; /*向主轴结束位置对齐*/
  • justify-content:center; /*主轴居中对齐*/
  • justify-content:space-between; /*等间距对齐,两端不留空*/
  • justify-content:space-around; /*等间距对齐,两端留空,每个元素左间距与右间距大小相等,具体见下图*/

详解CSS3 弹性布局快速入门 

详解CSS3 弹性布局快速入门 

1.5align-items

align-items控制垂直轴的对齐方式,默认向主轴开始起点位置对齐,值为flex-start。

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

  • align-items:flex-start; /*向垂直轴开始位置对齐*/
  • align-items:flex-end; /*向垂直轴结束位置对齐*/
  • align-items:center; /*垂直轴居中对齐*/
  • align-items:baseline; /*文本基线对齐,用的不多*/
  • align-items:stretch; /*垂直轴方向上的height/width若值为auto,则自动填满,但依然受到min/max-width/height的控制。不设置弹性盒模型时,height默认值为内容区大小,若设置为弹性盒模型且align-items设置为stretch,则高度占满整个父容器*/

详解CSS3 弹性布局快速入门 

详解CSS3 弹性布局快速入门 

1.6align-content

刚刚说完了垂直轴只有一个元素的情况,若垂直轴有两个元素时,align-items还能起作用吗? 为了使垂直轴存在两个元素,我们首先设置自动换行

flex-wrap:wrap;

详解CSS3 弹性布局快速入门

从图中可以看到,这不是我们想要的效果,我们想要的效果是垂直轴方向上的两个元素紧贴着的。

这时我们要用align-content。 align-content:flex-start | flex-end | center | space-between | space-around

  • align-content:flex-start; /*向主轴开始位置对齐*/
  • align-content:flex-end; /*向主轴结束位置对齐*/
  • align-content:center; /*主轴居中对齐*/
  • align-content:space-between; /*等间距对齐,两端不留空*/
  • align-content:space-around; /*等间距对齐,两端留空,每个元素上间距与下间距大小相等,具体见下图*/

详解CSS3 弹性布局快速入门 

详解CSS3 弹性布局快速入门

垂直轴只有一行元素时使用align-items属性,有多行元素时使用align-content属性。

2.子元素属性

2.1order

order属性可用于设置子元素的位置,order的值越小排在越前面,默认值为0,可以设置负值。

//设置第三个子元素的order为-1
.box-item3 {
	background: green;
	order:-1;
}

详解CSS3 弹性布局快速入门

通过为每一个子元素设置order值可以使得布局不依赖于html的结构。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

HTML / CSS 相关文章推荐
CSS3的一个简单导航栏实现
Aug 03 HTML / CSS
CSS3 transforms应用于背景图像的解决方法
Apr 16 HTML / CSS
纯CSS3+DIV实现小三角形边框效果的示例代码
Aug 03 HTML / CSS
CSS3 transition 实现通知消息轮播条
Oct 14 HTML / CSS
HTML5 WebGL 实现民航客机飞行监控系统
Jul 25 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
Oct 17 HTML / CSS
HTML5的革新 结构之美
Jun 20 HTML / CSS
HTML5中div、article、section的区别及使用介绍
Aug 14 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
Apr 23 HTML / CSS
Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码
Mar 17 HTML / CSS
HTML5 Blob对象的具体使用
May 22 HTML / CSS
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
Mar 31 HTML / CSS
通过css3动画和opacity透明度实现呼吸灯效果
Aug 09 #HTML / CSS
CSS3 translate导致字体模糊的实例代码
Aug 30 #HTML / CSS
CSS3实现类似翻书效果的过渡动画的示例代码
Sep 06 #HTML / CSS
CSS3动画之利用requestAnimationFrame触发重新播放功能
Sep 11 #HTML / CSS
css3 响应式媒体查询的示例代码
Sep 25 #HTML / CSS
移动端rem布局的两种实现方法
Jan 03 #HTML / CSS
css3实现波纹特效、H5实现动态波浪效果
Jan 31 #HTML / CSS
You might like
PHP面向对象分析设计的61条军规小结
2010/07/17 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
2011/07/03 PHP
php FLEA中二叉树数组的遍历输出
2012/09/26 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
php将textarea数据提交到mysql出现很多空格的解决方法
2014/12/19 PHP
js DOM的学习笔记
2011/12/22 Javascript
Javascript绝句欣赏 一些经典的js代码
2012/02/22 Javascript
JavaScript中的Math.SQRT1_2属性使用简介
2015/06/14 Javascript
详解AngularJS中的表格使用
2015/06/16 Javascript
基于Jquery代码实现支持PC端手机端幻灯片代码
2015/11/17 Javascript
jQuery模仿阿里云购买服务器选择购买时间长度的代码
2016/04/29 Javascript
Jquery on方法绑定事件后执行多次的解决方法
2016/06/02 Javascript
浅谈layer的iframe弹窗给里面的标签赋值的问题
2016/11/10 Javascript
Angualrjs 表单验证的两种方式(失去焦点验证和点击提交验证)
2017/05/09 Javascript
JS实现动态给标签控件添加事件的方法示例
2017/05/13 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
Nodejs实现文件上传的示例代码
2017/09/26 NodeJs
基于 D3.js 绘制动态进度条的实例详解
2018/02/26 Javascript
vue router动态路由下让每个子路由都是独立组件的解决方案
2018/04/24 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
angular将html代码输出为内容的实例
2018/09/30 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
javscript 数组扁平化的实现
2020/02/03 Javascript
JavaScript 严格模式(use strict)用法实例分析
2020/03/04 Javascript
[04:04]DOTA2亚洲邀请赛比赛场馆&酒店全攻略
2017/03/23 DOTA
python pandas库的安装和创建
2019/01/10 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
2020/02/27 Python
Pandas的数据过滤实现
2021/01/15 Python
CSS3中各种颜色属性的使用教程
2016/05/17 HTML / CSS
区域销售经理岗位职责
2015/04/02 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
Python - 10行代码集2000张美女图
2021/05/23 Python
MyBatis配置文件解析与MyBatis实例演示
2022/04/07 Java/Android