说起 HTML,这其实是个非常单纯的家伙,他只关注内容的语义。比如 h1标签 表明这是一个大标题,p标签 表明这是一个段落,img标签 表明这儿有一个图片,a标签 表示此处有链接。
很早的时候,世界上的网站虽然很多,但是他们都有一个共同的特点:丑。
虽然 HTML 可以做简单的样式,但是带来的是无尽的臃肿和繁琐
CSS 是 层叠样式表 ( Cascading Style Sheets ) 的简称.
有时我们也会称之为 CSS 样式表或级联样式表。
CSS 也是一种标记语言
CSS 主要用于设置 HTML 页面中的文本内容(字体、大小、对齐方式等)、图片的外形(宽高、边框样式、边距等)以及版面的布局和外观显示样式。
CSS 让我们的网页更加丰富多彩,布局更加灵活自如。简单理解:CSS 可以美化 HTML , 让 HTML 更漂亮,让页面布局更简单。
CSS 最大价值: 由 HTML 专注去做结构呈现,样式交给 CSS,即 结构 ( HTML ) 与样式( CSS ) 相分离。
CSS 规则由两个主要的部分构成:选择器以及一条或多条声明。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgYqCaRn-1635408416987)(https://i.loli.net/2021/09/28/uCJcKqofZjBMOAW.png)]
选择器 是用于指定 CSS 样式的 HTML标签,花括号内是对该对象设置的具体样式
属性和属性值以“键值对”的形式出现
属性是对指定的对象设置的样式属性,例如字体大小、文本颜色等
属性和属性值之间用英文“ : ”分开
多个“键值对”之间用英文“ ; ”进行区分
选择器 {
属性:属性值;
属性:属性值;
属性:属性值;
...
}
选择器 {
布局定位属性
display
position
float
visibility
overflow
z-index
大小、宽高、边框
width
height
margin
padding
border
background
文字
font: font-style font-weight font-size/line-height font-family;
color(在没有透明度的情况下,最好用16进制)
text-align
vertical-align
line-height
text-decoration
white-sapce
其他
border-radius
box-shadow
text-shadow
transform
animation
}
样式单独写到CSS 文件中,之后把CSS文件引入到 HTML 页面中使用
新建一个后缀名为 .css 的样式文件,把所有 CSS 代码都放入此文件中。
在 HTML 页面中,使用 link 标签引入这个文件。
<link rel="stylesheet" href="css文件路径">
使用外部样式表设定 CSS,通常也被称为外链式或链接式引入,这种方式是__开发中常用的方式__
内部样式表(内嵌样式表)是写到html页面内部. 是将所有的 CSS 代码抽取出来,单独放到一个 style 标签中。
在 head 标签里面创建 style 标签。
<html>
<head>
<meta charset="utf-8">
<title>title>
<style type="text/css">
选择器 {
属性:属性值;
属性:属性值;
属性:属性值;
...
}
style>
head>
<body>
body>
html>
使用内部样式表设定 CSS,通常也被称为嵌入式引入,这种方式是__练习时常用的方式__。
行内样式表(内联样式表)是在元素标签内部的 style 属性中设定 CSS 样式。适合于__修改简单样式__。
<html>
<head>
<meta charset="utf-8">
<title>title>
head>
<body>
<h1 style="属性: 属性值;属性:属性值;...">h1>
body>
html>
非常不推荐
在 CSS 中,可以根据选择器的类型把选择器分为 基础选择器 和 复合选择器 。
基础选择器是由 单个选择器 组成的
基础选择器又包括:标签选择器、类选择器、id 选择器和通配符选择器
标签选择器(元素选择器)是指用 HTML 标签名称作为选择器,按标签名称分类,为页面中某一类标签指定统一的 CSS 样式。
标签名{
属性1: 属性值1;
属性2: 属性值2;
属性3: 属性值3;
...
}
作用:标签选择器可以把某一类标签全部选择出来,比如所有的 div 标签和所有的 span 标签。
优点:能快速为页面中同类型的标签统一设置样式。
缺点:不能设计差异化样式,只能选择全部的当前标签。
类选择器是指用 标签类名(class属性值) 作为选择器,按类名分类。
类选择器使用“.”(英文点号)进行标识,后面紧跟类名。
.类名 {
属性: 属性值;
...
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EKEEF6OQ-1635408416999)(https://i.loli.net/2021/09/28/W5rivSZzdQpFgPU.jpg)]
id 选择器是指用标签id名作为选择器。
CSS 中 id 选择器以“#" 来定义,后面紧跟id名。
#id名 {
属性1: 属性值1;
...
}
在 CSS 中,通配符选择器使用“ * ”定义,它表示选取页面中所有元素(标签)。
* { 属性1: 属性值1; ...}
基础选择器 | 作用 | 特点 | 使用情况 | 语法 |
---|---|---|---|---|
标签选择器 | 选出所有相同的标签 | 不能差异化选择 | 较多 | 标签名 { 属性:属性值;…} |
类选择器 | 可以选出1个或多个标签 | 可以根据需求选择 | 非常多 | .类名 { 属性:属性值; } |
id选择器 | 一次只能选择1个标签 | id属性只能在每个html文档出现一次 | 一般搭配js使用 | #id名 { 属性:属性值; } |
通配符选择器 | 选择所有的标签 | 选择所有的标签 | 特殊情况使用 | * { 属性:属性值; } |
复合选择器可以更准确、更高效的选择目标元素(标签)
复合选择器是由两个或多个基础选择器,通过不同的方式组合而成的
常用的复合选择器包括:后代选择器、子选择器、并集选择器、伪类选择器等等
后代选择器 又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在
后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。
元素1 元素2 { 样式声明;}
元素1 和 元素2 中间用 空格 隔开
元素1 是父级,元素2 是子级,最终选择的是元素2
元素2 可以是儿子,也可以是孙子等,只要是 元素1 的 后代 即可
元素1 和 元素2 可以是任意基础选择器
==子元素选择器(子选择器)==只能选择作为某元素的 最近一级子元素。简单理解就是选亲儿子元素.
父元素 > 子元素 { 样式声明;}
并集选择器可以选择多组标签, 同时为他们定义相同的样式。通常用于集体声明。
并集选择器是各选择器通过 英文逗号 , 连接而成,任何形式的选择器都可以作为并集选择器的一部分。
元素1,元素2 { 样式声明 }
伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,或选择第1个,第n个元素。
伪类选择器书写最大的特点是用冒号(:)表示,比如 :hover 、 :first-child 。
因为伪类选择器很多,比如有链接伪类、结构伪类等
链接伪类选择器
选择器 | 作用 | 特征 |
---|---|---|
:link | 未访问的链接 | 通常用于选择链接 a |
:visited | 访问后的链接 | 通常用于选择链接 a |
:hover | 鼠标移入元素时 | 通常用于选择链接 a |
:active | 鼠标点击元素时 | 通常用于选择链接 a |
:focus | 元素获取到焦点时 | 一般情况 input 类表单元素才能获取 |
:before | 元素的第一个子元素 | 可以用于解决外边距塌陷 |
:after | 元素的最后一个子元素 | 可以用于清除浮动 |
选择符 | 简介 |
---|---|
div[class] | 选择具有class属性的div元素 |
div[class=“box”] | 选择具有class属性且属性值为box的div元素 |
div[class^=“box”] | 选择具有class属性且属性值以box开头的div元素 |
div[class$=“box”] | 选择具有class属性且属性值以box结尾的div元素 |
div[class*=“box”] | 选择具有class属性且属性值中含有box的div元素 |
选择器 | 简介 |
---|---|
div:first-child | 匹配父元素中第一个子元素 |
div:last-child | 匹配父元素中最后一个子元素 |
div:nth-child(n) | 匹配父元素中第n个子元素,n可以是数字、关键字、公式(从0开始计算) |
div:first-of-type | 指定类型div的第一个 |
div:last-of-type | 指定类型div的最后一个 |
div:nth-of-type | 指定类型div的第n个 |
选择器 | 简介 |
---|---|
::before | 在元素内部的前面插入内容 |
::after | 在元素内部的后面插入内容 |
相同选择器给设置相同的样式,此时一个样式就会覆盖(层叠)另一个冲突的样式。层叠性主要解决样式冲突的问题
层叠性原则:
CSS中的继承:子标签会继承父标签的某些样式,如文本颜色和字号。(text-,font-,line-,color)
选择器 | 选择器权重 |
---|---|
继承/* | 0 0 0 0 |
元素选择器 | 0 0 0 1 |
类选择器,伪类选择器 | 0 0 1 0 |
ID选择器 | 0 1 0 0 |
行内样式 | 1 0 0 0 |
!important | 无穷大 |
CSS Fonts (字体)属性用于定义字体系列、大小、粗细、和文字样式(如斜体)。
CSS 使用 font-size 属性定义字体大小。
p { font-size: 20px; }
CSS 使用 font-weight 属性设置文本字体的粗细。
p { font-weight: bold;}
属性值 | 描述 |
---|---|
normal | 默认值(400) |
bold | 定义粗体(700) |
100-900 | 数值越大,字体越粗,不跟单位 |
CSS 使用 font-style 属性设置文本的风格。
p { font-style: normal;}
属性值 | 作用 |
---|---|
normal | 默认值 |
italic | 浏览器会显示斜体的字体样式 |
CSS 使用 font-family 属性定义文本的字体系列。
div {font-family: Arial,"Microsoft Yahei", "微软雅黑";}
可选值 | 说明 |
---|---|
serif | 衬线字体 |
sans-serif | 非衬线字体 |
monospace | 等宽字体 |
Microsoft YaHei | 微软雅黑 |
字体属性可以把以上文字样式综合来写, 这样可以更节约代码:
body { font: font-style font-weight font-size/line-height font-family; }
使用 font 属性时,必须按上面语法格式中的顺序书写,不能更换顺序,并且各个属性间以空格隔开
不需要设置的属性可以省略(取默认值),但必须保留 font-size 和 font-family 属性,否则 font 属性将不起作用
CSS Text(文本)属性可定义文本的外观,比如文本的颜色、对齐文本、装饰文本、文本缩进、行间距等。
color 属性用于定义文本的颜色。
div { color: red;}
表示 | 属性值 |
---|---|
预定义的颜色值 | red,green,blue等 |
十六进制 | #ffffff,#333333等 |
RGB代码 | rgb(255,0,0)或rgb(100%,0%,0%) |
text-align 属性用于设置元素内文本内容的水平对齐方式。
div { text-align: center;}
属性值 | 解释 |
---|---|
left | 左对齐(默认值) |
right | 右对齐 |
center | 居中对齐 |
text-decoration 属性规定添加到文本的修饰。可以给文本添加下划线、删除线、上划线等。
div { text-decoration:underline; }
属性值 | 描述 |
---|---|
none | 默认,没有装饰(最常用) |
underline | 下划线,链接 a 自带下划线 |
overline | 上滑线(几乎不用) |
line-through | 删除线(不常用) |
text-indent 属性用来指定文本的第一行的缩进,通常是将段落的首行缩进。
div { text-indent: 2em;}
line-height 属性用于设置行间的距离(行高)。可以控制文字行与行之间的距离
行高也可以在font简写里面写为font-size的倍数
p { line-height: 26px;}
text-shadow 属性将阴影应用于文本。
text-shadow: h-shadow v-shadow blur color;
text-shadow: h-shadow v-shadow blur color;
值 | 描述 |
---|---|
h-shadow | 必需,阴影水平方向移动距离 |
v-shadow | 必需,阴影垂直方向移动距离 |
blur | 可选,模糊的距离(程度) |
color | 可选,阴影的颜色 |
text-overflow 属性指定当文本溢出包含它的元素,应该发生什么。
值 | 描述 |
---|---|
clip | 修建文本 |
ellipsis | 显示省略符号来代表被修剪的文本 |
string | 使用给定的字符串来代表被修剪的文本 |
属性 | 表示 | 注意点 |
---|---|---|
color | 文本颜色 | 通常用 十六进制 如#fff |
text-align | 文本对齐 | 可以设定文字水平对齐的方式 |
text-indent | 文本缩进 | 通常用于段落首行缩进2个字的距离 text-indent: 2em; |
text-decoration | 文本修饰 | 添加下划线 underline 取消下划线 none |
line-height | 行高 | 控制行与行之间的距离 |
CSS background(背景)属性可以可以给页面元素添加背景样式,如背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等。
background-color 属性定义了元素的背景颜色。
background-color:颜色值;
一般情况下元素背景颜色默认值是 transparent(透明),我们也可以手动指定背景颜色为透明色。
background-color:transparent;
background-image 属性描述了元素的背景图像。实际开发常见于 logo 或者一些装饰性的小图片或者是超
大的背景图片, 优点是非常便于控制位置. (精灵图也是一种运用场景)
background-image : none | url (url)
参数值 | 作用 |
---|---|
none | 无背景图片(默认的) |
url | 使用绝对或相对地址指定背景图片 |
背景图片后面的地址,千万不要忘记加 URL, 同时里面的路径不要加引号。
如果需要在 HTML 页面上对背景图像进行平铺,可以使用 background-repeat 属性。
background-repeat: repeat | no-repeat | repeat-x | repeat-y
参数值 | 作用 |
---|---|
repeat | 默认,背景图片在纵向和横向上重复 |
no-repeat | 背景图像不平铺 |
repeat-x | 背景图片在横向上重复 |
repeat-y | 背景图片在纵向重复 |
background-position 属性可以改变图片在背景中的位置。
background-position: x y;
参数代表的意思是:x 坐标和 y 坐标。 可以使用 方位名词 或者 精确单位
参数值 | 说明 |
---|---|
length | 百分数 |
position | top | center | bottom | left | right |
background-attachment 属性设置背景图像是否固定或者随着页面的其余部分滚动。
background-attachment 可以制作视差滚动的效果。
background-attachment : scroll | fixed
参数 | 作用 |
---|---|
scroll | 背景图像是随对象内容滚动 |
fixed | 背景图像固定 |
background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置。
background: transparent url(image.jpg) repeat-y fixed top ;
属性 | 作用 | 值 |
---|---|---|
background-color | 背景颜色 | 预定义的颜色值/十六进制/RGB代码 |
background-image | 背景图片 | url(图片路径) |
background-repeat | 是否平铺 | repeat/no-repeat/repeat-x/repeat-y |
background-position | 背景位置 | length/position 分别是 x 和 y 坐标 |
background-attachment | 背景附着 | scroll(背景滚动)/ fixed(背景固定) |
背景复合写法 | 书写更简单 | 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置 |
给表单添加 outline: 0; 或者 outline: none; 样式之后,就可以去掉默认的蓝色边框。
outline: 0;outline: none;
li {cursor: pointer;}
设置或检索在对象上移动的鼠标指针采用何种系统预定义的光标形状
属性值 | 描述 |
---|---|
default | 小白,默认 |
pointer | 小手 |
move | 移动 |
text | 文本 |
not-allowed | 禁止 |
作用:网页的标签非常多,在不同地方会用到不同类型的标签,了解他们的特点可以更好的布局我们的网页。
元素显示模式就是元素(标签)以什么方式进行显示,比如 div 自己占一行 ,比如 一行可以放多个 span 。
HTML 元素一般分为 块元素 和 行内元素 两种类型。
常见的块元素有 h1~h6、p、div、ul、ol、li、dl、dt、dd、table、tr、thead、tbody、tfoot、caption、form等,其中 div 标签是最典型的块元素。
块级元素的特点:
① 比较霸道,自己独占一行。
② 高度,宽度、外边距以及内边距都可以控制。
③ 宽度默认是容器(父级宽度)的100%。
④ 是一个容器及盒子,里面可以放行内或者块级元素。
特别地
文字类的元素内不能使用块级元素
p 标签主要用于存放文字,因此 p标签 里面不能放块级元素,特别是不能放 div
同理, h1~h6 等都是文字类块级标签,里面也不能放其他块级元素
常见的行内元素有 a、strong、b、em、i、del、s、ins、u、span等,其中
span 标签是最典型的行内元素。有的地方也将行内元素称为内联元素。
行内元素的特点:
① 相邻行内元素在一行上,一行可以显示多个。
② 高、宽直接设置是无效的。
③ 默认宽度就是它 本身内容 的宽度。
④ 行内元素只能容纳文本或其他行内元素。
特别地
链接里面不能再放链接
特殊情况链接 a 里面可以放块级元素,但是给 a 转换一下块级模式最安全
在行内元素中有几个特殊的标签 —— img 、input 、td,它们__同时具有块元素和行内元素的特点__。
有些资料称它们为行内块元素。
行内块元素的特点:
① 和相邻行内元素(行内块)在一行上,但是他们之间会有空白缝隙。一行可以显示多个(行内元素特点)。
② 默认宽度就是它本身内容的宽度(行内元素特点)。
③ 高度,行高、外边距以及内边距都可以控制(块级元素特点)。
行内块元素之间存在间隙
产生原因:浏览器在解析HTML代码时,将上一行的结束标签和下一行的开始标签,解析为空格。
解决方案:
不管元素的父元素是body还是块级元素
vertical-align: middle;
line-hight: ;
转换为块元素:display:block;
转换为行内元素:display:inline;
转换为行内块:display: inline-block;
隐藏元素:display: none;
display 隐藏元素后,不再占有原来的位置。
visibility 属性用于指定一个元素应可见还是隐藏。
visibility:visible ; 元素可视
visibility:hidden; 元素隐藏
visibility 隐藏元素后,继续占有原来的位置。
overflow 属性指定了如果内容溢出一个元素的框(超过其指定高度及宽度) 时,会发生什么。
属性值 | 描述 |
---|---|
visible | 默认,不剪切内容也不添加滚动条 |
hidden | 不显示超出对象尺寸的内容,超出的部分隐藏掉 |
scroll | 不管超出内容与否,总是显示滚动条,如果超出,超出内容隐藏 |
auto | 超出内容显示滚动条,不超出不显示滚动条 |
页面布局要学习三大核心, 盒子模型, 浮动 和 定位。
传统网页布局的三种方式:标准流、浮动、定位
学习好盒子模型能非常好的帮助我们布局页面。
看透网页布局的本质
网页布局过程:
先准备好相关的网页元素,网页元素基本都是盒子 Box 。
利用 CSS 设置好盒子样式,然后摆放到相应位置。(核心)
往盒子里面装内容。
网页布局的核心本质: 就是利用 CSS 摆盒子。
盒子模型组成
所谓 盒子模型:就是把 HTML 页面中的布局元素看作是一个矩形的盒子,也就是一个盛装内容的容器。
CSS 盒子模型本质上是一个盒子,封装周围的 HTML 元素,它包括:边框、外边距、内边距、和 实际内容
属性 | 作用 |
---|---|
width | 设置盒子内容的宽 |
height | 设置盒子内容的高 |
border可以设置元素的边框。边框有三部分组成:边框宽度(粗细) 边框样式 边框颜色
border : border-width || border-style || border-color
属性 | 作用 |
---|---|
border-width | 定义边框粗细,单位是px |
border-style | 边框的样式(虚线、实线) |
border-color | 边框颜色 |
边框样式 border-style 可以设置如下值:
border-collapse: collapse;
表示相邻边框合并在一起,常见于解决表格之间的粗边框
padding 属性用于设置内边距,即边框与内容之间的距离。
属性 | 作用 |
---|---|
padding-left | 左内边距 |
padding-rigth | 右内边距 |
padding-top | 上内边距 |
padding-bottom | 下内边距 |
padding 属性(简写属性)的四种方式。
值的个数 | 表达意思 |
---|---|
padding: 5px; | 一个值,代表上下左右都有5像素内边距 |
padding: 5px 10px; | 两个值,代表上下内边距为5px,左右内边距为10px |
padding: 5px 10px 20px; | 三个值,代表上内边距为5px,左右内边距为10px,下内边距为20px |
padding: 5px 10px 20px 30px; | 四个值,代表上内边距为5px,右内边距为10px,下内边距为20px,左内边距为30px |
margin 属性用于设置外边距,即控制盒子和盒子之间的距离
属性 | 作用 |
---|---|
margin-left | 左外边距 |
margin-right | 右外边距 |
margin-top | 上外边距 |
margin-bottom | 下外边距 |
margin的简写属性跟padding一模一样
使用margin定义元素的处置外边距是,会出现外边距的合并。
当上下相邻的两个块元素(兄弟关系)相遇时,如果上面的元素有下外边距 margin-bottom,下面的元素有上外边距 margin-top ,则他们之间的垂直间距不是 margin-bottom 与 margin-top 之和。取两个值中的较大者这种现象被称为相邻块元素垂直外边距的合并。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i20vc4ab-1635408417001)(https://i.loli.net/2021/09/30/5Nds9wqrFXBcYkj.png)]
解决:
尽量只给一个盒子添加 margin 值。
对于两个嵌套关系(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会取较大的外边距值。
解决方案:
① 可以为父元素定义上边框。(影响盒子大小)
② 可以为父元素定义上内边距。 (影响盒子大小)
③ 可以为父元素添加 overflow:hidden,即开启BFC
还有更多种解决方案,大多原理也是开启BFC
box-shadow 属性为盒子添加阴影。
box-shadow: h-shadow v-shadow blur spread color inset;
值 | 描述 |
---|---|
h-shadow | 必需,阴影水平移动的距离,0:阴影水平方向与盒子对齐,正值 阴影往盒子右方移动,负值左侧 |
v-shadow | 必需,阴影垂直移动的距离,0:阴影垂直方向与盒子对齐,正值阴影往盒子下走,负值往上 |
blur | 可选,模糊距离(程度),0:盒子阴影是实的,值越大越虚,且阴影轮廓越来越大 |
color | 可选,阴影的颜色 |
inset | 可选,外部阴影outset(默认,但是不可写)改为内部阴影 |
盒子阴影是不占有空间的,不影响其它盒子的排列。
box-sizing 属性定义如何计算一个元素的总宽度和总高度,主要设置是否需要加上内边距(padding)和边框等。
box-sizing: 属性值;
布局为什么用不同的盒子?
标签都是有语义的,合理的地方用合理的标签。比如产品标题用h,大量文字就用段落p
用了很多类名的原因?
类名就是给每个盒子起一个名字,可以更好的找到这个盒子,选取盒子更容易,后期维护方便。
到底是用margin还是padding?
大部分情况下,两者各有优缺点,但是根据实际情况,总是有更简单的方法实现。
整体思路
所谓的标准流: 就是标签按照规定好默认方式排列
标准流是最基本的布局方式。
有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局。 因为浮动可以改变元素标签默认的排列方式。
浮动最典型的应用:可以让多个块级元素一行内排列显示。
网页布局第一准则:多个块级元素纵向排列找标准流,多个块级元素横向排列找浮动。
float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。
选择器 { float: 属性值; }
属性值 | 描述 |
---|---|
none | 元素不浮动(默认) |
left | 元素向左浮动 |
right | 元素向右浮动 |
浮动元素会脱离标准流(脱标),浮动的盒子不在保留原来的位置
浮动的元素会一行内显示并且元素顶部对齐,浮动的元素之间没有缝隙,如果父元素装不下会另起一行头部对齐。
浮动的元素会具有行内块元素的特性,块级元素添加浮动后,宽度根据内容大小或设置决定。
浮动的盒子只会影响浮动盒子后面的标准流,不会影响前面的标准流.
给个标准流的父级元素,父级元素必需有高
由于父级盒子很多情况下,不方便给高度,但是子盒子浮动又不占有位置,最后父级盒子高度为 0 时,就会影响下面的标准流盒子。
清除浮动之后,父级就会根据浮动的子盒子自动检测高度。父级有了高度,就不会影响下面的标准流了
额外标签法
额外标签法也称为隔墙法,是W3C推荐的做法。
额外标签法会在浮动元素末尾添加一个空的标签,但要求这个空标签必须是块级元素
选择器{clear:属性值;}
属性值 | 描述 |
---|---|
left | 不允许左侧有浮动元素 |
right | 不允许右侧有浮动元素 |
both | 同时清楚左右两侧浮动的影响(实际中常用) |
<html> <head> <meta charset="utf-8"> <title>额外标签法title> <style type="text/css"> * { padding: 0; margin: 0; } .father { border: 1px solid red; } .son1 { float: left; width: 200px; height: 200px; background-color: pink; } .son2 { float: left; width: 200px; height: 500px; background-color: skyblue; } /* 额外标签法:添加一个额外的标签:并设置clear属性 */ .extra_lable { clear: both; } .uncle { height: 300px; background-color: black; } style> head> <body> <div class="father"> <div class="son1"> div> <div class="son2"> div> <div class="extra_lable"> div> div> <div class="uncle"> div> body>html>
缺点:添加很多无意义的标签,结构优化较差
父级添加overflow
给父级元素添加 overflow 属性,其属性值设置为 hidden、auto 或 scroll
<html> <head> <meta charset="utf-8"> <title>清除浮动-父级添加overflow属性title> <style type="text/css"> * { padding: 0; margin: 0; } .father { /* 父级元素添加overflow属性 */ overflow: hidden; border: 1px solid red; } .son1 { float: left; width: 200px; height: 200px; background-color: pink; } .son2 { float: left; width: 200px; height: 500px; background-color: skyblue; } .uncle { height: 300px; background-color: black; } style> head> <body> <div class="father"> <div class="son1"> div> <div class="son2"> div> div> <div class="uncle"> div> body>html>
缺点:无法显示溢出部分
:after伪元素法
:after 方式是额外标签法的升级版。也是给父元素添加
.clearfix:after { content: ""; display: block; height: 0; clear: both; visibility: hidden; }// 兼容IE6、7.clearfix{ zoom: 1;}
将 额外标签 改为 :after伪元素,并且给==:after伪元素添加display: block;属性==,转换为块级元素,给after伪元素添加clear属性,并将以上封装为类,元素需要清除浮动就添加一个 clearfix 类
双伪元素清除浮动
双伪元素清除浮动也是给父元素添加,双伪元素技能解决浮动问题,也能解决高度塌陷问题。
.clearfix:before,.clearfix:after { content:""; display:table; }.clearfix:after { clear:both; }// 兼容IE6、7.clearfix { *zoom:1;}
浮动可以让多个块级盒子一行没有缝隙排列显示, 经常用于横向排列盒子。
定位则是可以让盒子自由的在某个盒子内移动位置或者固定屏幕中某个位置,并且可以压住其他盒子。
定位:将盒子定在某一个位置,所以定位也是在摆放盒子, 按照定位的方式移动盒子。
定位 = 定位模式 + 边偏移 。
定位模式用于指定一个元素在文档中的定位方式。边偏移则决定了该元素的最终位置。
它通过 CSS 的 position 属性来设置,其值可以分为四个:
值 | 语义 |
---|---|
static | 静态定位 |
relative | 相对定位 |
absolute | 绝对定位 |
fixed | 固定定位 |
sticky | 粘性定位 |
边偏移就是定位的盒子移动到最终位置。有 top、bottom、left 和 right 4 个属性:
边偏移属性 | 实例 | 描述 |
---|---|---|
top | top: 50px | 顶端偏移量,定义元素相对于其父元素上边线的距离 |
bottom | bottom: 50p | 底端偏移量,定义元素相对于其父元素下边线的距离 |
left | left: 50px | 左侧偏移量,定义元素相对于其父元素左边线的距离 |
right | right: 50px | 右侧偏移量,定义元素相对于其父元素右边线的距离 |
子绝父相
① 子级绝对定位,不会占有位置,可以放到父盒子里面的任何一个地方,不会影响其他的兄弟盒子。
② 父盒子需要加定位限制子盒子在父盒子内显示。
③ 父盒子布局时,需要占有位置,因此父亲只能是相对定位。
子绝父相不是永远不变的,如果父元素不需要占有位置,子绝父绝也会遇到
粘性定位可以被认为是相对定位和固定定位的混合。 Sticky 粘性的
以浏览器的可视窗口为参照点移动元素(固定定位特点)
粘性定位占有原先的位置(相对定位特点)
必须添加 top 、left、right、bottom 其中一个才有效
跟页面滚动搭配使用。 兼容性较差,IE 不支持
定位模式 | 是否脱标 | 移动位置 | 是否常用 |
---|---|---|---|
static | 否 | 不 | 不 |
relative | 否 | 自己本身 | 常用 |
position | 是 | 最近一级开启定位的祖先元素 | 常用 |
fixed | 是 | 浏览器可视区 | 常用 |
sticky | 否 | 浏览器可视区 | 兼容问题 |
绝对定位和固定定位也和浮动类似
在使用定位布局时,可能会出现盒子重叠的情况。此时,可以使用 z-index 来控制盒子的前后次序 (z轴)
选择器 { z-index: 1; }
不同浏览器对有些标签的默认值是不同的,为了消除不同浏览器对HTML文本呈现的差异,照顾浏览器的兼容,我们需要对CSS初始化
/* 把所有标签的内外边距清零 */* { margin: 0; padding: 0;}/* em和i 斜体的文字不倾斜 */em,i { font-style: normal;}/* li去掉小圆点 */li { list-style: none;}/* img图片垂直居中对齐,去掉图片底侧的空白缝隙 */img { /* border: 0; 照顾低版本浏览器 */ border: 0; vertical-align: middle;}/* 当鼠标经过 button 按钮时,鼠标变成小手 */button { cursor: pointer;}/* a修改默认链接颜色,去掉链接下划线 */a { color: #666; text-decoration: none;}/* 修改鼠标经过链接时的颜色为 京东红 */a:hover { color: #c81623;}button,input { font-family: Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif;}body { /* 抗锯齿性,让文字显得更加清晰 */ -webkit-font-smoothing: antialiased; background-color: #fff; font: 12px/1.5 Microsoft YaHei, Heiti SC, tahoma, arial, Hiragino Sans GB, "\5B8B\4F53", sans-serif; color: #666;}.hide,.none { display: none;}/* 清除浮动:伪元素清除法 */.clearfix:after { visibility: hidden; clear: both; display: block; content: "."; height: 0;}.clearfix { *zoom: 1;}
1️⃣定位+margin负值
DOCTYPE html><html><head> <meta charset="utf-8"> <title>title> <style type="text/css"> /* 方法一: 加绝对定位 left 50% top 50%,再通过添加margin-left: -(width/2) 和 margin-top: -(height/2) 实现居中 */ * { margin: 0; padding: 0; } .box { position: absolute; top: 50%; left: 50%; width: 200px; height: 200px; margin-top: -100px; margin-left: -100px; background-color: #12AC8D; } style>head><body> <div class="box">div>body>html>
2️⃣定位+translate负值
DOCTYPE html><html> <head> <meta charset="utf-8"> <title>盒子居中title> <style type="text/css"> /* 方法: 使用绝对定位 left 50% top 50%, 再通过transform: tranlate(-50%, -50%),往左偏移盒子宽地50%距离,往上偏移盒子高的50% */ * { margin: 0; padding: 0; } .box { position: absolute; left: 50%; top: 50%; width: 200px; height: 200px; background-color: #12AC8D; transform: translate(-50%, -50%); } style> head> <body> <div class="box">div> body>html>
3️⃣给元素加绝对定位 left,right,top,bottom全为0,再加上margin: auto 实现垂直水平居中
DOCTYPE html><html> <head> <meta charset="utf-8"> <title>title> <style type="text/css"> /* 方法: 给元素加绝对定位 left,right,top,bottom全为0,再加上margin: auto 实现垂直水平居中 */ * { margin: 0; padding: 0; } .box { position: absolute; left: 0; right: 0; top: 0; bottom: 0; width: 200px; height: 200px; margin: auto; background-color: #12AC8D; } style> head> <body> <div class="box">div> body>html>
4️⃣display:table-cell 行内块方式居中
DOCTYPE html><html> <head> <meta charset="utf-8"> <title>title> <style type="text/css"> /* 方法 父盒子display: table-cell text-align: center(水平居中) vertical-align: middle(垂直居中) */ * { margin: 0; padding: 0; } .box { display: table-cell; width: 1000px; height: 1000px; background-color: pink; text-align: center; vertical-align: middle; } .son { display: inline-block; width: 200px; height: 200px; background-color: #12AC8D; } style> head> <body> <div class="box"> <div class="son">div> div> body>html>
5️⃣flex布局
DOCTYPE html><html> <head> <meta charset="utf-8"> <title>title> <style type="text/css"> /* 方法 给父盒子添加 display: flex; align-items: center; 垂直居中 justify-content: center; 水平居中 */ * { margin: 0; padding: 0; } .box { display: flex; width: 100%; height: 100vh; align-items: center; justify-content: center; background-color: pink; } .son { width: 200px; height: 200px; background-color: #12AC8D; } style> head> <body> <div class="box"> <div class="son">div> div> body>html>
CSS的 vertical-align 属性使用场景:经常用于设置图片或者表单(行内块元素)和文字垂直对齐。
vertical-align: baseline | top | middle | bottom
值 | 描述 |
---|---|
baseline | 默认,元素放在父元素的基线上 |
top | 把元素的顶端与行中最高的元素的顶端对齐 |
middle | 把元素放在父元素的中部 |
bottom | 把元素的顶端与行中最低的元素的顶端对齐 |
图片底侧会有一个空白缝隙,原因是行内块元素会和文字的基线对齐
主要解决方法:
快捷键 | 说明 |
---|---|
ctrl+R | 调出标尺,右击标尺更改单位 |
ctrl++ | 放大视图 |
ctrl± | 缩小视图 |
ctrl+up(down/left/right) | 调节图片上下左右移动 |
space+鼠标拽动 | 拖动PS图片 |
ctrl+D | 进行选区 |
吸管工具 | 进行取色 |
ctrl+E | 合并图层 |
PS切图有很多的切图方式:图层切图、切片切图、PS插件切图等
图片格式 | 优点 | 缺点 |
---|---|---|
jpg | 文件小,有利于网络传输 | 画质损失 |
gif | 支持动画、透明,且文件小 | 只能存在256种不同的颜色。 |
png | 可保存透明背景图片 | 画质中等 |
PSD | PS专用,可以存放图层、通道、遮罩等,可以直接复制文字 | |
BMP | window标准图像格式,画质最好 | 文件太大,不利于网络传输 |
最简单的切图方式:右击图层 -> 快速导出为PNG。
很多情况下,我们需要合并图层再导出:
最好的办法是:沟通
利用切片工具手动划出
文件菜单 -> 导出 -> 存储为 web 设备所用格式 -> 选择我们要的图片格式 -> 存储
Cutterman 是一款运行在 PS 中的插件,能够自动将你所需要的图层进行输出,以替代传统的手工导出 web 所用合适 以及使用切片进行挨个切图的繁琐流程。
一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大,这将大大降低页面的加载速度。
因此,**为了有效地减少服务器接收和发送请求的次数,提高页面的加载速度,**出现了 CSS 精灵技术(也称CSS Sprites、CSS 雪碧)。
核心原理:将网页中的一些小背景图像整合到一张大图中 ,这样服务器只需要一次请求就可以了。
使用精灵图核心:
精灵技术主要针对于背景图片使用。就是把多个小背景图片整合到一张大图片中。
这个大图片也称为 sprites 精灵图 或者 雪碧图
移动背景图片位置, 此时可以使用 background-position 。
移动的距离就是这个目标图片的 x 和 y 坐标。注意网页中的坐标有所不同
因为一般情况下都是往上往左移动,所以数值是负值。
使用精灵图的时候需要精确测量,每个小背景图片的大小和位置。
字体图标可以为前端工程师提供一种方便高效的图标使用方式,展示的是图标,本质属于字体
字体图标优点:
border-radius: length;
原理;以半径为length的圆放在盒子每个角进行切割,形成圆角。
border本质
/* 每个边框本质都是三角形 */.box { margin: 100px auto; width: 0; height: 0; border-top: 100px solid red; border-right: 100px solid green; border-bottom: 100px solid blue; border-left: 100px solid purple;}
CSS三角形设置
/* 设置三角形思路宽高为0每个border必须有值根据自己想要的样式对某些border取透明色*/.triangle { width: 0; height: 0; border: 100px solid transparent; border-top: 100px solid red;}
三角形进阶
.triangle { width: 0; height: 0; border-top: 100px solid red; border-bottom: 150px solid green; border-left: 50px solid blue; border-right: 200px solid purple;}
textarea{ resize: none; }
white-space属性指定元素内的空白怎样处理。
属性值 | 描述 |
---|---|
normal | 默认,空白会被浏览器忽略 |
pre | 空白会被浏览器保留 |
nowrap | 文本不会换行,文本会在同一行上继续,知道遇到 br 标签 |
pre-wrap | 保留空白符序列,但是正常地进行换行 |
pre-line | 合并空白符序列,但是保留换行符 |
inherit | 规定应该从父元素继承 white-sapce 属性的值 |
单行
/* 1.先强制一行内显示文本 */white-sapce: nowrap;/* 2.超出部分隐藏 */overflow: hidden;/* 3.文字用省略号代替超出部分 */text-overflow: ellipsis;
多行
overflow: hidden;text-overflow: ellipsis;/* 弹性伸缩盒子模型显示 */display: -webkit-box;/* 限制在一个块元素显示的文本的行数 */-webkit-line-clamp: 2;/* 设置或检索伸缩盒对象的子元素的排列方式 */-webkit-box-orient: vertical;
filter CSS属性将模糊或颜色偏移等图形效果应用于元素。
filter: 函数(); 例如: filter: blur(5px); blur模糊处理 数值越大越模糊
backdrop-filter: blur(10px)
backdrop-filter实现背景的模糊,filter实现自己模糊
calc() 此函数让你在声明一些CSS属性值时执行一些计算
width: calc(100% - 80px);
background-size 属性规定背景图像的尺寸
background-size: 背景图片宽度 背景图片高度;
单位: 长度|百分比|cover|contain;
只写一个默认是第一个,第二个参数自适应
cover把背景图像扩展至足够大,以使背景图像完全覆盖背景区域(可能有部分图片无法显示)。
contain把图像图像扩展至最大尺寸,以使其宽度和高度完全适应内容区域(可能图片无法完全覆盖背景,但至少覆盖宽高中一个)
过渡(transition)是CSS3中具有颠覆性的特征之一,我们可以在不使用 Flash 动画或JavaScript 的情况下,当元素从一种样式变换为另一种样式时为元素添加效果。
transition: 要过渡的属性 花费时间 运动曲线 何时开始;
1.属性 : 想要变化的 css 属性, 宽度高度 背景颜色 内外边距都可以 。如果想要所有的属性都变化过渡, 写一个all 就可以。
2. 花费时间: 单位是 秒(必须写单位) 比如 0.5s
3. 运动曲线: 默认是 ease (可以省略)
**4.何时开始 :**单位是 秒(必须写单位)可以设置延迟触发时间 默认是 0s (可以省略)
转换(transform)是CSS3中具有颠覆性的特征之一,可以实现元素的位移、旋转、缩放等效果
2D移动是2D转换里面的一种功能,可以改变元素在页面中的位置,类似定位。
transform: translate(x,y); 或者分开写transform: translateX(n);transform: translateY(n);
2D旋转指的是让元素在2维平面内顺时针旋转或者逆时针旋转。
transform:rotate(度数)
缩放,只要给元素添加上了这个属性就能控制它放大还是缩小。
transform:scale(x,y);
我们可以使用 transform-origin 属性设置转换的中心点
transform-origin: x y;
同时使用多个转换,其格式为:transform: translate() rotate() scale() …等,
其顺序会影转换的效果。(先旋转会改变坐标轴方向)
当我们同时有位移和其他属性的时候,记得要将位移放到最前
动画(animation)是CSS3中具有颠覆性的特征之一,可通过设置多个节点来精确控制一个或一组动画,常用来实现复杂的动画效果。
相比较过渡,动画可以实现更多变化,更多控制,连续自动播放等效果。
制作动画分为两步:
@keyframes 动画名称 { 0%{ width:100px; } 100%{ width:200px; }}
div { width: 200px; height: 200px; background-color: aqua; margin: 100px auto; /* 调用动画 */ animation-name: 动画名称; /* 持续时间 */ animation-duration: 持续时间; }
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KRhQASC2-1635408417007)(https://i.loli.net/2021/10/04/ecmQRY2Tf4lwhGB.png)]
animation:动画名称 持续时间 运动曲线 何时开始 播放次数 是否反方向 动画起始或者结束的状态;
animation: myfirst 5s linear 2s infinite alternate;
简写属性里面不包含 animation-play-state
暂停动画:animation-play-state: puased; 经常和鼠标经过等其他配合使用
想要动画走回来 ,而不是直接跳回来:animation-direction:alternate
盒子动画结束后,停在结束位置: animation-fill-mode:forwards
主要知识点:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ka3mVZtW-1635408417008)(https://i.loli.net/2021/10/14/KLcovheRY9lS1Df.png)]
透视写在被观察元素的父盒子上面的
d:就是视距,视距就是一个距离人的眼睛到屏幕的距离。
z:就是 z轴,物体距离屏幕的距离,z轴越大(正值) 我们看到的物体就越大。
translform:translateZ(100px):仅仅是在Z轴上移动。有了透视,就能看到translateZ 引起的变化了
translateZ:近大远小
translateZ:往外是正值
translateZ:往里是负值
3D旋转指可以让元素在三维平面内沿着 x轴,y轴,z轴或者自定义轴进行旋转。
浏览器私有前缀是为了兼容老版本的写法,比较新版本的浏览器无须添加。
-moz-:代表 firefox 浏览器私有属性
-ms-:代表 ie 浏览器私有属性
-webkit-:代表 safari、chrome 私有属性
-o-:代表 Opera 私有属性
提倡写法
-moz-border-radius: 10px; -webkit-border-radius: 10px; -o-border-radius: 10px; border-radius: 10px;
浏览器现状:兼容移动端主流浏览器,处理 webkit 内核浏览器即可
**视口(viewport)**就是浏览器显示页面内容的屏幕区域。 视口可以分为布局视口、视觉视口和理想视口
布局视口
一般移动设备的浏览器都默认设置了一个布局视口,用于解决早期的PC端页面在手机上显示的问题。
iOS, Android基本都将这个视口分辨率设置为 980px,所以PC上的网页大多都能在手机上呈现,只不过元
素看上去很小,一般默认可以通过手动缩放网页。
视觉视口
字面意思,它是用户正在看到的网站的区域。注意:是网站的区域。
我们可以通过缩放去操作视觉视口,但不会影响布局视口,布局视口仍保持原来的宽度。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ifazuwg8-1635408417009)(https://i.loli.net/2021/10/07/oScBVmPEJDnxwWO.png)]
理想视口
为了使网站在移动端有最理想的浏览和阅读宽度而设定
理想视口,对设备来讲,是最理想的视口尺寸
需要手动添写meta视口标签通知浏览器操作
meta视口标签的主要目的:布局视口的宽度应该与理想视口的宽度一致,简单理解就是设备有多宽,我们布
局的视口就多宽
meta视口标签
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
物理像素&物理像素比
物理像素点指的是屏幕显示的最小颗粒,是物理真实存在的。这是厂商在出厂时就设置好了,比如苹果6\7\8 是 750* 1334
我们开发时候的1px 不是一定等于1个物理像素的
PC端页面,1个px 等于1个物理像素的,但是移动端就不尽相同
一个px的能显示的物理像素点的个数,称为物理像素比或屏幕像素比
多倍图
对于一张 50px * 50px 的图片,在手机 Retina 屏中打开,按照刚才的物理像素比会放大倍数,这样会造成图片模糊
在标准的viewport设置中,使用倍图来提高图片质量,解决在高清设备中的模糊问题
通常使用二倍图, 因为iPhone 6\7\8 的影响,但是现在还存在3倍图4倍图的情况,这个看实际开发公司需求
背景图片 注意缩放问题
主流方案
1、单独制作移动端页面(主流)
2、响应式页面兼容移动端(其次:制作麻烦,兼容问题大)
css初始化 normalize.css
Normalize.css:保护了有价值的默认值
Normalize.css:修复了浏览器的bug
Normalize.css:是模块化的
Normalize.css:拥有详细的文档
特殊样式
/*CSS3盒子模型*/ box-sizing: border-box; -webkit-box-sizing: border-box; /*点击高亮我们需要清除清除 设置为transparent 完成透明*/ -webkit-tap-highlight-color: transparent; /*在移动端浏览器默认的外观在iOS上加上这个属性才能给按钮和输入框自定义样式*/ -webkit-appearance: none; /*禁用长按页面时的弹出菜单*/ img,a { -webkit-touch-callout: none; }
操作方便,布局极为简单,移动端应用很广泛
PC 端浏览器支持情况较差
IE 11或更低版本,不支持或仅部分支持
flex 是 flexible Box 的缩写,意为“弹性布局”,用来为盒状模型提供最大的灵活性,任何一个容器都可以指定为 flex 布局
当我们为父盒子设为 flex 布局以后,子元素的 float、clear 和 vertical-align 属性将失效。
伸缩布局 = 弹性布局 = 伸缩盒布局 = 弹性盒布局 =flex布局
就是通过给父盒子添加flex属性,来控制子盒子的位置和排列方式
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZMeZyUDI-1635408417013)(https://i.loli.net/2021/10/07/I41lgAo8cpXyBvi.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ov1xNxsP-1635408417015)(https://i.loli.net/2021/10/07/F4oC1jg3NXLUPEt.png)]
flex-flow:row wrap;
flex 属性定义子项目分配剩余空间,用flex来表示占多少份数。
.item { flex: ; /* default 0 */ }
span:nth-child(2) { /* 设置自己在侧轴上的排列方式 */ align-self: flex-end; }
数值越小,排列越靠前,默认为0。
.item { order: ;}
rem单位
rem (root em)是一个相对单位,类似于em,em是父元素字体大小。
不同的是rem的基准是相对于html元素的字体大小。
比如,根元素(html)设置font-size=12px; 非根元素设置width:2rem; 则换成px表示就是24px。
rem的优势:父元素文字大小可能不一致, 但是整个页面只有一个html,通过控制html里面文字的大小,可以很好来控制整个页面的元素大小。
媒体查询(Media Query)是CSS3新语法。
使用 @media 查询,可以针对不同的媒体类型定义不同的样式
@media 可以针对不同的屏幕尺寸设置不同的样式
当你重置浏览器大小的过程中,页面也会根据浏览器的宽度和高度重新渲染页面
目前针对很多苹果手机、Android手机,平板等设备都用得到多媒体查询
语法规范
@media mediatype and|not|only (media feature) { CSS-Code;}
mediatype
值 | 描述 |
---|---|
all | 用于所有多媒体类型设备 |
用于打印机 | |
screen | 用于电脑屏幕,平板,智能手机等。 |
speech | 用于屏幕阅读器 |
① 按照设计稿与设备宽度的比例,动态计算并设置 html 根标签的 font-size 大小;(媒体查询)
② CSS 中,设计稿元素的宽、高、相对位置等取值,按照同等比例换算为 rem 为单位的值;
技术方案
1️⃣ less + 媒体查询 + rem
2️⃣ flexible.js + rem
简洁高效的rem适配方案flexible.js
手机淘宝团队出的简洁高效 移动端适配库
我们再也不需要在写不同屏幕的媒体查询,因为里面js做了处理
它的原理是把当前设备划分为10等份,但是不同设备下,比例还是一致的。
我们要做的,就是确定好我们当前设备的html 文字大小就可以了
比如当前设计稿是 750px, 那么我们只需要把 html 文字大小设置为 75px(750px / 10) 就可以
里面页面元素rem值: 页面元素的px 值 / 75
剩余的,让flexible.js来去算
就是使用媒体查询针对不同宽度的设备进行布局和样式的设置,从而适配不同设备的目的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pimbRoox-1635408417016)(https://i.loli.net/2021/10/08/CWTRdtnoy4rGcbi.png)]
响应式需要一个父级做为布局容器,来配合子级元素来实现变化效果。
原理就是在不同屏幕下,通过媒体查询来改变这个布局容器的大小,再改变里面子元素的排列方式和大小,从而实现不同屏幕下,看到不同的页面布局和样式变化。