八:以理论结合实践方式梳理前端 CSS 3 ——— 弹性布局特性

基本概念

  • 设置 display: flex; 的元素称为 Flex 容器,其中所有的子元素称为 Flex 项目
  • 容器存在两根用于定位的轴,分别是水平的 主轴 和垂直的 交叉轴,项目默认沿主轴排列

容器属性(设置在容器上)

  • flex-direction:设置主轴的方向,可选值如下
    • row(默认):主轴沿水平方向,起点在左边
    • row-reverse:主轴沿水平方向,起点在右边
    • column:主轴沿垂直方向,起点在上边
    • column-reverse:主轴沿垂直方向,起点在下边
  • flex-wrap:定义换行的方式,可选值如下
    • nowrap(默认):不换行
    • wrap:换行,第一行在上面
    • wrap-reverse:换行,第一行在下面
  • justify-content:定义项目在主轴上的对齐方式,可选值如下
    • flex-start(默认):起点对齐
    • flex-end:终点对齐
    • center:居中对齐
    • space-between:两端对齐,项目之间间隔相等
    • space-around:两端对齐,项目两侧间隔相等
  • align-items:定义项目在交叉轴上的对齐方式,可选值如下
    • flex-start:起点对齐
    • flex-end:终点对齐
    • center:居中对齐
    • baseline:项目的第一行文字的基线对齐
    • stretch(默认):如果项目未设置 height 或者设置为 auto,那么项目占满容器的高度

项目属性(设置在项目上)

  • order:定义项目的排列顺序,属性接受一个整数,数值越小排列越前,默认为 0

  • flex-grow:定义项目的放大比例,默认为 0,表示即使存在剩余空间,也不放大

    如果所有项目设置为 1,并且还有剩余空间,那么它们将会等分剩余空间

    如果一个项目设置为 2,其它项目设置为 1,那么该项目占据的剩余空间将会比其它项目多一倍

  • flex-shrink:定义项目的缩小比例,默认为 1,表示如果空间不足,就会缩小

    如果所有项目设置为 1,并且空间不足,那么它们将会等比缩小

    如果一个项目设置为 0,其它项目设置为 1,那么该项目不会缩小,而其它项目正常缩小

  • flex-basis:在分配多余空间前,项目占据的主轴空间,默认为 auto,表示项目原来的大小

  • align-self:定义项目的对齐方式,覆盖 align-items 设置,默认为 auto,表示继承父元素设置

弹性盒子样式

属性说明CSS
flex复合属性,设置或检索弹性盒模型对象的子元素如何分配空间3
flex-flow复合属性,设置或检索弹性盒模型对象的子元素排列方式3
align-content在弹性容器内的各项没有占用交叉轴上所有可用的空间时对齐容器内的各项(垂直)3
align-items定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式3
align-self定义flex子项单独在侧轴(纵轴)方向上的对齐方式3
justify-content设置或检索弹性盒子元素在主轴(横轴)方向上的对齐方式3
order设置或检索弹性盒模型对象的子元素出现的順序3
<!doctype html>
<html>
<head>
    <style>
    	div.main {
            width: 330px;
            height: 200px;
            display: flex;
        }
        div.item { flex: 1; }
        div.item:nth-child(1) { background-color: coral; }
        div.item:nth-child(2) { background-color: lightblue; }
        div.item:nth-child(3) { background-color: lightgreen; }
    </style>
</head>
<body>
	<div class="main">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
</body>
</html>
<!doctype html>
<html>
<head>
    <style>
    	div.main {
            width: 330px;
            height: 200px;
            display: flex;
			align-items: center;
        }
        div.item { flex: 1; }
        div.item:nth-child(1) { background-color: coral; }
        div.item:nth-child(2) { background-color: lightblue; }
        div.item:nth-child(3) { background-color: lightgreen; }
    </style>
</head>
<body>
	<div class="main">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
</body>
</html>

多列样式

属性说明CSS
column-fill指定如何填充列(仅火狐浏览器支持)3
column-gap指定列之间的差距3
column-rule对于设置所有column-rule-*属性的简写属性3
column-span指定元素应该跨越多少列3
columns缩写属性设置列宽和列数3
<!doctype html>
<html>
<head>
    <style>
    	div.main {
            columns:100px 3;
        }
    </style>
</head>
<body>
	<div class="main">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius.</div>
</body>
</html>
<!doctype html>
<html>
<head>
    <style>
    	div.main {
            columns:100px 3;
            column-gap:40px;
        }
        div.main h2 {
            column-span: all;
        }
    </style>
</head>
<body>
	<div class="main">
        <h2>英国维斯米斯特教堂碑文</h2>
        Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
        Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius.
    </div>
</body>
</html>
<!doctype html>
<html>
<head>
    <style>
    	div.main {
            columns:100px 3;
            column-gap:40px;
            column-rule:4px outset #ff00ff;
        }
    </style>
</head>
<body>
	<div class="main">Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan et iusto odio dignissim qui blandit praesent luptatum zzril delenit augue duis dolore te feugait nulla facilisi. Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming id quod mazim placerat facer possim assum. Typi non habent claritatem insitam; est usus legentis in iis qui facit eorum claritatem. Investigationes demonstraverunt lectores legere me lius quod ii legunt saepius.</div>
</body>
</html>

圆角样式

允许你为元素添加圆角边框

语法:border-radius: 1-4 length|%; 1-4 表示可取1-4个值

顺序:左上角、右上角、右下角、左下角(顺时针方向)

拆分:border-top-left-radius、border-top-right-radius、border-bottom-right-radius、border-bottom-left-radius

  • 一个值:四个圆角值详情哦那个
  • 两个值:第一个值为左上角与右下角,第二个值为右上角与左下角
  • 三个值:第一个值为左上角, 第二个值为右上角和左下角,第三个值为右下角
  • 四个值:第一个值为左上角,第二个值为右上角,第三个值为右下角,第四个值为左下角
border-radius: 20px;					-- 表示左上角、右上角、右下角、左下角圆角都为 20px
border-radius: 10px 20px;				-- 表示左上角、右下角圆角为 10px,右上角、左下角圆角为 20px
border-radius: 10px 20px 5px;			-- 表示左上角圆角为 10px,右上角、左下角圆角都为 20px,右下角圆角为 5px
border-radius: 10px 20px 5px 10px;		-- 表示左上角圆角为 10px,右上角圆角为 20px,右下角圆角为 5px,左下角圆角为 10px

border-radius: 20%;						-- 表示左上角、右上角、右下角、左下角圆角都为 20%
border-radius: 10% 20%;					-- 表示左上角、右下角圆角为 10%,右上角、左下角圆角为 20%
border-radius: 10% 20% 5%;				-- 表示左上角圆角为 10%,右上角、左下角圆角都为 20%,右下角圆角为 5%
border-radius: 10% 20% 5% 10%;			-- 表示左上角圆角为 10%,右上角圆角为 20%,右下角圆角为 5%,左下角圆角为 10%
<!doctype html>
<html>
<head>
    <style>
        div {
            width: 300px;
            height: 200px;
        }
        .border1 {
            border-radius: 20px;
        }
        .border2 {
            border-radius: 10px 20px;
        }
        .border3 {
            border-radius: 10px 20px 5px;
        }
        .border4 {
            border-radius: 10px 20px 5px 10px;
        }
        .border5 {
            border-radius: 20%;
        }
        .border6 {
            border-radius: 10% 20%;
        }
        .border7 {
            border-radius: 10% 20% 5%;
        }
        .border8 {
            border-radius: 10% 20% 5% 10%;
        }
    </style>
</head>
<body>
    <div class="border1"></div>
    <div class="border2"></div>
    <div class="border3"></div>
    <div class="border4"></div>
    <div class="border5"></div>
    <div class="border6"></div>
    <div class="border7"></div>
    <div class="border8"></div>
</body>
</html>

边界图片样式

设置或检索对象的边框样式使用图像来填充

语法:border-image: source slice width outset repeat;

描述
border-image-source用于指定要用于绘制边框的图像的位置
border-image-slice图像边界向内偏移
border-image-width图像边界的宽度
border-image-outset用于指定在边框外部绘制 border-image-area 的量
border-image-repeat这个例子演示了如何创建一个border-image 属性的按钮
<!doctype html>
<html>
<head>
    <style>
    	div {
            width: 300px;
            height: 200px;
        }
        div.main1 {
            background-color:lightgrey;
            border:30px solid transparent;
            border-image: url('https://www.runoob.com/images/border.png');
            border-image-slice: 30 30 30 30;
            border-image-width: 1 1 1 1;
            border-image-outset: 0;
            border-image-repeat:stretch;
        }

        div.main2 {
            background-color:lightgrey;
            border:30px solid transparent;
            border-image: url('https://www.runoob.com/images/border.png');
            border-image-slice: 30 30 30 30;
            border-image-width: 1 1 1 1;
            border-image-outset: 0;
            border-image-repeat:repeat;
        }

        div.main3 {
            background-color:lightgrey;
            border:30px solid transparent;
            border-image: url('https://www.runoob.com/images/border.png');
            border-image-slice: 30 30 30 30;
            border-image-width: 1 1 1 1;
            border-image-outset: 0;
            border-image-repeat:round;
        }

        div.main4 {
            background-color:lightgrey;
            border:30px solid transparent;
            border-image: url('https://www.runoob.com/images/border.png');
            border-image-slice: 30 30 30 30;
            border-image-width: 1 1 1 1;
            border-image-outset: 0;
            border-image-repeat:initial;
        }
    </style>
</head>
<body>
    <div class="main1"></div>
    <div class="main2"></div>
    <div class="main3"></div>
    <div class="main4"></div>
</body>
</html>

背景裁切样式

属性描述CSS
background-clip指定对象的背景图像向外裁剪的区域3
background-originS设置或检索对象的背景图像计算 background-position 时的参考原点(位置)3
background-size检索或设置对象的背景图像的尺寸大小3
  • background-size 指定背景图像的大小
  • background-origin 属性指定了背景图像的位置区域
  • background-clip 背景剪裁属性是从指定位置开始绘制
  • background-image 可设置多张图片,哪个在前哪个就在上层
  • background-position 可对应多个背景图设置位置
  • background-repeat 可对应多个背景图设置填充方式

外观样式

属性说明CSS
appearance定义元素的外观样式3
box-sizing允许您为了适应区域以某种方式定义某些元素3
icon为元素指定图标(暂无浏览器支持)3
nav-down指定用户按向下键时向下导航的位置(暂无浏览器支持)3
nav-index指定导航(tab)顺序(暂无浏览器支持)3
nav-left指定用户按向左键时向左导航的位置(暂无浏览器支持)3
nav-right指定用户按向右键时向右导航的位置(暂无浏览器支持)3
nav-up指定用户按向上键时向上导航的位置(暂无浏览器支持)3
outline-offset设置轮廓框架在 border 边缘外的偏移(IE 浏览器不支持)3
resize定义元素是否可以改变大小3
<!doctype html>
<html>
<head>
    <style>
    	div.main {
            width: 300px;
            height: 200px;
            padding: 20px;
            background-color: pink;
            box-sizing: border-box;
        }
    </style>
</head>
<body>
	<div class="main"></div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值