一. 认识CSS
CSS提供了3种方法,可以将CSS样式应用到元素上
内联样式(inline style)
将样式直接写在元素的style属性上
CSS样式之间用分号;隔开,建议每条CSS样式后面都加上分号;
在很多国内外资料中,“CSS样式”与“ CSS属性”是同义词
样式名  ->  属性名
样式值  ->  属性值
| 1 | <body> | 
文档样式表(document style sheet)
将样式写在head元素的style元素中
<style>元素的type属性值默认是text/css
| 1 | <style> | 
外部样式表(external style sheet)
将样式写在单独的CSS文件中,然后在当前网页的head元素中用link元素引用
<link rel=”stylesheet”>元素的type属性值默认是text/css
在CSS文件中使用@charset指定文件编码,一般都是UTF-8
| 1 | <!-- link引入样式: rel="stylesheet" --> | 
@import
可以在style元素或者CSS文件中使用@import导入其他的CSS文件
不建议使用@import导入CSS文件,它的效率比link元素低
HTML和CSS的编写准则
结构、样式分离
因此,不要使用HTML元素的属性来给元素添加样式
比如body的bgcolor、img的width\height等
| 1 | <style> | 
设置网页图标
link元素除了可以用来引入CSS文件,还可以设置网页的图标(href的值是图标链接)
link元素的rel属性不能省略,用来指定文档与链接资源的关系
一般rel若确定,相应的type也会默认确定,所以可以省略type
网页图标支持的图片格式是ico、png,常用大小是16x16、24x24、32x32(单位:像素)
CSS官方文档
官方文档地址
https://www.w3.org/standards/techs/css
https://www.w3.org/TR/CSS22/
https://www.w3.org/TR/CSS22/propidx.html
由于浏览器版本、CSS版本等问题,有些CSS属性是无法使用的
可以到https://caniuse.com/查询CSS属性的可用性
二.选择器(selector)
通用选择器(universal selector)
元素选择器(type selectors)
类选择器(class selectors)
id选择器(id selectors)
属性选择器(attribute selectors)
组合(combinators)
伪类(pseudo-classes)
伪元素(pseudo-elements)
通用选择器(univeral selector)
所有元素 *
一般用来给所有元素做一些通用设置
比如:内边距、外边距
- 效率低,尽量不使用
| 1 | <style> | 
元素选择器(type selectors)
或者叫做标签选择器
| 1 | <style> | 
类选择器
一个元素可以有多个class值,每个class之间用空格隔开
class值如果由多个单词组成,单词之间可以用中划线-、下划线_连接,也可以使用驼峰标识
最好不要用标签名作为class值
| 1 | <style> | 
id选择器
一个HTML文档里面的id值是唯一的,不能重复
id值如果由多个单词组成,单词之间可以用中划线-、下划线_连接,也可以使用驼峰标识
最好不要用标签名作为id值
| 1 | <style> | 
三.常用CSS属性
文本:color、direction、letter-spacing、word-spacing、line-height、text-align、text-indent、text-transform、text-decoration、white-space
字体:font、font-family、font-style、font-size、font-variant、font-weight
背景:background、background-color、background-image、background-repeat、background-attachment、background-position
盒子模型:width、height、border、margin、padding
列表:list-style
表格:border-collapse
显示:display、visibility、overflow、opacity、filter
定位: vertical-align、position、left、top、right、bottom、float、clear
最常见CSS属性
CSS属性-background-color
用来决定背景色
CSS属性-color
用来设置文本内容的前景色(文字颜色)
包括文字、装饰线、边框、外轮廓等的颜色
CSS属性-width
宽度
CSS属性-height
高度
CSS属性-font-size
文字大小
| 1 | <style> | 
颜色
基本颜色关键字
red:红色,black:黑色,yellow:黄色,blue:蓝色,purple:紫色,white:白色
只提供了上百种基本颜色的关键字
RGB颜色
通过R(Red)、G(Green)、B(Blue)三种颜色通道的变化、叠加产生各式各样的颜色
- 十六进制表示形式 - #rrggbb,每一种颜色取值范围00~FF,大小写都可以 - #ff0000:红色,#00ff00:绿色,#0000ff:蓝色,#000000:黑色,#ffffff:白色,#ffff00:黄色 
- 十进制表示形式 - rgb(red, green, blue),每一种颜色取值范围0~255 - rgb(255, 0, 0):红色;rgb(0, 255, 0):绿色;rgb(0, 0, 255):蓝色;rgb(255, 255, 0):黄色;rgb(0, 0, 0):黑色;rgb(255, - 255, 255):白色 
- 建议:尽量使用#rgb取代#rrggbb,比如使用#345取代#334455 - 可以缩减CSS代码的体积,从而减小文件大小,节省用户流量,加快网页响应速度 
RGBA颜色
RGBA颜色在RGB颜色的基础上加了个alpha,实现带有透明度的颜色
rgba(red, green, blue, alpha)
alpha取值范围是0.0~1.0
0代表完全透明,1代表完全不透明
- 关键字transparent等价于rgba(0, 0, 0, 0),完全透明
| 1 | <style> | 
四.文本属性(text)
text-decoration
none:无任何装饰线(可以清除a元素的下划线)
underline:下划线
over line:上划线
line-through:中划线(删除线)
- u、ins元素默认就设置了text-decoration为underline
letter-spacing、word-spacing
letter子母间距
word单词间距
- 默认值是0,可以设置为负数
text-transform
用于设置文字的大小写转换
capitalize:将每个单词的首字母变为大写
uppercase:将每个单词的所有字符变为大写
lowercase:将每个单词的所有字符变为小写
none:没有影响
text-indent
用于设置第一行内容的缩进
text-indent:2em 刚好缩进两个文字
text-align
用于设置元素内容在元素中的水平对齐方式
- left:左对齐
- right:右对齐
- center:正中间
- justify:两端对齐
| 1 | /* justify */ | 
五.文字属性(font)
font-size
决定文字大小
常用的设置
- 具体数值+单位 - 比如:100px - 也可以使用em单位:1em代表100%,2em代表200%,0.5em代表50% 
- 百分比 - 基于父元素的font-size计算,比如50%表示等于父元素font-size的一半 
- 谷歌浏览器字体最小12px
font-family
用于设置文字的字体名称
可以设置一个或者多个字体名称(从左到右按顺序选择字体,直到找到可用的字体为止)
- 一般情况下,英文字体只适用于英文,中文字体同时适用于中文和英文 - 所以如果希望中英文使用不同字体,应该先将英文字体写在前面,中文字体写在后面 
- 字体中存在空格的时候加上单引号` 
font-weight
用于设置文字的粗细(重量)
100|200|300|400|500|600|700|800|900:每个数字表示一个重量
normal:等于400
bold:等于700
font-style
用于设置字体的常规、斜体显示
normal:常规显示
italic:用字体的斜体显示(前提是font-family这种字体本身是支持斜体的)
oblique:文本倾斜显示(让文字倾斜)
- em、i、cite、address、var、dfn等元素的font-style默认就是italic
font-varient
可以影响小写字母的显示形式
可以设置的值如下
- normal:常规显示 
- small-caps:将小写字母替换为缩小过的大写字母 
line-height
用于设置文本的最小行高
行高可以先简单理解为一行文字所占的高度
行高严格的定义是:两行文字基线(baseline)之间的间距
基线(baseline):与小写字母x最底部对齐的线
- 注意区分height和line-height的区别 - height:元素的整体高度
- line-height:元素中每一行文字所占据的高度
 
- height=line-height时可以居中(有文本时line-height也可以) 
font
font是一个缩写属性
font-style font-varient font-weight font-size/line-height font-family
font-style、font-varient、font-weight可以随意调换顺序,也可以省略
- /line-height可以省略,如果不省略,就必须跟在font-size后面 
- font-size、font-family不可以调换顺序,不可以省略 
| 1 | /* font-style font-varient font-weight font-size/line-height font-family */ | 
六.更多选择器
属性选择器(attribute selectors)-[att]
[att]拥有title属性的元素
| 1 | [title]{ | 
[att*=val]title属性值包含单词one的元素
| 1 | /* title中包含one单词 */ | 
[att^=val]title属性值以one开头的元素
| 1 | /* title以one开头 */ | 
[att$=val]title属性值以one结尾的元素
| 1 | /* title以one结尾 */ | 
[att|=val]title属性值恰好等于one或者以单词one开头且后面紧跟着连字符的元素
- 一般是用在lang属性上面
| 1 | [title|="one"]{ | 
[att~=val]title属性值包含单词one的元素(单词one与其他单词之间必须用空格隔开
| 1 | [title~="one"]{ | 
后代选择器(descendant combinator)
div元素里面的span元素(包括直接、间接子元素)
| 1 | div span{ | 
子选择器 (child combinator)
div元素里面的直接span子元素(不包含间接子元素)
| 1 | div>span{ | 
兄弟选择器 (adjacent sibling combinator)
div元素后面紧挨着的p元素(且div、p元素必须是兄弟关系)
| 1 | div+p{ | 
全兄弟选择器 (general sibling combinator)
div元素后面的p元素(且div、必须是兄弟关系)
| 1 | div~p{ | 
交集选择器
同时符合2个条件 的元素:div元素、class值的有one
| 1 | div.one{ | 
所有同时符合3个条件的元素:div、class值有one、title属性值等于text
| 1 | div.one[title="text"]{ | 
并集选择器
所有的div元素+所有class值有one的元素+所有title属性值等于text的元素
| 1 | div,.one,[title]="text"{ | 
七. 伪类(pseudo-classes)
动态伪类 (dynamic pseudo-classes)
a:link未访问的链接
a:visited已访问的链接
a:hover鼠标挪到链接上
a:active激活的链接(鼠标在链接上长按住未松开)
- 建议顺序:link、:visited 、:focus、:hover、:active(lvfha) 
- 使用注意 - :hover必须放在:link和:visited后面才能生效
- :active必须放在:hover后面才能完全生效
 - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19- /* 未访问状态 */ 
 a:link {
 color: red;
 }
 /* 已经访问过 */
 a:visited {
 color: green;
 }
 /* 手指(鼠标)放上去 */
 a:hover {
 color: blue;
 }
 /* 手指点下去, 未松手 */
 a:active {
 color: orange;
 }
- 除了a元素:hover、:active也能用在其他元素上 - 1 
 2
 3
 4
 5
 6
 7
 8- /* 2.hover/active应用到其他元素 */ 
 strong:hover {
 background-color: purple;
 }
 strong:active {
 font-size: 40px;
 }
a:focus指当前拥有输入焦点的元素(能接收键盘输入)也适用于a元素
去除a元素的默认的:focus效果
| 1 | /* 4.去掉a元素的焦点状态 */ | 
直接给a元素设置样式,相当于给a元素的所有动态伪类都设置了
相当于a:link、a:visited、a:focus、a:hover、a:active的颜色都是red
| 1 | a{ | 
结构伪类(structural pseudo-classes)
:nth-child(1)是父元素中的第一个子元素
| 1 | /* 1.第三个子元素 */ | 
p:nth-child(3)1.必须是p元素 2.p元素是子元素中第三个元素
| 1 | /* 2.交集选择器: 1.必须是p元素 2.p元素是子元素中第三个元素 */ | 
p span:nth-child(1)
区分有空格和没空格的区别
- 没空格为交集选择器、有空格为后代选择器
| 1 | /* | 
:nth-child(2n)是父元素中的第偶数个子元素
- 和:nth-child(even)同义
| 1 | p:nth-child(2n) { | 
:nth-child(2n+1)是父元素中的第奇数个子元素
- 和:nth-child(odd)同义
| 1 | /* 2.2n+1: 1, 3, 5, 7: 奇数 */ | 
nth-last-child 从后向前数
| 1 | /* nth-child: 正着数(从前向后) */ | 
:nth-of-type 相同类型,如果类型不同, 忽略
| 1 | p:nth-of-type(2n) { | 
:nth-last-of-type从后向前数
| 1 | p:nth-last-of-type(3) { | 
:first-child,等同于:nth-child(1)
:last-child,等同于:nth-last-child(1)
:first-of-type,等同于:nth-of-type(1)
:last-of-type,等同于:nth-last-of-type(1)
:only-child,是父元素中唯一的子元素
| 1 | /* 父元素中的唯一子元素 */ | 
only-of-type,唯一该类型的子元素
| 1 | /* 2.only-of-type: 唯一该类型的子元素 */ | 
:root,根元素,就是HTML元素
:empty,是父元素中唯一的这种类型的子元素
| 1 | :empty { | 
否定伪类 (negation pseudo-class)
:not()的格式是:not(x)
元素选择器、通用选择器、属性选择器、类选择器、id选择器、伪类(除否定伪类)
| 1 | :not(html) :not(body):not(div) { | 
目标伪类(target pseudo-classes)
:target
语言伪类language pseudo-classes)
lang()
元素状态伪类 (UI element states pseudo-classes)
- :disabled 
- :enable 
- :checked 
八. 伪元素(pseudo-elements)
建议: 使用两个冒号
为了区分伪元素和伪类,建议伪元素使用2个冒号,比如::first-line和::first-letter
:first-line
可以针对首行文本设置属性
只有下列属性可以应用在::first-line
- 字体属性、颜色属性、背景属性
- pword-spacing、letter-spacing、text-decoration、text-transform、line-height
| 1 | p::first-line { | 
:first-letter
可以针对首字母设置属性
只有下列属性可以应用在::first-letter
- p字体属性、margin属性、padding属性、border属性、颜色属性、背景属性
- ptext-decoration、text-transform、letter-spacing、word-spacing(适当的时候)、line-height、float、vertical-align(只有当float是none时)
| 1 | p::first-letter { | 
:before和:after
用来在一个元素的内容之前或之后插入其他内容(可以是文字、图片)
| 1 | /* 结论: 伪元素可以看成是行内元素 */ | 
九.CSS特性
继承
一个元素如果没有设置某属性的值,就会跟随父元素的值
一个元素如果有设置某属性的值,就使用自己设置的值
比如color、font-size等属性都是可以继承的
并不是所有的属性都可以继承(文本相关属性, 更多的去查文档MDN )
- 不能继承的属性,一般可以使用inherit值强制继承 
- 注意事项:CSS属性继承的是计算值,并不是当初编写属性时的指定值(字面值) - 1 
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21- <style> 
 .box1 {
 font-size: 60px;
 }
 .box2 {
 font-size: 0.5em;//30px
 }
 p-> inherited from box2 {
 font-size: 0.5em; //30px
 }
 </style>
 <body>
 <div class="box1">
 <div class="box2">
 <p>哈哈哈</p>
 </div>
 </div>
 </body>
层叠
基本层叠: 选择器相同时, 后面的属性会层叠前面的属性
| 1 | /* | 
优先级(权重)
!important: 10000
内联样式: 1000
id: 100
类/伪类/属性: 10
元素/伪元素: 1
- 优先比较优先级高的选择器
| 1 | /* 2.给第二个div设置样式 */ | 
十.元素类型
块级元素和行内级元素
根据元素的显示(能不能在同一行显示)类型,HTML元素可以主要分为2大类
- 块级元素(block-level elements):独占父元素一行 - 比如div、p、pre、h1~h6、ul、ol、li、dl、dt、dd、table、form、article、aside、footer、header、hgroup、main、nav、section、blockquote、hr等 
- 行内级元素(inline-level elements):多个行内级元素可以在父元素的同一行中显示 - 比如a、img、span、strong、code、iframe、label、input、button、canvas、embed、object、 video、audio等 
| 1 | <!-- | 
替换元素和非替换元素
根据元素的内容(是否浏览器会替换掉元素)类型,HTML元素可以主要分为2大类
- 替换元素(replaced elements):元素本身没有实际内容,浏览器根据元素的类型和属性,来决定元素的具体显示内容 - 比如img、input、iframe、video、embed、canvas、audio、object等 
- 非替换元素(non-replaced elements) - 和替换元素相反,元素本身是有实际内容的,浏览器会直接将其内容显示出来,而不需要根据元素类型和属性来判断到底显示什么内容 - 比如div、p、pre、h1~h6、ul、ol、li、dl、dt、dd、table、form、article、aside、footer、header、hgroup、main、nav、section、blockquote、hr、a、strong、span、code、label等 
 
    
display属性
能修改元素的显示类型,有4个常用值
- block:让元素显示为块级元素
- inline:让元素显示为行内级元素
- none::隐藏元素
- inline-block:让元素同时具备行内级、块级元素的特征
- 可以让元素同时具备块级、行内级元素的特征 
 跟其他行内级元素在同一行显示
 可以随意设置宽高
 宽高默认由内容决定
- 可以理解为 
 对外来说,它是一个行内级元素
 对内来说,它是一个块级元素
- 常见用途 
 让行内级非替换元素(比如a、span等)能够随时设置宽高
 让块级元素(比如div、p等)能够跟其他元素在同一行显示
| 1 | /* | 
邮箱练习
分页练习
display的以下取值,等同于某些HTML元素
- table:<table>,一个block-level表格
- inline-table:<table>,一个inline-level表格
- table-row:<tr> 
- table-row-group:<tbody> 
- table-header-group:<thead> 
- table-footer-group:<tfoot> 
- table-cell:<td>、<th>,一个单元格 
- table-caption:<caption>,表格的标题 
- list-item:<li> 
元素之间的空格
- 行内级元素(包括inline-block元素)的代码之间如果有空格,会被解析显示为空格 
- 目前建议的解决方法 
- 元素代码之间不要留空格
- 注释掉空格
- 设置父元素的font-size为0,然后在元素中重新设置自己需要的font-size(此方法在Safari不适用)
- (推荐)给元素加float
调色网站 https://flatuicolors.com/
块级元素、inline-block元素
一般情况下,可以包含其他任何元素(比如块级元素、行内级元素、inline-block元素)
- 特殊情况,p元素不能包含其他块级元素
行内元素(比如a、span、strong等)
- 一般情况下,只能包含行内元素
| 1 | <!-- | 
visibility属性
能控制元素的可见性,有2个常用值
- visible:显示元素
- hidden:隐藏元素
visibility: hidden和 display: none 的区别
- visibility: hidden;虽然元素看不见了,但元素的框依旧还留着,还会占着原来的位置
- display: none;不仅元素看不见了,而且元素的框也会被移除,不会占着任何位置
| 1 | div { | 
overflow属性
用于控制内容溢出时的行为
visible:溢出的内容照样可见
hidden:溢出的内容直接裁剪
scroll:溢出的内容被裁剪,但可以通过滚动机制查看,会一直显示滚动条区域,滚动条区域占用的空间属于width、height
auto:自动根据内容是否溢出来决定是否提供滚动机制还有overflow-x、overflow-y两个属性,可以分别设置水平垂直方向
(建议还是直接使用overflow,因为目前overflow-x、overflow-y还没有成为标准,浏览器可能不支持)
| 1 | .box { | 
word-break属性
十一.盒子模型(Box Model)
HTML中的每一个元素都可以看做是一个盒子
| 1 | .box { | 
内容(content)]
盒子里面装的东西
width:宽度
min-width:最小宽度,无论内容多少,宽度都大于或等于min-width
max-width:最大宽度,无论内容多少,宽度都小于或等于max-width
height:高度
min-height:最小高度,无论内容多少,高度都大于或等于min-height
max-height:最大高度,无论内容多少,高度都小于或等于max-height
| 1 | /* 1.设置宽度相关 */ | 
内边距(padding)
盒子边缘和里面装的东西之间的间距(上右下左)
padding-top:上内边距
padding-right:右内边距
padding-bottom:下内边距
padding-left:左内边距
padding:是padding-top、padding-right、padding-bottom、padding-left的简写属性
| 1 | .box { | 
外边距(margin)
盒子和其他盒子之间的间距
margin-top:上外边距
margin-right:右外边距
margin-bottom:下外边距
margin-left:左外边距
margin:是margin-top、margin-right、margin-bottom、margin-left的简写属性
| 1 | /* 1.margin的上下 */ | 
margin的传递(左右不会传递)
margin-top传递
如果块级元素的顶部线和父元素的顶部线重叠
那么这个块级元素的margin-top值会传递给父元素
| 1 | /* 演示传递 */ | 
margin-bottom传递
如果块级元素的底部线和父元素的底部线重叠,并且父元素的高度是auto
那么这个块级元素的margin-bottom值会传递给父元素
| 1 | /* 演示传递 */ | 
- 如何防止出现传递问题?- 给父元素设置padding-top\padding-bottom
- 给父元素设置border
- 触发BFC( block format context): 设置overflow为auto/hidden
 
- 建议- margin一般是用来设置兄弟元素之间的间距
- padding一般是用来设置父子元素之间的间距
 
margin的折叠 (左右不会折叠)
垂直方向上相邻的2个margin(margin-top、margin-bottom)有可能会合并为1个margin
这种现象叫做collapse(折叠)
- 折叠后最终值的计算规则:两个值进行比较,取较大的值
- 如何防止margin collapse?只设置其中一个元素的margin
| 1 | div { | 
边框(border)
就是盒子的边框,边缘部分
边框宽度border-width
是下面4个属性的简写属性
- border-top-width 
- border-right-width 
- border-bottom-width 
- border-left-width 
边框颜色border-color
是下面4个属性的简写属性
- border-top-color
- border-right-color
- border-bottom-color
- border-left-color
边框样式border-style
是下面4个属性的简写属性
- border-top-style
- border-right-style
- border-bottom-style
- border-left-style
- 边框颜色、宽度、样式的编写顺序任意
| 1 | .box { | 
边框样式取值
none:没有边框,边框颜色、边框宽度会被忽略
dotted:边框是一系列的点
dashed:边框是一条虚线
solid:边框是一条实线
double:边框有两条实线。两条线宽和其中的空白的宽度之和等于border-width的值
groove:边框看上去好象是雕刻在画布之内
ridge:和grove相反,边框看上去好象是从画布中凸出来
inset:该边框使整个框看上去好象是嵌在画布中
outset:和inset相反,该边框使整个框看上去好象是从画布中凸出来
| 1 | .box { | 
边框的形状
比如矩形、梯形、三角形等形状
| 1 | body { | 
行内级元素margin设置
以下属性对行内非替换元素不起作用
width、height、margin-top、margin-bottom
| 1 | span { | 
以下属性对行内非替换元素的效果比较特殊
padding-top、padding-bottom、上下方向的border
| 1 | span { | 
CSS属性-border-*-*-radius
两个值分别是水平半径和垂直半径(如果不设置,就跟随水平半径的值)
还可以设置百分比,参考的是border-box的宽度
 四个值依次是(顺时针方向)
- border-top-left-radius
- border-top-right-radius
- border-bottom-left-radius
- border-bottom-right-radius
- border-radius大于或等于50%时,就会变成一个圆
| 1 | .box1 { | 
CSS属性-outline
- 可以调试网站
| 1 | div{ | 
元素的外轮廓,不占用空间,默认显示在border的外面
- outline-width
- outline-style:取值跟border的样式一样,比如solid、dotted等
- outline-color
- outline:outline-width、outline-style、outline-color的简写属性,跟border用法类似
- 去除a元素、input元素的focus轮廓效果
| 1 | .box { | 
CSS属性-box-shadow
可以设置一个或者多个阴影,每个阴影用<shadow>表示
多个阴影之间用逗号,隔开,从前到后叠加
<shadow>的常见格式如下:
<shadow>=inset?&&<length>{2,4}&&<color>?
第1个<length>:水平方向的偏移,正数往右偏移
第2个<length>:垂直方向的偏移,正数往下偏移
第3个<length>:模糊半径(blur radius)
第4个<length>:延伸距离
<color>:阴影的颜色,如果没有设置,就跟随color属性的颜色
inset:外框阴影变成内框阴影
| 1 | .box { | 
阴影练习
- 可以设置多个阴影 
- 模糊会向四周扩散 
| 1 | .box { | 
CSS属性-text-shadow
text-shadow用法类似于box-shadow,用于给文字添加阴影效果
text-shadow同样适用于::first-line、::first-letter
<shadow>=<length>{2,3}&&<color>
| 1 | .box { | 
CSS属性 -box-sizing
用来设置盒子模型中宽高的行为
- content-box 
 padding、border都布置在width、height外边- 元素的实际占用宽度 = border + padding + width 
 元素的实际占用高度 = border + padding + height
- border-box 
 padding、border都布置在width、height里边- 元素的实际占用宽度 = width 
 元素的实际占用高度 = height
| 1 | .box { | 
不同类型方式的水平居中
- 行内级元素、inline-block元素 
 水平居中:在父元素中设置text-align: center
- 块级元素 
 水平居中:margin: 0 auto
| 1 | .box { | 
margin水平居中原理
| 1 | .box { | 
十二. 背景图片(background)
background-image
用于设置元素的背景图片,会盖在(不是覆盖)background-color的上面
设置的第一张图片将显示在最上面,其他图片按顺序层叠在下面
- 注意:如果设置了背景图片后,元素没有具体的宽高,背景图片是不会显示出来的
| 1 | .box { | 
background-repeat
用于设置背景图片是否要平铺
- repeat:平铺 
- no-repeat:不平铺 
- repeat-x:只在水平方向平铺 
- repeat-y:只在垂直平方向平铺 
| 1 | .box { | 
background-size
用于设置背景图片的大小
- auto:以背景图本身大小显示
- cover:缩放背景图,以完全覆盖铺满元素
- contain:缩放背景图,宽度或者高度铺满元素,但是图片保持宽高比
- <percentage>:百分比,相对于背景区(background positioning area)
- length:具体的大小,比如100px
| 1 | .box { | 
background-position
用于设置背景图片在水平、垂直方向上的具体位置
- 水平方向还可以设值:left、center、right 
- 垂直方向还可以设值:top、center、bottom 
如果只设置了1个方向,另一个方向默认是center
比如background-position: 80px; 等价于 background-position: 80px  center;
| 1 | .box { | 
CSS Sprite
使用CSS Sprite的好处
- 减少网页的http请求数量,加快网页响应速度,减轻服务器压力
- 减小图片总大小
- 解决了图片命名的困扰,只需要针对一张集合的图片命名
Sprite图片制作(雪碧图、精灵图)
方法1:Photoshop
方法2:https://www.toptal.com/developers/css/sprite-generator
京东练习
背景居中-梦幻西游
background-attachment
可以设置以下3个值
- scroll:背景图片跟随元素一起滚动(默认值)
- local:背景图片跟随元素以及元素内容一起滚动
- fixed:背景图片相对于浏览器窗口固定
| 1 | width: 200px; | 
background
简写属性,常用格式是
image  position/size  repeat  attachment  color
- background-size可以省略 
- 如果不省略,/background-size必须紧跟在background-position的后面 
 其他属性也都可以省略,而且顺序任意
| 1 | .box { | 
background-image和img的选择
 
   
- img,作为网页内容的重要组成部分,比如广告图片、LOGO图片、文章配图、产品图片
- background-image,可有可无。有,能让网页更加美观。无,也不影响用户获取完整的网页内容信息
CSS属性-cursor
设置鼠标指针(光标)在元素上面时的显示样式
cursor常见的设值有
- auto:浏览器根据上下文决定指针的显示样式,比如根据文本和非文本切换指针样式
- default:由操作系统决定,一般就是一个小箭头  
- pointer:一只小手,鼠标指针挪动到链接上面默认就是这个样式  
- text:一条竖线,鼠标指针挪动到文本输入框上面默认就是这个样式  
- none:没有任何指针显示在元素上面
| 1 | .box { | 
十三.定位(position)
标准流 (normal flow)
默认情况下,元素都是按照normal flow(标准流、常规流、正常流、文档流【document flow】)进行排布
从左到右、从上到下按顺序摆放好
默认情况下,互相之间不存在层叠现象
margin、padding定位
在标准流中,可以使用margin、padding对元素进行定位
其中margin还可以设置负数
比较明显的缺点是
设置一个元素的margin或者padding,通常会影响到标准流中其他元素的定位效果
不便于实现元素层叠的效果
CSS属性-position
可以对元素进行定位,常用取值有4个
static静态定位
position属性的默认值
元素按照normal flow布局
left 、right、top、bottom没有任何作用
relative相对定位
元素按照normal flow布局
可以通过left、right、top、bottom进行定位
- 定位参照对象是元素自己原来的位置
left、right、top、bottom用来设置元素的具体位置,对元素的作用如下图所示
 
 
相对定位的应用场景
在不影响其他元素位置的前提下,对当前元素位置进行微调
相对定位练习1
| 1 | sub, sup { | 
相对定位练习2
| 1 | body { | 
fixed固定定位
元素脱离normal flow(脱离标准流、脱标)
可以通过left、right、top、bottom进行定位
- 定位参照对象是视口(viewport)
当画布滚动时,固定不动
| 1 | div { | 
脱离标准流元素的特点
- 可以随意设置宽高
- 宽高默认由内容决定
- 不再受标准流的约束
- 不再给父元素汇报宽高数据
| 1 | div { | 
absolute绝对定位
元素脱离normal flow(脱离标准流、脱标)
可以通过left、right、top、bottom进行定位
- 定位参照对象是最邻近的定位祖先元素
- 如果找不到这样的祖先元素,参照对象是视口
定位元素(positioned element)
- position值不为static的元素,也就是position值为relative、absolute、fixed的元素
| 1 | .box1 { | 
绝对定位练习一 手机考拉
| 1 | .beauty-left { | 
绝对定位练习二 下拉二维码
| 1 | .phone { | 
子绝父相
在绝大数情况下,子元素的绝对定位都是相对于父元素进行定位
如果希望子元素相对于父元素进行定位,又不希望父元素脱标,常用解决方案是:
父元素设置position: relative(让父元素成为定位元素,而且父元素不脱离标准流)
子元素设置position: absolute
绝对定位技巧
绝对定位元素(absolutely positioned element)
position值为absolute或者fixed的元素
对于绝对定位元素来说
定位参照对象的宽度 = left + right + margin-left + margin-right + 绝对定位元素的实际占用宽度
定位参照对象的高度 = top + bottom + margin-top + margin-bottom + 绝对定位元素的实际占用高度
- 如果希望绝对定位元素的宽高和定位参照对象一样,可以给绝对定位元素设置以下属性 
 left: 0、right: 0、top: 0、bottom: 0、margin:0
- 如果希望绝对定位元素在定位参照对象中居中显示,可以给绝对定位元素设置以下属性 
 left: 0、right: 0、top: 0、bottom: 0、margin: auto
 另外,还得设置具体的宽高值(宽高小于定位参照对象的宽高)
| 1 | .box { | 
position总结
 
 
元素的层叠
标准元素: 标准流中的元素是不存在层叠
定位元素: 定位元素会层叠到标准流元素的上面
- 定位元素之间可以z-index 
- 前提: 必须是定位元素 - 非static 
 
 
CSS属性-z-index
用来设置定位元素的层叠顺序(仅对定位元素-非static)
取值可以是正整数、负整数、0
比较原则
- 如果是兄弟关系 - z-index越大,层叠在越上面 - z-index相等,写在后面的那个元素层叠在上面 
- 如果不是兄弟关系 - 各自从元素自己以及祖先元素中,找出最邻近的2个定位元素进行比较 - 而且这2个定位元素必须有设置z-index的具体数值 
| 1 | .box1 { | 
十四.浮动(float)
定位方案(Position Schemes)
在CSS中,有3种常用的方法对元素进行定位、布局
- normal flow:标准流、常规流、文档流
- absolute positioning:绝对定位
- float:浮动
绝对定位、浮动都会让元素脱离标准流,以达到灵活布局的效果
CSS属性-float
让元素产生浮动效果,float的常用取值
- none:不浮动,默认值
- left:向左浮动
- right:向右浮动
浮动的规则一
元素一旦浮动后
脱离标准流
朝着向左或向右方向移动,直到自己的边界紧贴着包含块(一般是父元素)或者其他浮动元素的边界为止
定位元素会层叠在浮动元素上面
| 1 | .box { | 
浮动的规则二
浮动元素不能与行内级内容层叠,行内级内容将会被浮动元素推出
比如行内级元素、inline-block元素、块级元素的文字内容
利用此特性,可以轻松实现文字环绕功能
| 1 | div { | 
浮动的规则三
行内级元素、inline-block元素浮动后,其顶部将与所在行的顶部对齐
| 1 | .box { | 
浮动前面规则的理解
| 1 | <!-- | 
浮动的规则四
如果元素是向左(右)浮动,浮动元素的左(右)边界不能超出包含块的左(右)边界
| 1 | <style> | 
浮动的规则五
浮动元素之间不能层叠
如果一个元素浮动,另一个浮动元素已经在那个位置了
后浮动的元素将紧贴着前一个浮动元素(左浮找左浮,右浮找右浮)
如果水平方向剩余的空间不够显示浮动元素,浮动元素将向下移动,直到有充足的空间为止
| 1 | <style> | 
浮动的规则六
浮动元素的顶端不能超过包含块的顶端,也不能超过之前所有浮动元素的顶端
| 1 | <style> | 
inline-block水平布局的缺陷
浮动的应用
浮动常用的场景
- 解决行内级元素、inline-block元素的水平间隙问题
- 布局
浮动的练习
京东案例
案例一 :左右分布
| 1 | <style> | 
案例二 : 一行放5个item的案例
| 1 | <style> | 
案例三: 左边两个大的item, 右边四个小的item
- 主要目的: 中间层加负margin(最优解)
| 1 | <style> | 
考拉案例(边框的布局)
案例一 : 品牌布局
| 1 | <style> | 
案例二: 热卖品牌
| 1 | <style> | 
案例三:今日限时购
| 1 | <style> | 
浮动存在的问题
由于浮动元素脱离了标准流,变成了脱标元素,所以不再向父元素汇报高度
父元素计算总高度时,就不会计算浮动子元素的高度,导致了高度坍塌的问题
解决父元素高度坍塌问题的过程,一般叫做清浮动(清理浮动、清除浮动)
清浮动的目的是
让父元素计算总高度的时候,把浮动子元素的高度算进去
清除浮动的常见方法
- 给父元素设置固定高度 
 扩展性不好(不推荐)
- 在父元素最后增加一个空的块级子元素,并且让它设置clear: both 
 会增加很多无意义的空标签,维护麻烦
 违反了结构与样式分离的原则(不推荐)
- 在父元素最后增加一个br标签: 
 会增加很多无意义的空标签,维护麻烦
 违反了结构与样式分离的原则(不推荐)
- 给父元素增加::after伪元素 
 纯CSS样式解决,结构与样式分离(推荐)  
CSS属性-clear
clear的常用取值
- left:要求元素的顶部低于之前生成的所有左浮动元素的底部
- right:要求元素的顶部低于之前生成的所有右浮动元素的底部
- both:要求元素的顶部低于之前生成的所有浮动元素的底部
- none:默认值,无特殊要求
一般就只用在非浮动元素上,可以让非浮动元素与浮动元素不层叠
| 1 | .clear-fix::after { | 
定位方案对比
 
 
CSS属性-transform
允许你旋转,缩放,倾斜或平移给定元素。
常见的函数transform function有:
- 平移:translate(x, y)
- 缩放:scale(x, y)
- 旋转:rotate(deg)
- 倾斜:skew(deg, deg)
位移-translate
平移:translate(x, y)
一个值时,设置x轴上的位移
二个值时,设置x轴和y轴上的位移
值类型:
数字:100px
百分比:参照元素本身( refer to the size of bounding box )
| 1 | <style> | 
缩放-scale
缩放:scale(x, y)
一个值时,设置x轴和y轴相同的缩放
二个值时,设置x轴和y轴上的缩放
值类型:
数字:
1:保持不变
2:放大一倍
0.5:缩小一半
百分比:不支持百分比
| 1 | <style> | 
transform-origin
变形的原点:
一个值时,设置x轴的原点
两个值时,设置x轴和y轴的原点
必须是<length>,<percentage>,或 left, center, right, top, bottom关键字中的一个
left, center, right, top, bottom关键字
length:从左上角开始计算
百分比:参考元素本身大小
| 1 | <style> | 
旋转-rotate
旋转:rotate(deg)
一个值时,表示旋转的角度
值类型:
deg:旋转的角度
正数为顺时针
负数为逆时针
注意:旋转的原点受transform-origin的影响
| 1 | <style> | 
倾斜-skew
旋转:skew(x, y)
值个数
一个值时,表示x轴上的倾斜
二个值时,表示x轴和y轴上的倾斜
值类型:
deg:旋转的角度
正数为顺时针
负数为逆时针
注意:旋转的原点受transform-origin的影响
| 1 | <style> | 
CSS属性-transition
transition过渡动画是以下四个属性的简写。
- transition-property:指定应用过渡属性的名称 
 可以写all表示所有可动画的属性
 属性是否支持动画查看文档
- transition-duration:指定过渡动画所需的时间 - 单位可以是秒(s)或毫秒(ms) 
- transition-timing-function:指定动画的变化曲线 - https://developer.mozilla.org/zh-CN/docs/Web/CSS/transition-timing-function 
- transition-delay:指定过渡动画执行之前的等待时间 
| 1 | <style> | 
CSS属性-vertical-align
文本的baseline是字母x的下方
Inline-block默认的baseline是margin-bottom的底部(没有,就是盒子的底部)
Inline-block有文本时,baseline是最后一行文本的x的下方
vertical-align有四个取值
- baseline(默认值):基线对齐
- top:把行内级盒子的顶部跟line boxes顶部对齐
- middle:行内级盒子的中心点与父盒基线加上x-height一半的线对齐
- bottom:把行内级盒子的底部跟line box底部对齐
 <percentage>:把行内级盒子提升或者下降一段距离(距离相对于line-height计算\元素高), 0%意味着同baseline一样
 <length>:把行内级盒子提升或者下降一段距离,0cm意味着同baseline一样
十五. flex布局
3.1. flex-container:
- display: flex/inline-flex- 开启flex布局
 
- flex-direction:- 决定主轴的方向
 
- justify-content:- 决定主轴上flex-items如何排布
 
- align-items:- 决定flex-items在交叉轴上的对齐方式
- normal
- stretch
- flex-start
- flex-end
- center
- baseline
 
- flex-wrap:- nowrap
- wrap
 
- flex-flow:- flex-direction
- flex-wrap
 
3.2.flex-items:
- order
- align-self
- flex-grow
- flex-shrink
- flex-basis
- flex
flex布局
 
 
容器属性
- display布局- display:flex/inline-flex
- flex-direction决定主轴方向- flex-direction:row默认值,主轴水平方向,起点在左端- flex-direction:row-reverse主轴水平方向,起点在右端- flex-direction:column主轴垂直方向,起点在上沿- flex-direction:column-reverse主轴垂直方向,起点在下沿
- flex-wrap换行- flex-wrap:nowrap默认值,不换行- flex-wrap:wrap换行,第一行在上方- flex-wrap:wrap-reverse换行,第一行在下方
- flex-flow:<flex-direction>||<flex-wrap>缩写属性
- justify-content项目在主轴上的对齐方式
- align-items项目在交叉轴上的对齐方式
- align-content多根轴线的对齐方式
项目属性
- order项目的排列顺序,数值越小,排列越靠前,默认为0
- flex-grow项目的放大比例,默认为0
- flex-shrink项目的缩小比例,默认为1
- flex-basis在分配多余空间之前,项目占据的主轴空间
- flex:<flex-grow><flex-shrink>?||<flex-basis>简写属性
- align-self允许单个项目有与其他项目不一样的对齐方式
将flex-direction设置成了column之后相应的justify-content也将变为竖直方向
对于一行分布两边的布局
- 使用justify-content:space-between直接实现
- 还可以设置margin-left:auto/margin-right:auto;
flex和grid布局
今天彻底完成了flex布局的,然后看了阮一峰的博客汲取到了很多有用的东西。
学到了很多在以后工作中会用到的知识。
接下来的抓紧时间掌握JavaScript、React,完成两个项目之后开始投简历面试。
flex布局结合nth-child一起使用效果更佳。
Grid

容器属性
- display布局- display:grid/inline-grid
- grid-template-columns列宽- grid-template-rows行高- 宽度单位 - 百分比 - repeat(2,100px 20px 80px)- auto-fill自动填充- fr比例- minmax(100px,1fr)长度范围,不小于100px,不大于1fr- auto自己决定
 
- grid-row-gap行间距- grid-column-gap列间距- gird-gap:<grid-column-gap> <grid-row-gap>简写属性
- grid-template-areas区域- 1 
 2
 3- grid-template-areas:'a b c' 
 'd e f'
 'g h i'
- grid-auto-flow放置顺序- grid-auto-flow:row默认值,先行后列- grid-auto-flow:row dense先行后列,并且尽可能紧密填满- grid-auto-flow:column先列后行- grid-auto-flow:column dense先列后行,并且尽可能紧密填满
- justify-items设置单元格内容的水平位置- align-items设置单元格内容的垂直位置- place-items:<align-items> <justify-items>简写属性
- justify-content整个内容区域在容器里面的水平位置- align-content整个内容区域在容器里面的垂直位置- place-content:<align-content> <justify-content>简写属性
- grid-auto-columns浏览器自动创建的多余网格的列宽- grid-auto-rows浏览器自动创建的多余网格的行高
项目属性
- gird-column-start左边框所在的垂直网格线- gird-column-end右边框所在的垂直网格线- gird-row-start上边框所在的垂直网格线- gird-row-end下边框所在的垂直网格线
- grid-column:<grid-column-start>/<grid-column-end>简写形式- grid-column:1/3从第1根列线到第3根列线- grid-column:1/span 2从第1根列线跨越2个网格- grid-row:<grid-row-start>/<grid-row-end>简写形式
- grid-area:<row-start>/<column-start>/<row-end>/<column-end>- 指定放在哪一个区域 
- justify-self设置单元格内容的水平位置- align-self设置单元格内容的垂直位置- place-self:<align-self><justify-self>简写形式