CSS 基础

发布于:2025-07-28 ⋅ 阅读:(11) ⋅ 点赞:(0)

基本概念

  • CSS(Cascading Style Sheet)级联样式表,用来控制页面布局与页面样式
  • 可以修改颜色、大小、位置、层级、动画等等
  • CSS3 中多种颜色模式/阴影/边框圆角/渐变/动画/过渡/响应式/弹性布局/多列布局都是 CSS3 的新特性

CSS 的三种位置

行内样式

写在 HTML 元素的开始标签里,只对当前行生效
特点:只能给一个元素使用,复用性差

<h4 style="color:red;">我是标题</h4>

内部样式

写在 head 标签中的 style 标签里,对当前页面所有元素生效
特点:随着当前页面加载而加载,加载速度快,首页常用

<head>
  <style>
     /* 标签名选择器 */
     h1 {
          color:red;
        }
  </style>
</head>

外部样式

写在独立的.css 文件中,在html 文件中引入外部的.css 文件

  • rel:必写属性,表示引入文件是什么类型 stylesheet 样式表
  • href:要引入 CSS 文件的路径
    特点:可以被多个页面共享,复用性强,常用于二三级页面
<html>
    <head>
        <link rel="stylesheet" href="01.css">
    </head>
</html>

优先级

  • 渲染同一个元素,样式不同会叠加生效,比如背景色和文字颜色会同时生效
  • 如果渲染的样式相同,按照如下优先级排序:
    !important > 行内样式>(内部样式=外部样式)>浏览器自带的样式
  • 内部样式与外部样式优先级一样,后写的样式会把之前的样式覆盖掉

选择器

  • 标签名选择器:选中指定标签的所有元素,写法: 标签名 { CSS 样式 }
  • 类选择器:选中指定的一类元素,写法: .class值 { CSS 样式 }
  • id 选择器:选中指定的一个元素,写法: #id值 { CSS 样式 }
  • 伪类选择器:
    • 选中超链接未被访问时时的状态,写法:a:link{ CSS 样式 }
    • 选中超链接已被访问时的状态,写法:a:visited{ CSS 样式 }
    • 选中元素的悬停状态(非超链接独有),写法: div:hover{ CSS 样式 }
    • 选中超链接激活时的状态,写法:a:active{ CSS 样式 }
    • 注意:a 标签伪类的顺序: :link :visited :hover :active
  • 并列选择器:选中满足所有选择器条件的元素,是"与"的关系,写法: #d1:hover { CSS 样式 }
  • 群组选择器:选中多种不同的元素,是"或"的关系,,写法: #id 值,.class 值,标签名{ CSS 样式 }
  • 通用选择器:选中所有元素,写法: *{ CSS 样式 }
  • 后代选择器:选中祖先元素中包含的所有后代元素,写法: div span{ CSS 样式 }
  • 子代选择器:选中父元素中下的直接子元素,写法: div>span{ CSS 样式 }
<head>
    <meta charset="UTF-8">
    <title>02_CSS选择器</title>
    <style>
        /* 1.标签名选择器:选中此标签名对应的所有元素 */
        h4 {
            color: red;
        }

        /* 2.id选择器:选中指定id值的唯一一个元素 */
        #d1 {
            width: 100px;
            height: 100px;
            background-color: aqua;
        }
        /* 3.类选择器  */
        .msg {
            color: white;
        }
        .error {
            background-color: red;
        }
        .success {
            background-color: green;
        }
        /* 4.伪类选择器:选中元素的某种状态 */
        a:link { /* 超链接未被访问过的状态 */
            color: gray;
        }
        a:visited { /* 超链接已经被访问过的状态 */
            color: green;
        }
        a:hover { /* 元素悬停的状态 */
            color: orange;
        }
        a:active { /* 超链接激活时的状态 */
            color: red;
        }
        /* 5.并列选择器:必须紧挨在一起写,表示同时满足两个选择器条件才会生效,是"与"的关系 */
        #d1:hover {/* 元素悬停的状态 */
            background-color: yellow;
        }
        /* 6.群组选择器:用逗号隔开,只要满足其中一个选择器的条件就会生效,是"或"的关系 */
        h4,#d1,.error {
            border: 5px solid black;
        }
        /*7.后代选择器:选中包含在此元素中的所有后代元素(子 孙 重孙...)*/
        #d2 span {
            background-color: purple;
        }
        /*8.子代选择器:选中当前元素的直接子元素,不会继续向下选择 */
        #d2>div>p>span {
            color: white;
        }
    </style>
</head>

常用值

  1. px:像素,屏幕上最小的一个发光点
  2. viewport 视口 用来展示页面内容的完整窗口
    • height: 100vh;100% viewport height 撑满全屏高
    • width: 100vw; 100% viewport width 撑满全屏宽
  3. 颜色表示法:
    • 单词表示,如:red
    • 十六进制表示法,如:color:#0000FF;
      • 前两位表示红色,中间两位表示绿色,最后两位表示蓝色
    • 简写的十六进制表示法,如:color:#00F;
      • 三种颜色两位数字都相同,才可以简写
    • rgb(red,green,blue)表示法,如:color:rgb(0,0,255);
      • 值的范围是 0~255
    • rgba(red,green, blue,alpha)表示法,如:color:rgba(0,0,255,0.5);
      • 不透明度,0 表示完全透明,1 表示完全不透明
        在这里插入图片描述

字体处理

color: 设置文字颜色
font-size :设置文字的大小

  • 谷歌浏览器默认字体大小 16px,最小 12px,低于 12px 也以 12px 显示

font-family:“幼圆”; 设置文字字体

  • 执行顺序是从前向后执行的
  • 字体名称要使用引号包裹
  • 商用字体要考虑到版权问题
  • 尽量少用奇怪的字体,因为客户可能会没有
    (字体文件在电脑 C 盘的“Fonts”文件夹中
    打开“计算机”->C 盘-> “Windows”-> “Fonts”即可看到所有已安装的字体)

text-decoration :设置文本修饰线

  • underline 下划线
  • none 去掉所有修饰线
  • line-through 添加一条删除线

line-height:设置文本行高

  • 称为行间距,指的是行与行文本之间的距离
  • 如果需要单行文字在元素内垂直居中,可以让行高为元素的高度即可

text-align :设置块级元素内文本的水平对齐方式

  • 对齐方式:left 左对齐 / center 居中对齐 / right 右对齐

text-shadow: 20px 20px 5px red;

  • 文本阴影:X 轴偏移量 Y 轴偏移量 羽化值 阴影颜色

font-weight:字重(字体粗细),可取值:

  • normal 400 正常体
  • lighter 300 细体
  • bold 600 粗体

font-style:italic; 文字倾斜效果

元素的显示模式

  • 块级元素:display:block;
    • 排列方式:按照书写的顺序,从上往下依次排列
    • 特点:独占一行,还可以设置宽高
    • 常见标签:div h1~h6 p form table ul ol li…
  • 行内元素:display:inline;
    • 排列方式:按照书写顺序从左往右依次排列
    • 特点:共占一行,不能设置宽高
    • 常见标签:span a i b s…
  • 行内块元素:display:inline-block;
    • 排列方式:按照书写顺序从左往右依次排列
    • 特点:共占一行,可以修改宽高
    • 常见标签:input button
  • 元素消失:display:none;
    • 特点:元素使用此方式消失后,不再占据页面(文档流)的布局空间

盒子模型

一个 HTML 元素,需要占用页面的布局空间,这个空间由以下几个部分组成:

  • content 内容区域 元素本身的大小
  • padding 内间距 元素内容与边框之间的距离
  • border 元素的边框
  • margin 外间距 元素与元素之间的距离
    涉及到四个方向 left 左 right 右 top 上 bottom 下
    在这里插入图片描述

外间距(margin)

  • 外间距的写法:

    • margin-bottom:50px;设置单侧外间距(top上 / right右 / bottom下/ left左)
    • margin:10px;四个方向都是 10px
    • margin:10px 20px;上下 10px 左右 20px
    • margin:10px 20px 30px;上 10px 左右 20px 下 30px
    • margin:10px 20px 30px 40px;上 10px 右 20px 下 30px 左 40px
    • margin: 0 auto;上下 0 左右居中
      块级元素左右外间距计算成等值,能实现水平居中效果
  • 规律:按照 上右下左 顺时针 依次赋值 没有的找对门

  • 外间距指的元素外部与其它元素之间的距离

    • 块级与行内块元素四个方向的外间距均生效
    • 行内元素的左右外间距可以用,上下外间距不生效
    • 父子贴边问题:给父元素加 BFC 结界 overflow:hidden;
      第 1 个子元素的上外间距与最后 1 个子元素的下外间距都会包裹在父元素范围之内
    • 相邻兄弟间在垂直方向上如果有重叠的外间距,取最大值显示

边框(border)

设置边框:border:1px solid #000; 粗细 线型 颜色
设置某一个方向的边框:border-top: 1px solid #000; 设置上边框的粗细 线型 颜色
去掉边框: border:none; 或者 border:0;
线型:solid 单实线 dashed 虚线 dotted 点状线 double 双实线…
边框圆角: border-radius: 100px;

  • 数值越大,角越圆
  • 边框圆角为正方形高度的一半,可以切圆形
  • 边框圆角为长方形高度的一半,可以切胶囊型

内间距(padding)

  • 内间距的写法:

    • padding-top: 50px; 设置单侧内间距(top 上/right 右/bottom 下/left 左)
    • padding:10px; 四个方向都是 10px
    • padding:10px 20px; 上下 10px 左右 20px
    • padding:10px 20px 30px; 上 10px 左右 20px 下 30px
    • padding:10px 20px 30px 40px; 上 10px 右 20px 下 30px 左 40px
  • 规律:按照 上右下左 顺时针 依次赋值 没有的找对门

  • 内间距指的是元素内容与边框之间的距离

    • 块级与行内块元素的四个方向的内间距均生效
    • 行内元素的左右内间距正常生效,但上下内间距不生效
  • 内间距使用场景

    让元素内部距离外层父级元素的边有点距离,主要为了美化,如:

    • 输入框的文字不要贴边显示
    • 文本卡片内容不要贴边显示

切换盒子模型计算方案

  • box-sizing: border-box;边框盒子
  • 效果:加内间距与边框都不会让元素变大,都算在元素设置的 width 与 height 中
    在这里插入图片描述

在这里插入图片描述

浮动

  • float:left; 左浮动,向父级元素的左侧边界靠拢
  • float:right; 右浮动,向父级元素右侧边界靠拢

浮动特点:

  1. 浮动布局可以让元素横向排列
  2. 浮动后的元素会释放原有的布局空间且不再支撑父元素的高度
  3. 如果一个父元素中所有的子元素都浮动了,父元素会高度坍塌(失高)

解决方案:给父元素设置 overflow:hidden;
会根据子元素浮动后的实际高度给父元素自动填充高度,解决失高问题

页面版心

版心指的是一般在页面中固定宽度且居中,用来显示页面主要内容的一块区域

.center 或 .container {
	width: 1000px;
	margin: 0 auto;
}

定位

静态定位(默认值) position:static

就是默认的布局,元素根据默认的显示模式排列(块级元素竖着排,行内/行内块元素横着排)

  • 使用其他定位属性后,可以让元素通过 top/bottom/left/right 四个属性移动
  • 层级 z-index:使用定位后,元素发生重叠时可以调整层级
    1. z-index 的值越大,层级越高,值大的元素会覆盖值小的元素
    2. 值为整数值,没有任何单位
    3. 默认值是 auto,可以看作是层级 0,z-index 还可以取负值

注意:静态定位不能使用上述属性

相对定位 position:relative

移动参照物:元素自己原来的位置

  1. 不会释放布局空间,还可以支撑父元素,不影响父级
  2. 与外间距 margin 的区别:margin 会影响其他元素,相对定位不会挤开兄弟元素,但可能会遮盖
  3. 常用于需要微调元素位置时使用

绝对定位 position:absolute

移动参照物:离自己最近的使用了非静态定位属性的上层元素
(会一路向上找,终点是 html 根元素)

  1. 绝对定位的元素会释放布局空间
  2. 小技巧:(子绝父相)子元素使用绝对定位,父级设置相对定位后可以变成子元素移动的参照物

固定定位 position:fixed

移动参照物:html 根元素(浏览器窗口)

  1. 固定定位也会释放布局空间
  2. 我们可以利用固定定位实现页面固定广告与撑满全屏的效果

布局方式总结

浮动布局
float:left/right
元素会释放布局空间
如果所有子元素都浮动,父元素会高度坍塌
浮动元素可以使用 margin 微调自己的位置
用途:可在页面中实现“两端对齐”或“横置”的效果
静态定位 (默认文档流布局)
position:static
块级元素从上往下依次排列
行内/行内块元素从左往右依次排列,一行放不下才换行
默认的静态定位元素都是紧密排列的,没有大的空隙和元素堆叠的现象
相对定位
position:relative
移动参照物:自己作为静态定位元素时原来的位置
不会释放布局空间
可以使用 top bottom left right 调整自己的位置
可以使用 z-index 调整层级
用途:微调自己的位置,但不会挤开其它元素
用途:为使用绝对定位的后代元素提供定位参照物
绝对定位
position:absolute
移动参照物:离自己最近的使用了非 static 定位的上级元素,终点是 html 根元素
会释放布局空间
可以使用 top bottom left right 调整自己的位置
可以使用 z-index 调整层级
用途:在页面上覆盖到其它元素上方的指定位置
固定定位
position:fixed
移动参照物:html 根元素
会释放布局空间
可以使用 top bottom left right 调整自己的位置
可以使用 z-index 调整层级
用途:制作覆盖整个窗口的遮罩层、或制作页面固定广告

元素的放大与过渡

  • transform: scale(n):变换(倍数) 变换至原来的n倍
    • n>1放大n倍
    • n=1 大小不变
    • 0<n<1缩小n倍
    • 0缩小到看不见
  • transform: rotate(720deg):元素旋转,单位deg,正数顺时针转,多个值使用空格隔开
  • transition: ns:添加过渡,让变换有一点过渡时间,一瞬间完成变换太过太突兀
  • 注意:过渡要加给div,而不是悬停,否则离开 div 时没有过渡,效果不好
div {
	width: 100px;
	height: 100px;
	background-color: #f00;
	margin: 100px auto 0;
	 /* 过渡时间必须写在元素本身,否则不悬停时没有过渡效果 */
	transition: 2s;
}
div:hover {
	background-color: #0aa1ed;
	border-radius: 50px;
	transform:scale(2) rotate(720deg);
}

溢出处理

元素溢出

如果内容超出了预设的区域,我们称之为“溢出”,溢出一般有以下几种处理方式

  • overflow: visible; 默认值 溢出可见
  • overflow: hidden; 溢出隐藏,超出部分裁掉 可解决父子贴边问题与父元素失高问题
  • overflow: scroll; 两个方向都有滚动条
  • overflow: auto; 自动给溢出的方向设置滚动条

溢出文本替换为省略号

  • white-space: nowrap; 强制不换行
  • overflow: hidden; 溢出隐藏
  • text-overflow: ellipsis;溢出文本替换为省略号

CSS属性总结表

分类 属性名 作用 属性值 备注
文本处理 color 字体颜色 red rgb rgba hex 单词 rgb rgba 16进制
font-size 字体大小 16px 像素值
text-decoration 文本修饰线 line-through 删除线
underline 下划线
none 去除所有修饰线
line-height 行高 40px 像素值
text-align 文本水平对齐方式 center 水平居中对齐
left 水平左对齐
right 水平右对齐
font-family 字体型号 "微软雅黑","宋体","华文彩云" 从前往后依次取值,可以写多个值
font-weight 字体字重 normal 400 正常体
lighter 300 细体
bold 600 粗体
white-space 文本溢出换成省略号 nowrap 强制不换行
overflow hidden 溢出部分隐藏
text-overflow ellipsis 超出的文本替换成省略号
背景处理 background-color 背景颜色 red rgb rgba 单词 rgb rgba 16进制
background-image 背景图 url(图片路径) 所在区域需要设置宽高
background-image 渐变效果 linear-gradient(颜色1, 颜色2, 颜色3...) 只有颜色渐变
linear-gradient(角度值, 颜色1, 颜色2...) 带角度的渐变
background-size 背景图尺寸 600px 300px
100% 100%
像素值;
百分比值需注意图片失真问题
background-position 背景图定位 left top 默认左上角
先说左右,再说上下
X轴:left左 center中 right右
Y轴:top上 center中 bottom下
150px -50px 像素值
向右150px 向上50px
background-repeat 背景图重复方式 repeat 默认值,x轴y轴都重复
repeat-x 只允许x轴重复
repeat-y 只允许y轴重复
no-repeat 不允许重复
盒子模型 box-sizing 盒子模型计算方案 content-box 内容盒子(默认值)
border-box 边框盒子(怪异盒子)
padding 内间距 10px 上右下左四个方向都是10
10px 20px 上下:10 左右:20
10px 20px 30px 上10 左右20 下30
10px 20px 30px 40px 上10 右20 下30 左 40
padding-top 10px 上内间距
padding-right 10px 右内间距
padding-bottom 10px 下内间距
padding-left 10px 左内间距
margin 外间距 10px 上右下左四个方向都是10
10px 20px 上下:10 左右:20
10px 20px 30px 上10 左右20 下30
10px 20px 30px 40px 上10 右20 下30 左 40
margin-top 10px 上外间距
margin-right 10px 右外间距
margin-bottom 10px 下外间距
margin-left 10px 左外间距
border 四个方向的边框 1px solid #000 综合设置:粗细 线型 颜色
border-top 上边框
border-right 右边框
border-bottom 下边框
border-left 左边框
border-width 边框宽度 1px 设置四个方向边框的粗细
border-style 边框线型 solid单实线 dashed虚线 dotted点状 double双实线
border-color 边框颜色 red rgb rgba hex 单词 rgb rgba 16进制
border-{top}-{color} {上}边框的{颜色} 设置单个方向边框的单个属性:粗细 线型 颜色
大小处理 width 宽度 100px 100% 像素值 百分比
height 高度 100px 101% 像素值 百分比
显示模式 display 块级元素 block 以块级元素的形式显示
行内元素 inline 以行内元素的形式显示
行内块元素 inline-block 以行内块元素的形式显示
元素消失 none 元素消失并释放布局空间
隐藏与显示 background-color 背景色设为透明色 background-color: transparent 只影响背景颜色,不会释放布局空间
background-color: rgba(0,0,0,0)
transform:scale(0) 设置缩放为0 -- 让元素缩小到看不见
opacity 透明度 0完全透明 1完全不透明 0.5半透明 所有内容一起透明,不释放布局空间
display 修改显示模式 none 元素消失并释放布局空间
溢出控制 overflow 控制溢出情况 visible 默认值,溢出可见
hidden 溢出隐藏,溢出的部分会被裁剪
scroll 无论是否需要,侧边与下边都有滚动条
auto 自动添加滚动条,需要的时候再加
修饰与美化 list-style 列表样式 none 去掉列表项前标识符
border-radius 边框圆角 5px 或 10% 像素值或百分比,四个角弧度统一
10px 30px 左上右下 右上左下 对角线
10px 20px 30px 左上 右上左下 右下
10px 20px 30px 40px 从左上角开始顺时针给四个角设置
box-shadow 元素阴影 值1: 5px 必写,阴影的X轴偏移量,默认向右移动
值2: 5px 必写,阴影的Y轴偏移量,默认向下移动
值3: 5px 羽化值,越大阴影越虚化,默认0,不许负值
值4: 5px 扩展半径,越大阴影范围越大,默认0
值5: #aaa 阴影颜色
浮动 float 左浮动 left 向父级元素的左侧边界靠拢
右浮动 right 向父级元素的右侧边界靠拢
定位 position 定位方式 static 静态定位(默认值),原来的文档流布局
relative 相对定位,参照自己原来的位置
absolute 绝对定位,参照最近的非静态祖先元素
fixed 固定定位,参照根元素html
z-index 调整层级 整数值,无单位,可以有负数 数字越大,层级越靠上
top/right/bottom/left 移动方向 像素值 百分比 距离参照物移动的距离,负值反方向
过渡 transition 过渡简写属性 最简写执行时间就行,其他都可不写 执行时间在前,延迟时间在后,其他没顺序
变换 transform 旋转 rotate(30deg) 元素在二维平面,绕页面中心点旋转
transform 缩放 scale() 同时负责X轴与Y轴的缩放

Flex 弹性布局

简述

flex布局也叫做flexbox(弹性盒),针对于单行多列布局效果,有很强大的布局分配能力
在没有flex之前,一般使用流式布局、浮动布局、定位布局等等

flex布局的优势:

  • 具有很多的自带属性来完成分配空间的效果,不需要计算,分配合理,新版本的浏览器基本都兼容

flex布局的劣势:

  • 不太适合多行多列,复杂的嵌套效果等,最终的布局效果可能不尽如人意
  • 去查京东与王者荣耀首页 display:flex ,发现二者都没有用到弹性布局,不是大厂不用弹性,而是复杂一些的页面不太适合用弹性,比如嵌套较多的页面

Flex弹性盒的指定

flex一般是父子关系,父元素称之为“父容器”,需要给父容器设置 display:flex 属性
父容器使用了display:flex 后,就可以在整个容器使用flex的相关属性了

注意:

  1. flex自带了很多属性,我们要多多学习才能达到自己预期的效果
  2. 子元素需要依赖容器元素,我们控制子元素的排列不再依靠子元素自己float
  3. 设置父元素为弹性盒,子元素的float将失效
  4. 切记不要把flex与浮动布局或定位布局一起使用
  5. 使用了display:flex;其中的子元素会"块状化",即子元素的display值会变为block

Flex的容器和项目

  • 容器:使用display:flex;的父级元素,注意:后续在父容器中使用的相关属性属于"容器属性"
  • 容器中的第一层子元素,受控于容器的元素叫"项目",注意:后续在子项目中使用的相关属性属于"项目属性"

Flex 容器属性

主轴的排列方向

主轴的行模式与列模式

主轴有水平的,也有垂直的,水平的有两个方向:向右123 向左321
竖直的有两个方向:向下123 向上321(比如评论就需要把新数据显示在最上面)

注意:

  • 列模式中的项目是竖向排列的,这只是通过弹性布局里的属性将元素变成了竖向排列,不是文档流式布局
  • 与主轴相互垂直的轴叫做交叉轴
主轴的排序

默认的主轴的排序就是行模式从左向右排序

  • flex-direction:row; 默认值
  • flex-direction:row-reverse; 行模式的反向排序
  • flex-direction:column; 列模式
  • flex-direction:column-reverse; 列模式的反向排序
项目的换行

flex-wrap 控制项目在容器中是否换行显示,默认不换行
当容器空间不足时,项目会等比例压缩

  • flex-wrap:nowrap; 默认值,不换行 (1234567)
  • flex-wrap:wrap; 换行,一行显示不下到下一行显示 (12345 67)
  • flex-wrap:wrap-reverse; 换行,并且行数反向排列 (67 12345)

主轴和交叉轴

在我们使用flex布局时,要想到两条轴线
主轴: 先要看是行模式还是列模式
行模式的主轴是水平方向的,列模式的主轴是垂直方向的
交叉轴:永远垂直于主轴的轴线

主轴上的对齐方式

justify-content 定义项目在主轴上的对齐方式
注意:需要区别行模式和列模式,在渲染之前,会先找到项目的排列方式再做渲染

  • justify-content:start; 主轴的起点对齐
  • justify-content:end; 主轴的终点对齐
  • justify-content: center; 主轴的居中对齐
  • justify-content: space-between; 主轴两端对齐
    每行首个元素贴容器起点,每行最后一个元素贴容器终点,其它剩余空间均分
  • justify-content: space-around; 主轴环绕对齐
    均匀排列每个元素,每个元素周围分配相等的空间,若遇到相邻元素,就成了两臂间隔
  • justify-content: space-evenly; 主轴公平对齐
    均匀排列每个元素,每个元素之间的间隔等距,均分所有剩余空间

单行交叉轴的对齐方式

align-items 指的是项目在交叉轴对齐的方式
注意:交叉轴方向上要有剩余空间,优先考虑已知项目数量的布局
项目数量位置就无法给容器设置高度,进而无法确定交叉轴方向有空余的空间
交叉轴的使用前提:父容器元素有剩余高度/宽度

  • align-items:flex-start; 交叉轴的起点对齐
  • align-items:flex-end; 交叉轴的终点对齐
  • align-items:center; 交叉轴的居中对齐

多行的交叉轴对齐

align-content 主轴方向上有多行内容,需要在交叉轴方向上分配布局空间
注意:想要使用此属性,需要有换行才能有多行内容,并且在交叉轴方向有剩余空间

  • align-content: flex-start; 交叉轴起点对齐
  • align-content: flex-end; 交叉轴终点对齐
  • align-content: center; 交叉轴居中对齐
  • align-content: space-around; 交叉轴环绕对齐
  • align-content: space-between; 交叉轴两端对齐
  • align-content: space-evenly; 交叉轴公平对齐

项目属性

项目的排序规则

  • 使用属性order对项目进行排序
  • order的默认值为0,值为没有单位的整数,可以为负数,数字越小,该项目排序越靠前,数字越大,该项目排序越靠后

项目的增长规则

  • flex-grow 用于规定项目在 flex 容器中分配容器剩余空间的比例
  • 注意:容器一定要大于所有项目长度之和,要有剩余空间!负值无效!
  • 默认值:0 当父容器中有剩余空间时,项目也默认不会放大
  • 若设置:1 当父容器中有剩余空间时,会自动放大占有比例
  • 如果此时没有给其它项目设置此属性,那本项目将占有父容器的所有剩余空间
  • 若设置:n 当父容器中有剩余空间,会按照1的n倍放大占有比例
  • 公式:所有元素的flex-grow数值相加,每个项目再按照自己的数值取按比例分总数

项目的收缩规则

  • flex-shrink 用于指定项目在父容器中的缩小比例
  • 默认值:1 当父容器空间不足时,会默认等比例缩小该项目
  • 若设置:0 当父容器空间不足时,该项目不会缩小
  • 注意:父容器的长度要小于项目长度之和,也就是说父容器的空间不足才会压缩;项目不可以换行,项目才会被压缩,不允许有负值!
  • 公式:压缩的尺寸是所有项目缩小系数之和,之后再按照比重重新分配
    如:第4个元素的 flex-shrink:2,所有项目1+1+1+2+1+1=7,总长度缩小了70px
    那每个项目缩小的长度为:10px+10px+10px+20px+10px+10px=70px
    重点不是算压缩了多少具体的数值,而是要知道所有元素的压缩比例
    如果某个项目的 flex-shrink:0,表示该元素不进行压缩,本容器中的剩余元素按比例压缩

项目的初始尺寸

  • flex-basis 用于指定项目在主轴方向上的大小,默认值auto
  • 设置该属性值之后,原来主轴方向上的长度会失效
    比如:在行模式情况下,设置了flex-basis,项目的宽度会失效;在列模式情况下,设置了flex-basis,项目的高度会失效
  • 为什么要有这个属性?
    因为用户可以随意调整浏览器窗口的大小,随着浏览器窗口大小的变化,弹性布局容器中项目很可能会从原来的行模式转变为列模式,行模式中的主轴是水平的,我们设置的是项目的宽度,列模式的主轴是竖直的,我们设置的是项目的高度,那如果项目自己的宽高本身就不一样,切换模式就会改变项目的大小
    为了防止这个问题,我们可以设置一个项目的初始尺寸,也就是主轴方向上的大小是固定的,不管是行模式还是列模式都使用此大小,项目的大小就不会改变了

项目的简写属性

flex有三个属性,分别是:放大属性 缩小属性 主轴方向长度
flex:0 1 200px; 放大属性,缩小属性,主轴方向项目长度为200px
常用写法解释:

  • flex: 1 等价于flex-grow:1 经常用于自适应布局,内容区域会自动放大占满整个空间。
  • flex: 0 0 auto 不放大 不缩小 长度等于内容长度
  • flex: 0 0 500px 不放大 不缩小 长度等于设置的主轴项目尺寸500px
  • flex: 1 1 auto 会放大 会缩小,项目会根据剩余空间自适应
  • flex: 0 1 500px 有剩余空间也不放大,空间不足可以缩小,长度为主轴项目尺寸500px
  • flex: 1 0 auto 会放大 不缩小,长度为项目长度

Flex 练习小游戏

练习: 小游戏


网站公告

今日签到

点亮在社区的每一天
去签到