CSS3新增布局之: flex详解


Posted in HTML / CSS onJune 18, 2020

flex 基本概念

flex布局(flex是flexible box的缩写), 也称为弹性盒模型 。将属性和属性值(display:flex; )写在哪个标签样式中,谁就是 容器;它的所有子元素自动成为容器成员,称为项目。

当一个元素的display 取值为flex,所有项目(子元素)会在一行显示;如果所有项目的尺寸之和大于容器,也不会超出父元素的宽、高度。不会换行(每个项目都会自动缩小相应的比例)。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>布局之:flex</title>
    <link rel="stylesheet" href="./CSS/normalize.css">
    <style>
        section {
            width: 500px;
            height: 800px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
        }
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
    </style>
</head>
<body>
    <section>
        <div>01</div>
        <div>02</div>
        <div>03</div>
        <div>04</div>
        <div>05</div>
        <div>06</div>
    </section>
</body>
</html>

页面效果 : 每一个容器都等比例缩小了

CSS3新增布局之: flex详解

css代码分为两种: 一类是适用于容器的 (设置主轴的起始位置、换行、主轴的对齐方式、多跟轴线对齐方式);一类是适用于项目的(设置项目的位置)。

容器常用的属性和属性值

由于重复代码较多,就不一 一上传代码了,大家可以自己动手,敲敲代码,试试看。

一、设置主轴的起始方向  flex-direction:

默认为X轴(行):

<style>
        section {
            width: 500px;
            height: 500px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
            /* flex-direction: row; */
            /* flex-direction: row-reverse; */
            /* flex-direction: column; */
            /* flex-direction: column-reverse; */
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
    </style>

flex-direction:row; 默认是X轴的起始方向为开始位置 (从左到右依次摆放);

flex-direction:row-reverse; 改变X轴的起始方向为结束位置 (从右到左依次摆放);

CSS3新增布局之: flex详解

设置主轴的起始方向为Y轴(列):

flex-direction:column; 默认是Y轴的起始方向为开始位置(从上到下依次摆放)

flex-direction:column-reverse; 改变Y轴的起始方向为结束位置(从下到上依次摆放)

CSS3新增布局之: flex详解

二、设置项目是否换行  flex-wrap:(默认是不换行)

<style>
        section {
            width: 400px;
            height: 400px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
            /* flex-wrap: wrap; */
            /* flex-wrap: wrap-reverse; */
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
    </style>

flex-wrap: nowrap;  默认值是不换行;(n个项目都会在一行显示.如果项目尺寸之和大于容器主轴的尺寸,则项目会自动缩小相应比列.) (参考第一个代码 页面结果展示)

flex-wrap: wrap; 设置换行;(超出主轴的宽,则进行换行。换行后,两行之间会出现间距,是因为垂直方向有剩余空间,会平均分配给第二行的上下)

CSS3新增布局之: flex详解

flex-wrap: wrap-reverse; 倒序换行;(如果有两行,第2行显示在前面,第一行显示在后面)

CSS3新增布局之: flex详解

三、主轴方向的对齐方式  justify-content:

项目是一个时:

<style>
        section {
            width: 400px;
            height: 400px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
            /* justify-content: flex-start; */
            /* justify-content: flex-end; */
            /* justify-content: center; */
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
    </style>

justify-content:flex-start; 以主轴开始方向对齐 (默认)

justify-content:flex-end; 以主轴结束方向对齐

CSS3新增布局之: flex详解

justify-content:center; 主轴方向居中

CSS3新增布局之: flex详解

项目是多个时:

<style>
        section {
            width: 500px;
            height: 500px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
            /* justify-content: space-between; */
            /* justify-content: space-around; */
            /* justify-content: space-evenly; */
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
    </style>

justify-content: space-between; 两端对齐 (第一个项目在容器的起始位置,最后一个项目在容器的结束位置,中间距离相等)

CSS3新增布局之: flex详解

justify-content: space-around;  分散对齐

CSS3新增布局之: flex详解

justify-content: space-evenly;  平分剩余空间,每个项目之间的距离相同

CSS3新增布局之: flex详解

四、主轴改变为交叉轴方向的对齐方式

一根轴线: 主轴需改变为Y轴:flex-direction: column;

align-items: baseline; 以项目的第一行文字的基线对齐

align-items: stretch; (项目没有给高的情况下,stretch就是默认值,如果项目没有设置高度,就是容器的高)

<style>
        section {
            width: 500px;
            height: 500px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
            /* 主轴需改变为Y轴 项目按列摆放 */
            flex-direction: column;
            /* align-items: flex-start;  默认摆放方式 */
            /* align-items: center; */
            /* align-items: flex-end; */
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
    </style>

align-items: flex-start;  交叉轴从开始位 置对齐

align-items: center; 交叉轴居中对齐

CSS3新增布局之: flex详解 

align-items: flex-end; 交叉轴从结束位置对齐

CSS3新增布局之: flex详解

多根轴线: (所有项目的尺寸之和,必须大于容器的尺寸,使项目换行显示)

<style>
        section {
            width: 500px;
            height: 500px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
            flex-direction: column;
            flex-wrap: wrap;
            /* align-content: center; */
            /* align-content: flex-end; */
            /* align-content: space-between; */
            /* align-content: space-around; */
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
    </style>

align-content: flex-start; 交叉轴从开始位置对齐

align-content: center; 交叉轴居中对齐

CSS3新增布局之: flex详解 

align-content: flex-end; 交叉轴从结束位置对齐

CSS3新增布局之: flex详解

align-content: space-between; 交叉轴两端对齐

CSS3新增布局之: flex详解 

align-content: space-around; 交叉轴分散对齐

CSS3新增布局之: flex详解

align-content: space-evenly; 交叉轴平均分配

CSS3新增布局之: flex详解

项目的属性和属性值:

 一、order 控制项目位置

order:1;

取值 : 正、负数 (默认值是 0)

值越小越靠前 值越大越靠后 。

(适用场景: 1.搜索引擎优化,提升SEO 把重要的信息在html代码中靠前摆放,但不影响布局 2.调整项目位置)

<style>
        section {
            width: 500px;
            height: 500px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
        
        div:nth-child(4) {
            order: -1;
        }
    </style>

CSS3新增布局之: flex详解

设置一个或多个[项目]在交叉轴的对齐方式:

<style>
        section {
            width: 800px;
            height: 400px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
        
        div:nth-child(2) {
            align-self: center;
        }
        
        div:nth-child(3) {
            align-self: flex-end;
        }
    </style>

align-self: flex-start; 设置项目在交叉轴开始位置摆放 (默认位置)

align-self: center; 设置项目在交叉轴居中摆放

align-self: flex-end; 设置项目在交叉轴结束位置摆放

CSS3新增布局之: flex详解

设置某一个或多个元素放大比例

条件:所有项目的尺寸之和要小于容器的尺寸
(没有剩余空间,则设置此属性无效。)

一个元素有 flex-grow 属性

<style>
        section {
            width: 800px;
            height: 400px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
        }
        
        div:nth-child(2) {
            flex-grow: 1;
        }
    </style>

CSS3新增布局之: flex详解

多个项目有flex-grow 属性

<style>
        section {
            width: 800px;
            height: 200px;
            border: 2px solid black;
            margin: 50px auto;
            display: flex;
            box-sizing: border-box;
        }
        
        div {
            width: 100px;
            height: 100px;
            border: 1px solid tomato;
            box-sizing: border-box;
        }
        
        div:nth-child(2) {
            flex-grow: 1;
        }
        
        div:nth-child(4) {
            flex-grow: 2;
        }
    </style>

效果展示

CSS3新增布局之: flex详解

将容器的剩余空间分成相应的flex-grow的份数,再按照每个项目的份数,分给有flex-grow属性的项目。

总之,flex使用起来特别方便,可适用于响应式布局,也可使用圣杯布局。只是属性较多,也要多练、多实践 ,相信你也能很快熟练使用flex的。

推荐一个小游戏,很有趣,又能增强关于flex的使用方法 :Flexbox Froggy  http://blog.xiaoboswift.com/flexbox/#zh-cn   去帮助小青蛙回家吧~~

总结

到此这篇关于CSS3新增布局之: flex详解的文章就介绍到这了,更多相关css flex 布局内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

HTML / CSS 相关文章推荐
CSS3+DIV实现漂亮的动画彩色标签
Jun 16 HTML / CSS
IE兼容css3圆角的实现代码
Jul 21 HTML / CSS
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
Dec 10 HTML / CSS
css实例教程 一款纯css3实现的超炫动画背画特效
Nov 05 HTML / CSS
详解CSS3原生支持div铺满浏览器的方法
Aug 30 HTML / CSS
利用简洁的图片预加载组件提升html5移动页面的用户体验
Mar 11 HTML / CSS
前端面试必备之html5的新特性
Sep 05 HTML / CSS
简单介绍HTML5中audio标签的使用
Sep 24 HTML / CSS
html5超简单的localStorage实现记住密码的功能实现
Sep 07 HTML / CSS
HTML5 canvas 瀑布流文字效果的示例代码
Jan 31 HTML / CSS
Canvas实现贝赛尔曲线轨迹动画的示例代码
Apr 25 HTML / CSS
AmazeUI 列表的实现示例
Aug 17 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
Jun 17 #HTML / CSS
CSS3+JavaScript实现炫酷呼吸效果的示例代码
Jun 15 #HTML / CSS
CSS3中引入多种自定义字体font-face
Jun 12 #HTML / CSS
详解CSS3实现响应式手风琴效果
Jun 10 #HTML / CSS
CSS3实现淘宝留白的方法
Jun 05 #HTML / CSS
CSS3实现歌词进度文字颜色填充变化动态效果的思路详解
Jun 02 #HTML / CSS
CSS 3.0 结合video视频实现的创意开幕效果
Jun 01 #HTML / CSS
You might like
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
2015/12/01 PHP
php二维码生成以及下载实现
2017/09/28 PHP
javascript 可以拖动的DIV(二)
2009/06/26 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
JS在onclientclick里如何控制onclick的执行
2016/05/30 Javascript
微信小程序 教程之引用
2016/10/18 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
Node调用Java的示例代码
2017/09/20 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
[02:47]DOTA2英雄基础教程 野性怒吼兽王
2013/12/05 DOTA
仅利用30行Python代码来展示X算法
2015/04/01 Python
Hadoop中的Python框架的使用指南
2015/04/22 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
Python实现的简单线性回归算法实例分析
2018/12/26 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
python多进程并发demo实例解析
2019/12/13 Python
python实现logistic分类算法代码
2020/02/28 Python
美国汽车轮胎和轮毂销售网站:Tire Rack
2018/01/11 全球购物
酒店服务实习自我鉴定
2013/09/22 职场文书
《青海高原一株柳》教学反思
2014/04/25 职场文书
工地安全生产标语
2014/06/06 职场文书
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
会议接待欢迎词范文
2015/01/26 职场文书
绵山导游词
2015/02/05 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python