这是我参加「第四届青训营 」笔记创作活动的的第2天
1、什么是CSS
· 层叠样式表
· 用来定义页面元素的样式
2、选择器
2.1 标签选择器
· 标签选择器的作用是为页面中某一类标签指定统一的CSS样式
· 优点是能快速为页面中同类型的标签统一设置样式
· 缺点是不能设计差异化样式,只能选择全部的当前标签
标签名 {
属性1: 属性值1;
}
ul {
}
-
规范:
- 属性值前面,冒号后面,保留一个空格
- 标签名和大括号中间保留空格
2.2 类选择器
如果想要差异化选择不同的标签,单独选一个或者几个标签,可以使用类选择器
.类名 {
属性1: 属性值1;
.....
}
.red {
color: red;
}
2.3 类选择器
- id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式
- HTML 元素以 id属性 来设置 id 选择器,CSS中 id 选择器 以 “#” 来定义
<style>
#byte {
color:pink;
}
</style>
<body>
<div id="byte">字节青训营</div>
</body>
2.4 属性选择器
属性选择器可以根据元素特定的属性来选择元素,这样就可以不用借助于类或者id选择器。
| 选择符 | 含义 |
|---|---|
| E[att] | 选择具有att属性的E元素 |
| E[att=“val”] | 选择具有att属性且属性值等于val的E元素 |
| E[att^=“val”] | 匹配具有att属性且值以val开头的E元素 |
| E[att$=“val”] | 匹配具有att属性且值以val结尾的E元素 |
| E[att*=“val”] | 匹配具有att属性且值中含有val的E元素 |
2.5 结构伪类选择器
- 结构伪类选择器主要根据文档结构来选择元素
- 常用于根据父级选择器选择里面的子元素
| 选择符 | 含义 |
|---|---|
| E:first-child | 匹配父元素中的第一个子元素E |
| E:last-child | 匹配父元素中最后一个E元素 |
| E:nth-child(n) | 匹配父元素中的第n个子元素E |
| E:first-of-type | 指定类型E的第一个 |
| E:last-of-type | 指定类型E的最后一个 |
| E:nth-of-type(n) | 指定类型E的第n个 |
其中n可以是数字,也可以是表达式。如:2n表示偶数,n+5是从第五个开始,-n+5表示前五个。 同时nth-child和nth-of-type也是有区别的:nth-child对父元素里面所有孩子排序选择(序号是固定的),先找到第n个孩子,然后看看是否和E匹配;nth-of-type对父元素里面指定子元素进行排序选择,先去匹配E,然后再根据E找第n个孩子。
2.6 选择器的权重
这是css的三大特性之一的优先级:当同一个元素指定多个选择器,就会有优先级的产生。
- 选择器相同,则执行层叠性
- 选择器不同,则按权重
| 选择器 | 权重 |
|---|---|
| 继承或者 * | 0,0,0,0 |
| 元素选择器(标签选择器) | 0,0,0,1 |
| 类选择器,伪类选择器 | 0,0,1,0 |
| ID选择器 | 0,1,0,0 |
| 行内样式style="" | 1,0,0,0 |
| !important | 无穷大 |
需要注意的是权重可以叠加,但是永远不会有进位。
这里再介绍下CSS其他两大特性.
层叠性:
-
相同选择器设置相同的样式,此时一个样式就会覆盖另一个冲突的样式。
-
层叠性主要解决样式冲突的问题
-
层叠性原则:
- 样式冲突,遵循的原则是就近原则
- 样式冲突,遵循的原则是就近原则
继承性:
标签会继承父标签里面的某些样式。例如文字系列:font-size、color、line-height、text-align等 ,而border、padding、margin等不能继承。
2.7 复合选择器
-
后代选择器
可以选择父元素里面的子元素
元素1 元素2 {
样式声明
}
-
子选择器
子元素选择器只能选择作为某元素的最近一级子元素。
元素1 > 元素2{
样式声明
}
-
并集选择器
并集选择器可以选择多组标签,同时为它们定义相同的样式
元素1,元素2 {
样式声明
}
-
伪类选择器
伪类选择器用于向某些选择器添加特殊的效果,比如给链接添加特殊效果,最大的特点是用冒号表示。
/* a是标签选择器 */
a {
color:gray;
}
/* :hover 是链接伪类选择器,鼠标经过 */
a :hover {
/*鼠标经过的时候,由原来的灰色 变成了红色*/
color:red;
}
3、CSS基本属性
3.1 文字属性
-
font-family
- 各种字体之间必须使用英文状态下的逗号隔开
- 一般情况下,如果有空格隔开的多个单词组成的字体,加引号
- 最常见的几个字体:
div {
font-family: "Microsoft Yahe",tahoma,arial,"Hiragino Sans GB";
}
-
font-size
用于设置字体大小
p{
font-size: 20px;
}
这里需要注意的是谷歌浏览器默认字体为16px,中文版最小字体为12px,若要让Chrome支持小于12px 的文字需要用到缩放。
-
font-weight
用于设置字体的粗细
font-weight: normal | bold | bolder | lighter |number
-
font-style
p {
font-style: normal | italic;
}
平时我们很少给文字加斜体,反而要给斜体标签( em , i )改为不倾斜字体
3.2 文本属性
-
color
div {
color: red;
}
除了预定义的颜色还可以用16进制表示如:#FF0000, #FF6600,#29D794,这也是最常见的。
还有rgb(255,0,0) 或rgb(100%,0%,0%)
R表示红色,G表示绿色,B表示蓝色,取值可以在正整数或者百分数。A表示透明度取值0到1之间。
这里再扩展一下另一种透明度的表示,opacity:取值范围0到1之间,0表示完全透明,1表示不透明,
两者的不同在于opacity会继承父元素的opacity属性,而RGBA设置的元素的后代元素不会继承不透明属性。
-
text-align
用于设置文本内容的水平对齐方式
div {
text-align:left | center | right;
}
-
text-decoration
用于装饰文本,可以给文本添加下划线,删除线,上划线等
div {
text-decoration: underline;
}
-
text-indent
用于指定文本的第一行缩进,通常是将段落的首行缩进
div {
text-indent: 10px;
}
p{
text-indent: 2em;
}
em是一个相对单位,就是当前元素(font-size)1个文字的大小,如果当前元素没有设置大小则会按照父元素的文字大小。
-
line-height
p {
line-height: 26px;
}
一般用于文本垂直居中,设置大小为元素高度。
4、 布局
4.1 盒子模型
-
边框border
允许你指定一个元素边框的样式和颜色
border : borde-width || border-style || border-color
因为边框实际并不是一条直线,如果我们将四条边设置不同的颜色,将边框逐渐放大,可以得到每条边框都是一个梯形,所以可以利用这一点绘制三角形。
.border {
width: 0;
height: 0;
border-style:solid;
border-width: 0 50px 50px;
border-color: transparent transparent #d9534f;
}
-
内边距padding
用于设置内边距,即盒子边框与内容之间的距离
-
外边距margin
用于设置外边距,即控制盒子和盒子之间的距离
4.2 CSS3盒子模型
-
content-box
box-sizing: content-box;
盒子大小为 width + padding + border,此种情况盒子大小为 宽度 + 内边距 + 边框,这也是我们之前写盒子所默认的。
-
border-box
box-sizing: border-box;
此种情况盒子大小为 宽度,不包括内边距和边框,这样 padding 和 border 就不会撑大盒子了(前提是 padding 和 border 不会超过 width 宽度,若超过则为padding 和 border 两者之和。)
4.3 标准流
所谓的标准流,就是标签按照规定好默认方式排列
-
块级元素会独占一行,从上向下顺序排列。
常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table
-
行内元素会按照顺序,从左到右顺序排列,碰到父元素边缘则自动换行。
常用元素:span、a、i、em 等
4.4 浮动
- 有很多的布局效果,标准流没有办法完成,此时就可以利用浮动完成布局, 因为浮动可以改变元素标签默认的排列方式。
选择器 {
float: left || right || none;
}
-
浮动的特性
- 脱标:浮动元素会脱离标准流。
- 如果多个盒子都设置了浮动,则它们会按照属性值一行内显示并且顶端对齐排列
- 浮动元素会具有行内块元素特性
4.4 定位
将盒子定在某一个位置,所以定位也是在摆放盒子,按照定位的方式移动盒子
-
静态定位static
静态定位是元素的默认定位方式,无定位的意思,按照标准流特性摆放位置,它没有边偏移。
选择器 {
position: static;
}
-
相对定位relative
相对定位是元素在移动位置的时候,是相对于它原来的位置来说的。在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待,因此,相对定位并没有脱标,它最典型的应用是给绝对定位当爹的。
-
绝对定位absolute
绝对定位是元素在移动位置的时候,是相对于它的祖先元素来说的,绝对定位不再占用原先的位置。
-
固定定位fixed
固定定位是元素固定于浏览器的可视区的位置,不再占有原先的位置。主要使用场景: 可以在浏览器页面滚动时元素的位置不会改变。
-
粘性定位sticky
粘性定位可以被认为是相对定位和固定定位的混合,以浏览器的可视窗口为参照点移动元素,粘性定位占有原先的位置,必须添加top,left,right,bottom其中一个才有效。
4.5 流式布局(百分比布局)
流式布局,就是百分比布局,也称非固定像素布局。通过盒子的宽度设置成百分比来根据屏幕的宽度来进行伸缩,不受固定像素的限制,内容向两侧填充。
- flex-direction:设置主轴的方向
- justify-content:设置主轴上的子元素排列方式
- flex-wrap:设置子元素是否换行
- align-content:设置侧轴上的子元素的排列方式(多行)
- align-items:设置侧轴上的子元素排列方式(单行)
- flex-flow:复合属性,相当于同时设置了 flex-direction 和 flex-wrap
- align-self:控制子项自己在侧轴上的排列方式
- order:属性定义项目的排列顺序,数值越小,排列越靠前。
4.6 布局排版
- IFC
- BFC
BFC的原则:如果一个元素具有BFC,那么内部元素再怎么弄,都不会影响到外面的元素。
如何触发BFC:
float的值非none
overflow的值非visible
display的值为:inline-block、table-cell...
position的值为:absoute、fixed
5、元素的隐藏与显示
5.1 display显示隐藏
display属性用于设置一个元素应如何显示
display: none; /*隐藏对象*/
display: block; /*除了转换为块级元素之外,同时还有显示元素的意思*/
- display隐藏元素后,不再占有原来的位置
5.2 visibility显示隐藏
visibility属性用于指定一个元素应可见还是隐藏
visibility: visible; /*元素可视*/
visibility: hidden; /*元素隐藏*/
-
visibility 隐藏元素后,继续占有原来的位置。