Cascading Style Sheets,层叠样式表。
【入门推荐】CSS入门 - 绿叶学习网 (lvyestudy.com)
【个人感觉一般】CSS - 学习 Web 开发 | MDN (mozilla.org)
【进阶推荐,界面简洁美观】CSS 教程 (w3school.com.cn)
关于课程内容,其他人总结得很好,我就不总结了。以内内容为个人自学笔记,供个人查阅使用。
一、基础部分
- CSS注释只有
/**/一种方式。
1.1 引入CSS样式表
1.1.1 内部样式表
语法中,style标签一般位于head标签中title标签之后,也可以把他放在HTML文档的任何地方。
<head>
<style>
选择器 {属性1:属性值1; 属性2:属性值2; 属性3:属性值3;}
</style>
</head>
1.1.2 外部样式表
将所有的样式放在一个或多个以.CSS为扩展名的外部样式表文件中,通过link标签将外部样式表文件链接到HTML文档中,其基本语法格式如下:
<head>
<link href="CSS文件的路径" rel="stylesheet" />
</head>
- href:定义所链接外部样式表文件的URL,可以是相对路径,也可以是绝对路径。
- rel:定义当前文档与被链接文档之间的关系,在这里需要指定为“stylesheet”,表示被链接的文档是一个样式表文件。
1.1.3 行内式(不推荐)
<标签名 style="属性1:属性值1; 属性2:属性值2; 属性3:属性值3;">
内容
</标签名>
1.2 选择器
1.2.1 通配符选择器
*{...}
1.2.2 标签选择器(元素选择器)
/*标签名{属性:属性值;...}*/
div{...}
1.2.3 类选择器
-
类命名 类名命名时推荐用
-中横线分割单词(任何需要命名的标签均可如此)<标签 class="class-name"></标签> -
给标签指定多个类名,从而达到更多的选择目的
<标签 class="font20 pink"></标签>
/*.类名{属性:属性值;...}*/
.class-name{...}
1.2.4 id选择器
/*
#id{属性:属性值;...}
<div id="return-home">return home</div>
*/
#return-home{...}
1.2.5 后代选择器、子代选择器
/*祖先选择器 后代选择器{属性:属性值;...}*/
.classs-name p{...}/*匹配class-name类的后代中的p标签*/
/*祖先选择器 子代{属性:属性值;...}*/
.classs-name > p{...}/*匹配class-name类的儿子中的p标签*/
区别:后代匹配选择器匹配后代,子代选择器仅匹配直接自带,前者的范围比后者的大。
1.2.6 群组选择器
/*选择器1,选择器2,...{属性:属性值;...}*/
.class-name,#id1,p{...}
1.2.7 伪类选择器
【案例】彻底搞懂 CSS 伪类和伪元素 - 掘金 (juejin.cn)
【原理】CSS中伪类与伪元素,你弄懂了吗? - 知乎 (zhihu.com)
==伪类用于当已有元素处于的某个状态时,为其添加对应的样式,这个状态是根据用户行为而动态变化的。==比如说,当用户悬停在指定的元素时,我们可以通过:hover来描述这个元素的状态。虽然它和普通的css类相似,可以为已有的元素添加样式,但是它只有处于dom树无法描述的状态下才能为元素添加样式,所以将其称为伪类。
伪元素用于创建一些不在文档树中的元素,并为其添加样式。比如说,我们可以通过::before来在一个元素前增加一些文本,并为这些文本添加样式。虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。
a:hover{color:blue;}
div::before{content:'hello';color:red;}
1.3 层叠与继承
多条规则应用于同一个元素时,可能会发生冲突,层叠与继承理论则用于解决冲突。
1.3.1 层叠
-
资源顺序:优先级相同的规则,后面的规则覆盖前面的规则。
-
优先级:通配符选择器<元素选择器<类选择器<id选择器<群组选择器<后代/子代选择器<伪类选择器<内联样式<!important
/*!important覆盖所有规则。*/
.class-name{color:red !important;}
1.3.2 继承
-
一些设置在父元素上的 CSS 属性是可以被子元素继承的
-
控制继承:CSS 为控制继承提供了五个特殊的通用属性值,每个 CSS 属性都接收这些值。
inherit设置该属性会使子元素属性和父元素相同。initial将应用于选定元素的属性值设置为该属性的初始值。revert将应用于选定元素的属性值重置为浏览器的默认样式,而不是应用于该属性的默认值。revert-layer将应用于选定元素的属性值重置为在上一个层叠层中建立的值。unset将属性重置为自然值,也就是如果属性是自然继承那么就是inherit,否则和initial一样
-
重设所有值
all
这是一种撤销对样式所做更改的简便方法,以便回到之前已知的起点。
.class-name{all:initial;}
二、布局
2.1 盒子模型
盒子模型需要从两个方面来理解:一是理解单独一个盒子的内部结构(往往是padding);二是理解多个盒子之间的相互关系(往往是margin)。

| 属性 | 说明 |
|---|---|
| content | 内容,可以是文本或图片 |
| padding | 内边距,用于定义内容与边框之间的距离 |
| margin | 外边距,用于定义当前元素与其他元素之间的距离 |
| border | 边框,用于定义元素的边框 |
div{
width:100px;
height:100px;
overflow:scroll;
display:inline;
padding-top:20px;
padding-right:20px;
padding-bottom:20px;
padding-left:20px;
padding: 20px;
padding: 20px 20px; /*上下 左右*/
padding: 20px 20px 20px 20px;/*上 右 下 左(顺时针)*/
margin-top:20px;
margin-right:20px;
margin-bottom:20px;
margin-left:20px;
margin: 20px;
margin: 20px 20px; /*上下 左右*/
margin: 20px 20px 20px 20px;/*上 右 下 左(顺时针)*/
border:1px solid black;
}
-
content
- 只有块元素才可以设置width和height,行内元素是无法设置width和height的。
- display 是否/如何显示元素。
none 隐藏元素,页面将显示为好像该元素不在其中,如
script。 block 块级元素,如divinline 行内元素,如span - overflow 当内容过多超出width和height时,可以使用overflow属性来指定溢出处理方式。 visible 默认值。内容不会被修剪,会呈现在元素框之外。 hidden 内容会被修剪,并且其余内容是不可见的。 scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。
-
margin 外边距指的是两个盒子之间的距离,它可能是子元素与父元素之间的距离,也可能是兄弟元素之间的距离。
2.2 浮动
【】文档流简介 - CSS | 绿叶学习网 (lvyestudy.com) 【原理】CSS 浮动 (w3school.com.cn)
元素在使用浮动后,就脱离正常的文档流了。于是块元素浮动时可能会出现遮挡效果。
div{float:left;}
.clear{clear:both;}
-
float left 元素向左浮动 right 元素向右浮动
-
clear left 清除左浮动 right 清除右浮动 both 同时清除左浮动和右浮动(常用)
-
我们一般都是在浮动元素后面再增加一个空元素,然后为这个空元素定义clear:both来清除浮动。说白了,前面小弟干了太多坏事,后面得大哥出面才能解决。在实际开发中,凡是用了浮动之后发现有什么不对劲的地方,首先应该检查的是有没有清除浮动。 事实上,清除浮动不仅仅只有clear:both,还有overflow:hidden,以及更为常用的伪元素。当然,这些都是后话了。作为初学者,我们只需要掌握clear:both就可以了。
2.3 定位
| 属性值 | 说明 |
|---|---|
| fixed | 固定定位 |
| relative | 相对定位 |
| absolute | 绝对定位 |
| static | 静态定位(默认值) |
.class-name{
position:fixed/relative/absolute;
top:30px;
left:160px;
right:;
bottom:;
}
-
固定定位,指的是被固定的元素不会随着滚动条的拖动而改变位置,固定定位最常用于实现“回顶部特效”。
-
相对定位,指的是该元素的位置是相对于它的原始位置计算而来的。
-
绝对定位在几种定位方式中使用最为广泛,因为它能够很精确地把元素定位到任意你想要的位置。一个元素变成了绝对定位元素,这个元素就完全脱离文档流了,绝对定位元素的前面或后面的元素会认为这个元素并不存在,此时这个元素浮于其他元素上面,已经完全独立出来了。
-
默认情况下,固定定位和绝对定位的位置是相对于浏览器而言,而相对定位的位置是相对原始位置而言。
三、样式
3.1 字体样式 font
| 属性 | 说明 |
|---|---|
| font-family | 字体类型 |
| font-size | 字体大小 |
| font-weight | 字体粗细 |
| font-style | 字体风格 |
| color | 字体颜色 |
.class-name{
font-family:Arial,"宋体","微软雅黑";
font-size:14px;
font-weight:400;
font-size:initial;
font-style:initial;
color:red;
}
-
font-family
- 可以同时指定多个字体,中间以逗号隔开,表示如果浏览器不支持第一个字体,则会尝试下一个,直到找到合适的字体。
- 中文字体需要加英文状态下的引号,英文字体一般不需要加引号。当需要设置英文字体时,英文字体名必须位于中文字体名之前。
- 如果字体名中包含空格、#、$等符号,则该字体必须加英文状态下的单引号或双引号,例如font-family: "Times New Roman";。
- 尽量使用系统默认字体,保证在任何用户的浏览器中都能正确显示。
- 宋体英文SimSun;微软雅黑英文Microsoft YaHei。
-
font-size 现在网页中普遍使用14px+,尽量使用偶数的数字字号
-
font-weight
- 其可用属性值:normal、bold、bolder、lighter、100~900(100的整数倍)。
- 其中100相当于lighter,400相当于normal,700相当于bold,而900相当于bolder,不推荐直接使用数值。
- 对于实际开发来说,一般我们只会用到bold这一个属性值,其他的几乎用不上,这一点大家要记住。
-
font-style normal 正常(默认值);italic 斜体;oblique 斜体 实际开发中,font-style属性很少用得到
-
font:综合设置字体样式 选择器{font: font-style font-weight font-size/line-height font-family;}
3.2 文本样式
字体样式针对的是“文字本身”的型体效果,而文本样式针对的是“整个段落”的排版效果。字体样式注重个体,文本样式注重整体。因此在CSS中,特意使用了“font”和“text”两个前缀来区分这两类样式。
| 属性 | 说明 |
|---|---|
| text-indent | 首行缩进 |
| text-align | 水平对齐 |
| text-decoration | 文本修饰(下划线、中划线、顶划线) |
| text-transform | 大小写转换 |
| line-height | 行高 |
| letter-spacing | 字母间距 |
| word-spacing | 词间距 |
.class-name{
font-size:14px;
text-indent:28px;/*设置为font-size的两倍*/
text-align:left;
text-decoration:underline;
text-transform:none;
line-height:22px;
letter-spacing:0px;
word-spacing:0px;
}
-
text-align: left/center/right 在实际开发中,我们只会用到居中对齐(center)这一个,其他两个几乎用不上。此外,text-align属性不仅对文本有效,对图片(img元素)也有效。
-
text-decoration: none 去除所有的划线效果(默认值) underline 下划线 line-through 中划线 overline 顶划线
- text-decoration:none; 常用于去除a标签的下划线。
-
text-transform none 无转换(默认值) uppercase 转换为大写 lowercase 转换为小写 capitalize 只将每个英文单词首字母转换为大写
- text-transform属性是针对英文而言,因为中文不存在大小写之分。
-
line-height 一般情况下,行距比字号大7/8像素左右就可以了。
-
letter-spacing 每一个中文汉字都被当做一个“字”,而每一个英文字母也当做一个“字”。
-
word-spacing 一般来说,word-spacing只针对英文单词而言。
-
在实际开发中,对于中文网页来说,我们很少去定义字间距以及词间距这些东西。letter-spacing和word-spacing只会用于英文网页,这两个平常我们几乎用不上,因此只需简单了解即可。
3.3 边框样式 border
| 属性 | 说明 |
|---|---|
| border-width | 边框的宽度 |
| border-style | 边框的外观 |
| border-color | 边框的颜色 |
border: 1px solid red;/*简写形式*/
/*上边框*/
border-top-width: 1px;
border-top-style: solid;
border-top-color: red;
border-top: 1px solid red;
/*下边框*/
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: red;
border-bottom: 1px solid red;
/*左边框*/
border-left-width: 1px;
border-left-style: solid;
border-left-color: red;
border-left: 1px solid red;
/*右边框*/
border-right-width: 1px;
border-right-style: solid;
border-right-color: red;
border-right: 1px solid red;
border: 1px solid red; /*边框整体样式*/
border-bottom: 0px; /*去除下边框*/
-
border-style: none 无样式 dashed 虚线 solid 实线
- 除了上面列出这几个,还有hidden、dotted、double等取值。不过其他取值几乎用不上,可以直接忽略。
-
border-bottom:0px; border-bottom:0; border-bottom:none; 是等价的。
3.4 列表样式
| 属性 | 说明 |
|---|---|
| list-style-type | 列表项符号 |
| list-style-image | 列表项图片 |
list-style-type: 取值;
list-style-type:none;
list-style-image: url(图片路径);/*自定义列表项符号*/
-
list-style-type属性是针对ol或者ul元素的,而不是li元素。其中,list-style-type属性取值如下所示:
- 通用 none 去除列表项符号
- ol decimal 阿拉伯数字:1、2、3…(默认值) lower-roman 小写罗马数字:i、ii、iii… upper-roman 大写罗马数字:I、II、III… lower-alpha 小写英文字母:a、b、c… upper-alpha 大写英文字母:A、B、C…
- ul disc 实心圆●(默认值) circle 空心圆○ square 正方形■
-
我们只需要记住list-style-type:none;这一个就可以了,其他的不需要记住。因为在实际开发中,对于使用list-style-type属性来定义列表项符号,几乎用不上。所以那些属性值也不需要去记忆。
-
一般情况下我们都不会用list-style-image属性来实现,而是使用更为高级的iconfont图标技术来实现
3.5 表格样式
| 属性 | 说明 |
|---|---|
| caption-side | 表格标题位置 |
| border-collapse | 表格边框合并 |
| border-spacing | 表格边框间距 |
table{
caption-side:bottom;
border-collapse:separate;
border-spacing:1px;
}
-
caption-side属性取值只有2个 top 标题在顶部(默认值) bottom 标题在底部
-
border-collapse属性取值只有2个,可以直接用border-spacing实现此属性功能。 separate 边框分开,有空隙(默认值) collapse 边框合并,无空隙
3.6 图片样式
| 属性 | 说明 |
|---|---|
| width | 元素宽度 |
| height | 元素高度 |
| border | 元素边框 |
| float | 文字环绕 |
-
图像对齐
- 水平对齐 text-align : left/center/right 在图像父亲元素中设置
- 竖直对齐 vertical-align : top/middle/baseline/bottom 在图像本身设置
-
float:left/right
.container{
text-align:center;/*控制子元素中的图像对齐*/
}
image{
width:50px;
border:1px solid grey;
float:left;
vertical-align:middle;
}
3.7 背景样式
背景样式包括两个方面:背景颜色和背景图片。定义“背景颜色”使用的是 background-color 属性,而定义“背景图片”则比较复杂,往往涉及以下属性:
| 属性 | 说明 |
|---|---|
| background-image | 定义背景图片地址 |
| background-repeat | 定义背景图片重复,例如横向重复、纵向重复 |
| background-position | 定义背景图片位置 |
| background-attachment | 定义背景图片固定 |
div{
color: red;
background-color: #81B29A;
background-image: url("assets/batch.png");
background-repeat: no-repeat;
background-position: 100px 100px;
background-position: center bottom;
background-attachment: fixed;
}
-
background-repeat属性取值有4个 repeat 在水平方向和垂直方向上同时平铺(默认值) repeat-x 只在水平方向(x轴)上平铺 repeat-y 只在垂直方向(y轴)上平铺 no-repeat 不平铺
-
background-position
- background-position属性设置的两个值是相对该元素的左上角来说的
- 当background-position属性取值为“关键字”时,也要同时设置水平方向和垂直方向的值,只不过这两个值使用关键字来代替而已。 top left 左上 top center 靠上居中 top right 右上 center left 居中靠左 center center 正中 center right 居中靠右 bottom left 左下 bottom center 靠下居中 bottom right 右下
-
使用background-attachment属性来定义背景图片是随元素一起滚动还是固定不动。在实际开发中,background-attachment这个属性几乎用不上
3.8 超链接样式
| 伪类 | 说明 |
|---|---|
| a:link | 定义a元素未访问时的样式 |
| a:visited | 定义a元素访问后的样式 |
| a:hover | 定义鼠标经过a元素时的样式 |
| a:active | 定义鼠标点击激活时的样式 |
a{text-decoration:none;}
a:link{color:red;}
a:visited{color:purple;}
a:hover{color:yellow;}
a:active{color:blue;}
3.9 鼠标样式

div{cursor:default;}
div:hover{cursor:pointer;}
body{cursor:url(),default;}
-
在实际开发中我们一般只会用到3个:default、pointer和text。
-
自定义鼠标样式 cursor: url(图片地址), 属性值; 属性值一般为3种:default、pointer和text。