CSS(层叠样式表)
简介
CSS是一种标记语言
CSS主要用于设置HTML网页中的文本内容(字体、大小、对齐方式等),图片的外形(宽高、边框样、边距等)以及版面的样式和外观显示布局
CSS可以美化HTML,让HTML更漂亮,让页面布局更简单
HTML主要做结构,显示网页元素,CSS美化HTML,布局网页
CSS最大的价值:由HTML专注去做结构呈现,样式交给CSS,即结构(HTML)与样式(CSS)相分离
CSS语法规范
CSS规则由两个主要部分构成:选择器以及一条或多条声明
选择器用于指定CSS样式的HTML标签,花括号内是对该对象设置的具体样式
属性和属性值以“键值对”的形式出现
属性是指对指定的对象设置的样式属性,例如字体大小、文本颜色等
属性和属性值之间用英文“:”分开
多个键值对之间用英文“;”分开
-
CSS代码风格
- 样式格式属性
h3 { color: pink; font-size:20px; }
- 样式大小写:样式选择器,属性名,属性值关键字全部用小写字母,特殊情况除外
- 空格规范
- 属性值的前面,冒号后面,保留一个空格
- 选择器和大括号中间保留空格
- 样式格式属性
CSS基础选择器
基础选择器包括:标签选择器,类选择器,id选择器和通配符选择器
-
标签选择器:用HTML标签名称作为选择器,按标签名称,为页面中某一类标签指定统一的CSS样式
把某一类标签全部选择出来,快速设置样式,不能差异化设置
-
类选择器
.类名 { 属性1: 属性值1; …… }
类选择器使用"."(英文点号)进行标识,后面紧跟类名(自定义)
可以理解为为标签起了名
选择器命名中可以使用"-"
不要使用纯数字、中文等命名,尽量使用英文字母
命名要有意义,别人能看懂
命名要规范 -
多类名
亚瑟在标签class属性中写多个类名
多个类名中间必须用空格分开
这个标签可以分别具有这些类名的样式
使用场景:
把一些元素的相同的样式(共同的部分)放到通用的类里
这些标签都可以调用这个公共的类,然后再调用自己的类
从而节省CSS代码,修改也非常方便 -
id选择器
# id { 属性1: 属性值1; …… }
id选择器与类选择器的区别
- 类选择器好比人的名字,一个人可以拥有多个名字,同一名字也可以被多人使用
- id选择器好比人的身份证号,在全国是唯一的,不能重复
- id选择器和类选择器最大的区别在使用次数上
- 类选择器在修改样式中用的最多,id选择器一般用于页面唯一元素上,经常与JavaScript搭配
-
通配符选择器
在css中通配符选择器使用“*”定义,表示选取页面中所有元素* { 属性1: 属性值1; …… }
-
总结
基础选择器 作用 特点 使用情况 标签选择器 可以选出所有相同的标签 不能差异化选择 较多 类选择器 可以选出一个或多个标签 可以根据需求选择 非常多 id选择器 一次只能选择1个标签 id属性只能在每个HTML文档中出现1次 一般和JS搭配 通配符选择器 选择所有标签 选择的太多,有部分不需要 特殊情况使用
CSS字体属性
CSS Fonts(字体)属性用于定义字体系列、大小、粗细和文字样式(如斜体)
-
字体系列
CSS使用font-family属性定义文本的字体系列p { font-family: “微软雅黑”,Arial}
各个字体之间必须使用英文逗号隔开
一般情况下,如果有空格隔开的多个单词组成的字体,加引号
尽量使用系统自带字体,保证在任何浏览器都能显示
有多种字体时,从第一种字体开始,若有则以这种字体则显示,没有则找第二种字体,以此类推 -
字体大小
CSS使用font-size属性定义文本的字体系列
p { font-size:20px; }
- px(像素)大小是网页中最常用的单位
- 谷歌浏览器默认文字大小为16px
- 不同浏览器默认字体大小不同,最好设置一个明确的大小
- 可以给body指定整个页面文字的大小(标题标签内不生效)
-
字体粗细
CSS使用font-weight属性定义文字的字体粗细font-weight:normal, bold, bolde, lighter, number
normal:正常字体
bold:粗体(相当于number为700)
bolder:特粗体
lighter:细体
number: 100, 200, 300, 400, 500, 600, 700, 800, 900属性值 描述 normal 默认值(不加粗) bold 加粗 100-900 400等同于normal,700等同于bold,数字后面不加单位 -
文字样式
CSS使用font-style属性设置文本的风格p { font-style: normal; }
属性值 作用 normal 默认值,浏览器会显示标准字体样式 italic 浏览器会显示斜体字体样式 注意:通常使用斜体标签(em,i)使文字倾斜
-
字体复合属性
font: font-style font-weight font-size/font-height font-family;
body { font:italic 700 16px 'Microsoft Hahei' }
使用font属性时,必须严格按照语法顺序来写,不能更换顺序,并且各个属性之间以空格隔开
不需要设置的属性可以省略(取默认值), font-size和font-family不能省略 -
字体属性总结
属性 表示 注意点 font-size 字号 通常用的单位是px,一定要跟上单位 font-family 字体 实际工作中要求团队约定来写 font-weight 字体粗细 加粗:700或bold 不加粗:400或normal font-style 字体样式 倾斜:italic 不倾斜:normal font 字体复合连写 不能随意更换位置;字体和字号不能省略
CSS文本属性
CSS Text(文本)属性可以定义文本的外观,如,文本颜色、对齐文本、装饰文本、文本缩进、行间距等
-
文本颜色
color属性用于定义文本的演示div { color: red }
表示 属性值 预定义颜色值 red,green,blue等 十六进制 #FF0000,#FF6600等 RGB代码 rgb(255,0,0)或rgb(100%,0%,0%) rgb: red green blue
开发中最常用的是十六进制 -
对齐文本
text-align属性用于设置元素内文本内容的水平对齐方式
div { text-align: center }
属性值 解释 left 左对齐(默认值) right 右对齐 center 居中对齐 -
装饰文本
text-decoration属性规定添加到文本的修饰。可以给文本添加下划线、删除线、上划线等div { text-decoration: underline; }
属性值 描述 none 默认,没有装饰线(最常用) underline 下划线(链接a自带下划线)(常用) overline 上划线(几乎不用) line-through 删除线(不常用) -
文本缩进
text-indent属性用来指定文本第一行的缩进,通常是将段落的首行缩进p { text-indent: 20px; text-indent: 2em; }
em是一个相对单位,就是当前元素(font-size)1个文字的大小
-
行间距
line-height属性用于设置行间的距离(行高),可以控制文字行与行之间的距离p { line-height:26px }
行间距:上边距+文本高度+下间距
测行高:;从第一行的最下沿到第二行的最下沿 文本属性总结
属性 | 表示 | 注意点 |
---|---|---|
color | 文本颜色 | 十六进制:#ffffff |
text-align | 文本对齐 | 可以设定文字水平的对齐方式 |
text-indent | 文本缩进 | 通常用于段落首行缩进2个字的距离:text-indent: 2em; |
text-decoration | 文本修饰 | 加下划线:underline 取消下划线:none |
line-hight | 行高 | 控制行与行之间的缩进 |
CSS引入方式
按照CSS样式书写的位置(或引入的方式),可分为三大类:
内部样式表
写到HTML页面内部,将所有的CSS代码抽取出来,单独放到一个< style >标签中
< style >标签理论上可以放到HTML文档的任何地方,但一般放在< head>标签中
此种方式,可以方便控制整个页面的的元素样式设置
代码结构清晰,但并没有实现结构与样式完全分离
称为嵌入式引入,练习时常用-
行内样式
在元素标签内部的style属性中设定CSS样式,适合用于修改简单样式style其实就是标签的属性
在双引号中间,写法要复合CSS规范
可以控制当前的标签设置样式(只修改当前标签)
书写繁琐,没有体现结构与样式分离的思想,不推荐使用,只有对当前元素添加简单样式时,可以考虑 -
外部样式表
适用于样式较多的情况,核心:样式单独放在CSS文件中,之后吧CSS文件引入到HTML页面中
引入外部样式表分为两步:- 新建一个后缀为.css的样式文件,把所有的CSS代码都放在此文件中
- 在html页面中,使用< link>标签引入这个文件
rel:定义当前文档与被链接文档之间的关系,在这需要制定为“stylesheet”,表示被链接的文档是一个样式表文件
href:定义所链接文件的URL,可以是相对路径,也可以是绝对路径
称为外链式或链接引入式,是开发中最常用的方式
-
CSS引入方式总结
样式表 优点 缺点 使用情况 控制范围 行内样式表 书写方便,权重高 结构样式混写 较少 控制一个标签 内部样式表 部分结构和样式相分离 没有彻底分离 较多 控制一个页面 外部样式表 完全实现结构和样式相分离 需要引入 最多 控制多个页面
Chrome调试工具
- 打开:F12或右键 ->检查
- 使用调试工具:
- Ctrl +滚轮可以放大开发中工具代码大小
- 左边是html元素结构,右边是CSS样式
- 右边CSS样式可以改变数组(左右箭头或直接输入)和查看颜色
- Ctrl+ 0 复原浏览器大小
- 如果点击元素,发现右侧没有样式引入,既有可能是类名或者样式引入错误
- 如果有样式,但是样式前面有黄色感叹号,则是样式属性属性错误
Emmet语法
使用缩写,来提高HTML/CSS 的编写速度(VScode内部已集成)
-
快速生成HTML语法结构
- 生成标签: 直接输入标签名按tab键即可
- 如果想要生成多个相同标签 加上*就可以了,如div *3
- 如果有父子级关系的标签,可以用 > 如:ul>li
- 如果有兄弟级关系的标签,用+就可以了。如div+p
- 如果生成带有类名或id名字的,直接写 .demo 或者 #two tab即可(默认div,否则标签.demo)
- 如果生成的div类名是有顺序的,可以用自增符号 *5
- 如果想生成的标签内存在内容可以用{}表示,如div{$}*5
-
快速生成CSS 语法样式
简写
CSS复合选择器
CSS中可以根据选择器的类型将选择器分为基础选择器和复合选择器,复合选择权是建立在基础选择器之上,对基本组合器进行组合形成的
复合选择器可以更准确、更高效的选择目标元素(标签)
复合选择器是有两个或多个基础选择器通过不同的防止组合而成的
-
后代选择器
后代选择器又称为包含选择器,可以选择父元素中的子元素
语法:外层标签写在前面,内层标签写在后面,中间用空格分开父元素 子元素 { 样式声明 } 例: ol li { color: red; }
- 上述语法表示选择父元素中所有子元素(后代元素)
- 父元素和子元素中间用空格隔开
- 子元素可以是儿子也可以是孙子,只要是父元素的后代即可
- 父元素和子元素可以是任意基础选择器(标签、类、id、通配符选择器)
-
子选择器
子元素选择器只能选择某元素最近一级的子元素(亲儿子)
父元素 > 子元素 { 样式声明 } 例: ol > li { color: red; }
- 上述语法表示选择父元素中所有直接后代子元素
- 父元素和子元素中间用大于号隔开
- 子元素必须是最近一级,直接后代,亲儿子
-
并集选择器
并集选择器可以选择多组标签,同时定义相同的样式,通常用于集体声明元素1,元素2 { 样式声明 }
- 上述语法表示选择元素1和元素2
- 父元素和子元素中间用逗号隔开
- 逗号可以理解为和的意思
- 任何形式的选择器都可以作为并集选择器的一部分(复合选择器也可以)
- 约定语法规范:一行一个元素和逗号,最后一行不加逗号
-
伪类选择器
伪类选择器用于向某些选择器添加特殊效果,比如给链接添加特殊效果,或选择第一个,第n个元素
特点:用冒号(:)表示,比如:hover、:first-child
- 链接伪类
a:link // 选择所有未被访问的链接 a:visited // 选择所有未已访问的链接 a:hover // 选择鼠标指针位于其上的链接 a:active // 选择活动链接(鼠标按下未弹起的链接)
为确保生效,请按照lvha的顺序声明::link :visited :hover :active
a链接在浏览器中具有默认样式,实际工作中需要给链接单独指定样式-
:focus伪类选择器
:focus伪类选择器用于选取获得焦点的表单元素
焦点就是光标,一般情况< input>类表单元素才能获取,因此这个选择器主要针对表单元素input:focus { background-color:yellow; }
复合选择器总结
选择器 | 作用 | 特征 | 隔开符号及用法 | 使用情况 |
---|---|---|---|---|
后代选择器 | 选择后代元素 | 可以是子孙后代 | 空格隔开 | 较多 |
子代选择器 | 选择最近一级子代元素 | 只选亲儿子 | 大于号隔开 | 较少 |
并集选择器 | 选择某些样式相同的元素 | 用于集体声明 | 逗号隔开 | 较多 |
链接伪类选择器 | 选择不同状态的链接 | 跟链接相关 | 重点 a {}和 a:hover | 较多 |
:focus选择器 | 选择获得光标的表单 | 跟表单相关 | 记住input:focus | 较少 |
CSS元素显示模式
元素显示模式就是元素(标签)以什么方式进行显示,如div独占一行,span一行可以放多个
作用:了解标签特点可以更好的布局网页
HTML元素一般分为块元素和行内元素两种类型
-
块元素
常见块元素:< h1>~< h6>,< p>, < div>, < ul>, < ol>, < li>
特点:- 独占一行
- 高度、宽度、外边距、内边距都可以控制
- 宽度默认是容器(父级宽度)的100%
- 是一个容器及盒子,里面可以放行内或块级元素
注意:- 文字类的元素内不能使用块级元素
- < p>标签主要用于存放文字,因此不能放块级元素,特别是< div>
- 同理,< h1>~< h6>等都是文字类标签,里面不能放块级元素
-
行内元素
常见行内元素:< a>, < strong>, < b>,< em>, < i>, < span>等
特点:
- 相邻行内元素在一行上显示,一行可以显示多个
- 高、宽直接设置是无效的
- 默认宽度是他本身内容的宽度
- 行内元只能容纳文本或其他行内元素
注意:
- 链接里面不能再放链接
- 特殊情况链接a里面可以放块级元素,但是给a转换一下块级模式最安全
-
行内块元素
行内块元素:< img /> , < input />, < td>,同时具有块元素和行内元的特点
特点:
- 和相邻行内元素(行内块)在一行上,但是元之间会有空白缝隙,一行可以显示多个(行内元素特点)
- 默认宽度是他本身内容的宽度(行内元素特点)
- 高度、行高、外边距以及内边距都可以控制(块级元素特点)
-
元素显示模式总结
元素默认 元素排列 设置样式 默认宽度 包含 块级元素 一行只能放一个块级元素 可以设置高宽 父容器的100% 可以包含任何标签 行内元素 一行可以放多个行内元素 不可以直接设置高宽 本身内容的宽度 容纳文本或其他行内元素 行内块元素 一行可以放多个行内元素 可以设置高宽 本身内容的宽度 -
元素显示模式转换
一个模式的元素可能需要另外一种默认的特性,所以需要元素显示模式转换
- 转换为块元素: display: block;
- 转换为行内元素: display: inline;
- 转换为行内块: display: inline-block;
-
单行文字居中
让文字的行高等于盒子的高度,就可以让文字在当前盒子内垂直居中
原理:行间距:上边距+文本高度+下间距
如果行高小于盒子高度,文字会偏上;如果行高大于盒子高度,文字会偏下。
CSS背景
CSS背景属性,可以给页面元素添加背景样式
背景属性可以设置背景颜色、背景图片、背景平铺、背景图片位置、背景图像固定等
-
背景颜色
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 - 参数是方位名词
- 如果指定的两个值都是方位名词,则两个值前后顺序无关,比如 left top 和 top left 效果一致
- 如果只指定了一个方位名词,另一个值省略,则第二个值默认居中对齐
- 参数是精确单位
- 如果参数值是精确坐标,那么第一个肯定是 x 坐标,第二个一定是 y 坐标
- 如果只指定一个数值,那该数值一定是 x 坐标,另一个默认垂直居中
- 参数是混合单位
- 如果指定的两个值是精确单位和方位名词混合使用,则第一个值是 x 坐标,第二个值是 y 坐标
- 参数是方位名词
-
背景图像固定(背景附着)
background-attachment 属性设置背景图像是否固定或者随着页面的其余部分滚动。
background-attachment 后期可以制作视差滚动的效果。
background-attachment : scroll | fixed
参数 作用 scroll 背景图像随对象内容滚动 fixed 背景图像固定 -
背景复合写法
background: 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置
background: transparent url(image.jpg) repeat-y fixed top ;
实际开发中,更提倡这种写法
-
背景色半透明
CSS3 为我们提供了背景颜色半透明的效果。
background: rgba(0, 0, 0, 0.3);
- 最后一个参数是 alpha 透明度,取值范围在 0~1之间
- 我们习惯把 0.3 的 0 省略掉,写为 background: rgba(0, 0, 0, .3);
- 注意:背景半透明是指盒子背景半透明,盒子里面的内容不受影响
- CSS3 新增属性,是 IE9+ 版本浏览器才支持的
- 但是现在实际开发,我们不太关注兼容性写法了,可以放心使用
-
背景总结
属性 作用 值 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(背景固定) 背景简写(复合写法) 书写更简单 背景颜色 背景图片地址 背景平铺 背景图像滚动 背景图片位置 背景色半透明 背景颜色半透明 background: rgba(0, 0, 0, .3)后面必须是4个值
CSS的三大特性
-
层叠性
给相同的选择器设置相同的样式,此时一个样式就会覆盖(层叠)另一个样式
层叠性主要解决样式冲突的问题
层叠性原则:- 样式冲突,遵循就近原则,哪个样式离结构近,就执行哪个样式(执行后面的样式)
- 样式不冲突,不会层叠
-
继承性
子标签会继承父标签的某些样式,如文本颜色和字号
恰当的使用继承可以简化代码,降低CSS样式的复杂性
子元素可以继承父元素的样式(text-,font-,line-这些元素开头的可以继承,以及color属性)-
行高的继承性
body { font: 12px/1.5 'Microsoft YaHei' }
- 行高可以跟单位也可以不跟单位
- 如果子元素没有设置行高,则会继承父元素的行高为1.5
- 此时子元素的行高是:当前子元素的文字大小*1.5
- body行高1.5,这样写法最大的优势就是里面子元素可以根据自己文字大小自动调整行高
-
-
优先级
当一个元素指定多个选择器,就会有优先级的产生选择器相同,则执行层叠性
-
选择器不同,则根据选择器权重执行
选择器 选择器权重 继承或* 0000 元素选择器 0001 类选择器,伪类选择器 0010 ID选择器 0100 行内样式 style=“” 1000 !important 无穷大 -
优先级注意点
权重由4组数字组成,但是不会有进位
可以理解为类选择器永远大于元素选择器,以此类推
从左向右判断,如果某一位数值相同,则判断下一位数值
简单记忆:通配符和继承权重0,标签选择器:1,类(伪类)选择器:10,id选择器:100,行内样式表:1000,iimportant:无穷大
继承的权重是0,不管父元素权重多高,只要子元素没有直接选中,得到的权重都是0 -
权重叠加
如果是复合选择器,则会有权重叠加,需要计算权重- div ul li : 0003
- .nav ul li : 0012
- a:hover:0011
- .nav a: 0011