CSS 知识点总结
期末也要抽空学,给我卷!
所有学习笔记已开源上传至 github,欢迎Star和PR!
样式表和选择器
Cascading Style Sheet,层叠样式表,用于给 HTML 页面标签添加各种样式,定义网页的显示效果
CSS 将网页内容和显示样式进行分离,增强了显示功能。
HTML 的缺陷
- 不能够适应多种设备
- 要求浏览器必须智能化足够庞大
- 数据和显示没有分开
- 功能不够强大
CSS 优点
- 使数据和显示分开
- 降低网络流量
- 使整个网站视觉效果一致
- 使开发效率提高了
CSS 语法
选择器 {
k: v;
k: v;
k: v;
k: v;
}
选择器 {
k: v;
k: v;
k: v;
k: v;
}
CSS 和 HTML 结合的方式
-
行内样式:某个特定标签内使用 style 属性
-
内嵌样式表:在页面的 head 里采用 style 标签
-
引入外部 css 文件的方式
-
采用 link 标签
-
采用 import
两种引入方式的区别:外部样式表中不能写 link 标签,但是可以写 import 语句
-
CSS 选择器
指定 CSS 作用的标签
选择器总共两大类:基本选择器和扩展选择器
常用的三种器的区别
- 标签选择器针对的是页面上的一类标签
- ID 选择器针对特定的一个标签
- 类选择器可以被多种标签使用
基本选择器
标签选择器
选择所有某种类型的标签,用于描述共性
- 所有的标签,都可以是选择器
- 选择的是所有,而不是一个
p{ font-size:14px; }
p 标签内的文字都是 14px
ID 选择器
针对某一个特定的标签来使用,以#
来定义
#mytitle{ border:3px dashed green;}
任何的 HTML 标签都可以有 id 属性。表示这个标签的名字。
这个标签的名字,可以任取,但是:
- 只能有字母、数字、下划线
- 必须以字母开头
- 不能和标签同名
- HTML 页面不能出现相同的 ID
一个标签可以被多个 css 选择器选择,共同作用
类选择器
用.
来定义某一个类的标签
.eat{
font-size: 18px;
font-weight: 900;
}
- 不要试图用一个类写完所有标签的样式,多写几个类
- 每一个类尽可能小,有公共的概念,让更多的标签使用
- 到底用 id 还是 class?
- 尽可能用 class
- 因为 id 是给 js 使用的,js 通过 id 来获取标签,所以 css 层面尽可能不用 id
- 另一方面,我们认为一个有 id 的元素,有动态效果
- 类上样式,id 上行为
通用选择器
*
,匹配任何标签,效率低,不使用
CSS 的高级选择器
后代选择器
如果选择的是E F
,表示所有属于 E 元素的后代的 F 元素
div p{
font-size: 19px;
}
div span{
font-family: 微软雅黑;
font-size: 3em
}
<div> <p> wtf </p> </div>
<div> <span> omg </span> </div>
交集选择器
两个选择器紧密相连,以标签名开头
如果后一个是类选择器,就写成div.food
,如果后一个是 id 选择器,就写成div#food
div.food{
font-family: 微软雅黑;
font-size: 3em;
}
并集选择器
简单来说就是多选
p,
h1,
#mytitle,
.one {
color: red;
}
CSS3 的一些选择器
子代选择器
>
,只有是儿子的时候才能被选择
div > p {
color: red;
}
只能选择
<div>
<p>我是div的儿子</p>
</div>
不能选择
<div>
<ul>
<p>我是div的孙子</p>
</ul>
</div>
序选择器
设置无序列表<ul>
中的第一个<li>
为红色:
ul li:first-child {
color: red;
}
设置无序列表<ul>
中的最后一个<li>
为红色:
ul li:last-child {
color: blue;
}
下一个兄弟选择器
+
表示选择下一个兄弟
把 h3 元素后面的一个 p 标签变成红色
h3 + p{
color: red;
}
单位
HTML 的单位只有一种,即像素px
,所以单位可省略
CSS中必须要写单位,因为没有默认单位
绝对单位
in
:英寸Inches (1 英寸 = 2.54 厘米)cm
:厘米Centimetersmm
:毫米Millimeterspt
:点Points,或者叫英镑 (1点 = 1/72英寸)pc
:皮卡Picas (1 皮卡 = 12 点)
换算规则
1 in
= 2.54 cm
= 25.4 mm
= 72 pt
= 6 pc
相对单位
px
:像素
em
:印刷单位相当于12个点
%
:百分比,相对周围的文字的大小
字体属性
常见字体属性
p{
font-size: 50px; /*字体大小*/
line-height: 30px; /*行高*/
font-family: 幼圆,黑体; /*字体类型:如果没有幼圆就显示黑体,没有黑体就显示默认*/
font-style: italic ; /*italic表示斜体,normal表示不倾斜*/
font-weight: bold; /*粗体*/
font-variant: small-caps; /*小写变大写*/
}
为了严格保证字在行里面居中,我们的工程师有一个约定: 行高、字号,一般都是偶数。这样可以保证,它们的差一定偶数,就能够被2整除。
如何让单行文本居中
如果文本只有一行,那么将行高和盒子高设置成一样大,就可以保证单行文本垂直居中。
如果需要多行文本居中就需要根据总行高自己算 top-margin
也可以使用vertical-algin
属性来使指定行内元素(inline)、行内块元素(inline-block)、表格的单元格(table-cell)的垂直对齐方式。主要是用于图片、表格、文本的对齐。
vertical-align: middle; /*指定行级元素的垂直对齐方式。*/
字号 行高 字体
font-size: 14px;
line-height: 24px;
font-family: "宋体";
/* 将字体属性连写 (字体粗细 字号/行高 字体) */
font: 400 14px/24px "宋体";
一般将英文字体放在最前面,这样做到中英文字体分离
font-family: "Times New Roman","微软雅黑","宋体";
文本属性
letter-spacing: 0.5cm ;
单个字母之间的间距word-spacing: 1cm;
单词之间的间距text-decoration: none;
字体修饰:none 去掉下划线、underline 下划线、line-through 中划线、overline 上划线text-transform: lowercase;
单词字体大小写。uppercase大写、lowercase小写color:red;
字体颜色text-align: center;
在当前容器中的对齐方式。属性值可以是:left、right、center(居中)、justifytext-transform: lowercase;
单词的字体大小写。属性值可以是:uppercase
(单词大写)、lowercase
(单词小写)、capitalize
(每个单词的首字母大写)
列表属性
ul li{
list-style-image:url(images/2.gif) ; /*列表项前设置为图片*/
margin-left:80px; /*公有属性*/
}
overflow 属性
用来处理超出范围的内容
overflow
属性的属性值可以是:
visible
:默认值。多余的内容不剪切也不添加滚动条,会全部显示出来。hidden
:不显示超过对象尺寸的内容。auto
:如果内容不超出,则不显示滚动条;如果内容超出,则显示滚动条。scroll
:Windows 平台下,无论内容是否超出,总是显示滚动条。Mac 平台下,和auto
属性相同。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>EthanLoo's</title>
<style type="text/css">
div {
width: 100px;
height: 100px;
margin-right: 100px;
float: left;
}
#div1 {
overflow: auto; /*超出的部分浏览器解决*/
}
#div2 {
overflow: visible; /*超出的部分显示*/
}
#div3 {
overflow: hidden; /*超出的部分隐藏*/
}
</style>
</head>
<body>
<div id='div1'>
什么是前端工程师?总而言之前端工程师就是运用HTML/CSS/JavaScript等Web技术,在工作中配合设计师实现用户界面,和后端工程师进行数据对接,完成Web应用开发的职位。
</div>
<div id='div2'>
什么是前端工程师?总而言之前端工程师就是运用HTML/CSS/JavaScript等Web技术,在工作中配合设计师实现用户界面,和后端工程师进行数据对接,完成Web应用开发的职位。
</div>
<div id='div3'>
什么是前端工程师?总而言之前端工程师就是运用HTML/CSS/JavaScript等Web技术,在工作中配合设计师实现用户界面,和后端工程师进行数据对接,完成Web应用开发的职位。
</div>
</body>
</html>
背景属性
background-color 背景颜色
css2.1 中的三种表示方法
- 单词
- RGB 表示法
- 16进制表示法
background-color: red;
background-color: rgb(255,0,0);
background-color: #ff0000;
css3 中新增的颜色表示方法
- RGBA 表示法
- 红 绿 蓝 透明度
- HSLA 表示法
- 色调 饱和度 亮度 透明度
background-color: rgba(0, 0, 255, 0.3);
background-color: hsla(240,50%,50%,0.4);
background-repeat
-
repeat
默认值,平铺满 -
no-repeat
(不要平铺) -
repeat-x
(横向平铺) -
repeat-y
(纵向平铺)
background-position
- 背景定位
-
用像素描述
background-position:向右偏移量 向下偏移量;
-
用单词描述
background-position: 描述左右的词 描述上下的词;
background-attachment
- 控制背景是否固定
- fixed 固定
- scroll 不固定
background-attachment:fixed;
background 综合属性
background:red url(1.jpg) no-repeat 100px 100px fixed;
等价于
background-color:red;
background-image:url(1.jpg);
background-repeat:no-repeat;
background-position:100px 100px;
background-attachment:fixed;
background-size
/* 宽、高的具体数值 */
background-size: 500px 500px;
/* 宽高的百分比(相对于容器的大小) */
background-size: 50% 50%; // 如果两个属性值相同,可以简写成:background-size: 50%;
background-size: 100% auto; //这个属性可以自己试验一下。
/* heroImage:图片始终填充满容器,且保证长宽比不变。图片如果有超出部分,则超出部分会被隐藏。 */
background-size: heroImage;
/* contain:将图片完整地显示在容器中,且保证长宽比不变。可能会导致容器的部分区域为空白。 */
background-size: contain;
background-origin
控制从什么位置开始显示背景
/* 从 padding-box 内边距开始显示背景图 */
background-origin: padding-box; //默认值
/* 从 border-box 边框开始显示背景图 */
background-origin: border-box;
/* 从 content-box 内容区域开始显示背景图 */
background-origin: content-box;
background-clip
设置元素的背景是否延伸到边框下面
-
border-box
超出 border-box 的部分,将裁剪掉 -
padding-box
超出 padding-box 的部分,将裁剪掉 -
content-box
超出 content-box 的部分,将裁剪掉
background-image
- 线性渐变:沿着某条直线朝一个方向产生渐变效果。
- 径向渐变:从一个中心点开始沿着四周产生渐变效果。
- 重复渐变
线性渐变
background-image: linear-gradient(方向, 起始颜色, 终止颜色);
background-image: linear-gradient(to right, yellow, green);
径向渐变
background-image: radial-gradient(辐射的半径大小, 中心的位置, 起始颜色, 终止颜色);
background-image: radial-gradient(100px at center,yellow ,green);
Clip-path
clip-path
属性可以创建一个只有元素的部分区域可以显示的剪切区域。区域内的部分显示,区域外的隐藏。
鼠标悬停放大图片
.div1 {
width: 320px;
height: 320px;
border: 1px solid red;
background: url(http://img.smyhvae.com/20191006_1410.png) no-repeat;
background-size: heroImage;
/* 裁剪出圆形区域 */
clip-path: circle(50px at 100px 100px);
transition: clip-path .4s;
}
.div1:hover{
/* 鼠标悬停时,裁剪出更大的圆形 */
clip-path: circle(80px at 100px 100px);
}
伪类选择器
伪类是用来添加一些选择器的特殊效果。
比如 div 是属于 box 类的,这很明确,但是 a 属于什么类是不明确的,需要看用户点击前的状态和点击后的状态。
静态伪类和动态伪类
静态伪类
只能用于超链接的样式
:link
超链接点击之前:visited
链接被访问过之后
动态伪类
针对所有标签都适用的样式
:hover
“悬停”:鼠标放到标签上的时候:active
“激活”: 鼠标点击标签,但是不松手时。:focus
是某个标签获得焦点时的样式(比如某个输入框获得焦点)
a 标签
超链接的四种状态
:link
“链接”:超链接点击之前:visited
“访问过的”:链接被访问过之后:hover
“悬停”:鼠标放到标签上的时候:active
“激活”: 鼠标点击标签,但是不松手时。
在 CSS 中,这四种状态必须按照固定的顺序写
a:link {
color: antiquewhite;
}
a:visited {
color: green;
}
a:hover {
color: salmon;
}
a:active {
color: skyblue;
}
制作一个导航
<body>
<nav>
<li><a href="">百度</a></li>
<li><a href="">谷歌</a></li>
<li><a href="">雅虎</a></li>
<li><a href="">bilibili</a></li>
</nav>
</body>
nav {
width: 400px;
height: 50px;
margin: 100px auto;
border: 1px solid black;
background-image: linear-gradient(to right, #C9D6FF, #E2E2E2);
}
nav li {
list-style: none;
float: left;
width: 100px;
height: 50px;
text-align: center;
line-height: 50px;
}
nav li a {
display: block;
width: 100px;
height: 50px;
}
nav a:link,
nav a:visited {
text-decoration: none;
color: black;
}
nav li a:hover {
background-image: linear-gradient(to right, #acb6e5, #acb6e5);
}
标准写法是 link,visited 和 hover 这三个伪类都需要写。
一般开发的时候 a:link, a:visited
都可以省略,简写在 a
标签里。
动态伪类
:hover
悬停:active
激活:focus
获得焦点
<body>
<input type="text" name="" id="test-input" />
<br />
<div>
麻烦点我一下
</div>
</body>
div:hover {
color: green;
}
div:active {
color: purple;
}
div:focus {
color: red;
}
input:hover {
color: green;
}
input:active {
color: purple;
}
input:focus {
color: red;
}
CSS 继承性和层叠性
CSS 的继承性
- 关于文字样式的属性,都具有继承性。
- 这些属性包括:color、 text-开头的、line-开头的、font-开头的。
- 关于盒子、定位、布局的属性,都不能继承。
CSS 的层叠性
当多个选择器,选择了某个元素的时候,要按照如下顺序统计权重:
- id 选择器
- 类选择器、属性选择器、伪类选择器
- 标签选择器、伪元素选择器
-
计算权重
统计各个选择器的数量,优先级高的胜出,图中的 p 标签是红色
-
权重相同时
就近原则,以后一个样式为准
-
尝试实现
<body> <div class="sr"> <ul> <li class="ssr">word</li> <li>word</li> <li>word</li> <li>word</li> <li>word</li> <li>word</li> <li>word</li> </ul> </div> </body>
错误写法
.sr ul li{ color: blue; } .ssr{ color: red; }
这样写的话第一个的选择器的权重为 0 1 2,第二个选择器的权重为 0 1 0
正确写法
.sr ul li{ color: blue; } .sr ul li.ssr{ color: red; }
-
继承性的说明
如果不能直接选中某个元素,通过继承性影响的计算的权重为0,最后显示的颜色为 blue
<body> <div class="sr"> <div class="ssr"> <p>666</p> </div> </div> </body>
p { /* 权重0,0,1 */ color: blue; } .ssr { /* 权重0,0,0 */ color: red; } .sr { /* 权重0,0,0 */ color: green; }
层叠性权重计算总结
- 对于相同权重的选择器,其排序为:行级样式 > 内嵌样式表 > 外部样式表
- 对于相同类型的样式表,其选择器排序为:ID选择器 > 类选择器 > 标签选择器
- 外部样式表的 ID 选择器 > 内嵌样式表的标签选择
!important 标记
font-size:60px !important;
!important
提升的是一个属性,不是选择器!important
无法提升继承的权重,该是0还是0!important
无法影响就近原则
尽量不要用
盒模型
包括 div, span, a
一个盒子的五个主要属性
- width和height:内容的宽度、高度(不是盒子的宽度、高度)
- padding:内边距
- border:边框
- margin:外边距
上面这个盒子实际上是 302*202,因为有边框
padding
padding 就是内边距,padding 实际上也会有背景颜色
有四个方向的 padding
padding-top: 30px;
padding-right: 20px;
padding-bottom: 40px;
padding-left: 100px;
综合属性的写法是:上 右 下 左
padding:30px 20px 40px 100px;
如果只写三个值,顺序是:上 右 下 // 左和右相等
如果只写了两个值:顺序是:上 右 // 下和上相等,左和右相等
border
border 本身是一个综合属性
border:1px solid red;
两种拆的方式
-
按三要素拆
border-width:10px; //边框宽度 border-style:solid; //线型 border-color:red; //颜色。
-
按方向拆
border-top:10px solid red; border-right:10px solid red; border-bottom:10px solid red; border-left:10px solid red;
-
当然也可以全部拆开,写成12行
利用 border 画一个🔺
div {
height: 0px;
width: 0px;
border-bottom: 30px solid red;
border-left: 20px solid transparent;
border-right: 20px solid transparent;
}
浮动
标准文档流
特性
-
空白折叠现象
无论多少空格,换行,都会折叠成一个空格。
-
高矮不齐,底边对齐
-
自动换行,一行写不满,换行写
行内元素和块级元素
标签分为两种等级
- 行内元素
- 块级元素
两者区别
- 行内元素
- 与其他行内元素并排
- 不能设置宽、高,默认宽度就是文字的宽度
- 块级元素
- 霸占一行,不能与其他元素并列
- 能设置宽、高,如果不设置宽度,宽度默认是父类的100%
两者分类
HTML 角度
- 文本级标签:p、span、a、b、i、u、em
- 容器级标签:div、h系列、li、dt、dd
CSS 角度
-
行内元素:span、a、b、i、u、em
-
块级元素:p、div、h系列、li、dt、dd
只有 p 变了个位置
行内和块级的转换
display: inline;
display: block;
实现浮动
css 里布局用的最多的属性
div 本身是一个块级元素
.ssr{
height: 200px;
width: 300px;
background-color: aquamarine;
}
.sr{
height: 200px;
width: 200px;
background-color: cadetblue;
}
但是加上浮动之后就可以并排了
.ssr {
height: 200px;
width: 300px;
background-color: aquamarine;
float: left;
}
.sr {
height: 200px;
width: 200px;
background-color: cadetblue;
float: left;
}
-
浮动的元素脱离标准流
一旦一个元素浮动了,就能够并排和设置宽高了,所有标签浮动之后不区分行内和块级
-
浮动的元素互相贴靠
当改变窗口的时候,设置浮动的元素会根据次序和空间自动贴近,如果贴不下就换到下一行去
-
浮动的元素周围的字会像水一样
标准流中的文字不会被浮动的盒子遮挡住
永远不是一个东西单独浮动,浮动都是一起浮动
-
收缩
一个浮动的元素如果没有设置width,将自动收缩为内容的宽度
作业
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>EthanLoo's</title>
<link rel="stylesheet" href="./test.css" />
</head>
<body>
<header>
<div class="header1"></div>
<div class="header2"></div>
<div class="header3"></div>
</header>
<div class="content">
<div class="left-content"></div>
<div class="right-content">
<div class="main">
<div class="news">
<div class="news1"></div>
<div class="news2"></div>
<div class="news3"></div>
</div>
<div class="hot"></div>
</div>
<div class="links"></div>
</div>
</div>
<footer></footer>
</body>
</html>
header {
margin: 0 auto;
height: 103px;
width: 970px;
margin-bottom: 10px;
}
.header1 {
float: left;
height: 103px;
width: 277px;
background-color: red;
}
.header2 {
float: right;
height: 49px;
width: 137px;
background-color: greenyellow;
margin-bottom: 8px;
}
.header3 {
float: right;
height: 46px;
width: 679px;
margin-left: 10px;
background-color: greenyellow;
}
.content {
margin: 0 auto;
height: 435px;
width: 970px;
margin-bottom: 10px;
}
.left-content {
height: 435px;
width: 310px;
background-color: orange;
margin-right: 10px;
float: left;
}
.main {
float: left;
height: 400px;
width: 650px;
margin-bottom: 10px;
}
.news {
float: left;
height: 400px;
width: 450px;
}
.news1,
.news2,
.news3 {
width: 450px;
background-color: skyblue;
margin-bottom: 10px;
float: left;
}
.news1 {
height: 240px;
}
.news2 {
height: 110px;
}
.news3 {
height: 30px;
}
.hot {
float: right;
background-color: purple;
width: 190px;
height: 400px;
}
.links {
float: right;
width: 650px;
height: 25px;
background-color: green;
}
footer {
margin: 0 auto;
height: 35px;
width: 970px;
background-color: darkblue;
}
清除浮动
指清除浮动和浮动之间的影响
-
加高法
给浮动元素的祖先元素增加高度
<div> //设置height <p></p> <p></p> <p></p> </div> <div> //设置height <p></p> <p></p> <p></p> </div>
-
给父类加个
clear:both
<div> <p></p> <p></p> <p></p> </div> <div> //clear:both; <p></p> <p></p> <p></p> </div>
-
隔墙法
在两个浮动元素中间建一个墙(内墙可以让父类自动被撑高)
<div> <p></p> <p></p> <p></p> <div class="cl h10"></div> </div> <div> <p></p> <p></p> <p></p> </div>
-
overflow:hidden
针对每个需要撑高的元素加上该属性
margin
margin 塌陷
标准文档流中,竖直方向的 margin 不叠加,取最大值
盒子居中
将 margin 的值设为 auto,表示自动。
当 left, right 都是 auto 的时候,盒子就居中了
margin-left: auto;
margin-right: auto;
简写为
margin:0 auto;
注意点
- 只有标准流的盒子才能使用这个居中方法
- 使用
margin: 0 auto;
的盒子,必须有 width,否则相当于霸占了一行 margin: 0 auto;
只是让盒子居中,文本居中需要使用text-align: center;
善用外层的 padding 而不是里层的margin
定位属性
position: absolute; <!-- 绝对定位 -->
position: relative; <!-- 相对定位 -->
position: fixed; <!-- 固定定位 -->
相对定位
可以用于盒子的位置的微调
-
left:盒子右移
-
right:盒子左移
-
top:盒子下移
-
bottom:盒子上移
position: relative;
left: 50px;
top: 50px;
相对定位不脱离标准文档流,因此不会被其他元素挤掉
用途
- 微调元素
- 做绝对定位的参考
绝对定位
定义横纵坐标,原点在父容器的左上角或左下角。横坐标用left表示,纵坐标用top或者bottom表示。
position: absolute; /*绝对定位*/
left: 10px; /*横坐标*/
top/bottom: 20px; /*纵坐标*/
绝对定位脱离了标准文档流,所以它可以直接设置宽和高
参考点
- 如果用 top 描述,那么参考点就是页面的左上角,不是浏览器的左上角
- 如果用 bottom 描述,参考点就是浏览器首屏尺寸对应的左下角
子绝父相(子元素是绝对定位,父元素是相对定位)是有意义的,可以保证父亲没有脱标,儿子脱标在父亲的范围内移动。
工程上会让父亲浮动,相对定位,0偏移,让儿子使用绝对定位
绝对定位的儿子会忽略父类盒子的padding
固定定位
相对浏览器窗口进行定位,无论页面如何滚动,这个盒子显示的位置不变
- 返回到顶部
- 顶部导航栏
z-index
定位后的元素可以使用的图层位置,值越大越上层
CSS3 选择器
渐进增强策略
让低版本浏览器能正常访问页面,高版本的浏览器用户体验更好
div 标签选择器
.box 类名选择器
#box id选择器
div p 后代选择器
div.box 交集选择器
div,p,span 并集选择器
div>p 子代选择器
* : 通配符
div+p: 选中div后面相邻的第一个p
div~p: 选中的div后面所有的p
属性选择器
属性选择器的标志性符号是[]
E[属性名=值]
^:开头 $:结尾 *:包含
-
E[title]
选中页面的E元素,并且E存在 title 属性即可。 -
E[title="abc"]
选中页面的E元素,并且E需要带有title属性,且属性值完全等于abc。 -
E[attr~=val]
选择具有 att 属性且属性值为:用空格分隔的字词列表,其中一个等于 val 的E元素。 -
E[attr|=val]
表示要么是一个单独的属性值,要么这个属性值是以“-”分隔的。 -
E[title^="abc"]
选中页面的E元素,并且E需要带有 title 属性,属性值以 abc 开头。 -
E[title$="abc"]
选中页面的E元素,并且E需要带有 title 属性,属性值以 abc 结尾。 -
E[title*="abc"]
选中页面的E元素,并且E需要带有 title 属性,属性值任意位置包含abc。
结构伪类选择器
CSS 中已经有的动态伪类选择器
:link
、:active
、:visited
、:hover
CSS3 新增了其他的伪类选择器,其中有通过结构来进行筛选的选择器
-
E:first-child
匹配父元素的第一个子元素E。 -
E:last-child
匹配父元素的最后一个子元素E。 -
E:nth-child(n)
匹配父元素的第n个子元素E。注意,盒子的编号是从
1
开始算起,不是从0
开始算起。 -
E:nth-child(odd)
匹配奇数 -
E:nth-child(even)
匹配偶数 -
E:nth-last-child(n)
匹配父元素的倒数第n个子元素E。
E:first-of-type
匹配同类型中的第一个同级兄弟元素E。E:last-of-type
匹配同类型中的最后一个同级兄弟元素E。E:nth-of-type(n)
匹配同类型中的第n个同级兄弟元素E。E:nth-last-of-type(n)
匹配同类型中的倒数第n个同级兄弟元素E。
-
E:empty
匹配没有任何子节点(包括空格等text节点)的元素E。 -
E:target
匹配相关URL指向的E元素。要配合锚点使用。
伪元素选择器
伪元素选择器的标志性符号是 ::
E:after
、E:before
在旧版本里是伪类。CSS3 里,E:after
、E:before
会被自动识别为E::after
、E::before
,按伪元素来对待,这样做的目的是用来做兼容处理。
-
E::before
设置在 元素E 前面(依据对象树的逻辑结构)的内容,配合content属性一起使用。 -
E::after
设置在 元素E 后面(依据对象树的逻辑结构)的内容,配合content属性一起使用。
使用伪元素选择器,可以添加出类似 span 标签的效果,同时这两个属性添加伪元素是行内元素,需要转换成块元素才能设置宽高。
-
E::first-letter
设置元素 E 里面的第一个字符的样式。 -
E::first-line
设置元素 E 里面的第一行的样式。 -
E::selection
设置元素 E 里面被鼠标选中的区域的样式(一般设置颜色和背景色)。
CSS3 属性
文本
text-shadow:设置文本的阴影
text-shadow: 20px 27px 22px pink;
水平位移 垂直位移 模糊程度 阴影颜色
box-sizing
外加模式
box-sizing: content-box;
此时设置的 width 和 height 是内容区域的宽高,盒子实际的宽度 = width + padding + border
内减模式
box-sizing: border-box;
此时设置的 width 和 height 是盒子的总宽高,盒子实际的宽度 = width
私有前缀
如果直接这么写,浏览器是不会显示的 🙅
background: linear-gradient(left, green, yellow);
需要根据浏览器的不同添加前缀
background: -webkit-linear-gradient(left, green, yellow);
background: -moz-linear-gradient(left, green, yellow);
background: -ms-linear-gradient(left, green, yellow);
background: -o-linear-gradient(left, green, yellow);
background: linear-gradient(left, green, yellow);
边框
边框圆角
四个角
border-radius: 60px;
单个属性写法
border-top-left-radius: 60px 120px; //参数解释:水平半径 垂直半径
border-top-right-radius: 60px 120px;
border-bottom-left-radius: 60px 120px;
border-bottom-right-radius: 60px 120px;
画圆形的两个方式
/*画圆形的方式一*/
.box:nth-child(1) {
border-radius: 50px;
}
/*画圆形的方式二*/
.box:nth-child(2) {
border-radius: 50%;
}
边框阴影
box-shadow: 水平偏移 垂直偏移 模糊程度 阴影大小 阴影颜色
box-shadow: 15px 21px 48px -2px #666;
-
水平偏移:正值向右 负值向左。
-
垂直偏移:正值向下 负值向上。
-
模糊程度:不能为负值。
边框图片
单独写
/* 边框图片的路径*/
border-image-source: url("images/border.png");
/* 图片边框的裁剪*/
border-image-slice: 27;
/*图片边框的宽度*/
border-image-width: 27px;
/*边框图片的平铺*/
/* repeat :正常平铺 但是可能会显示不完整*/
/*round: 平铺 但是保证 图片完整*/
/*stretch: 拉伸显示*/
border-image-repeat: stretch;
综合属性
border-image: url("images/border.png") 27/20px round;
CSS3 动画
过渡
-
transition-property: all;
如果希望所有的属性都发生过渡,就使用all。 -
transition-duration: 1s;
过渡的持续时间。 -
transition-timing-function: linear;
运动曲线。属性值可以是:linear
线性ease
减速ease-in
加速ease-out
减速ease-in-out
先加速后减速
-
transition-delay: 1s;
过渡延迟。多长时间后再执行这个过渡动画。
综合属性
transition: 让哪些属性进行过度 过渡的持续时间 运动曲线 延迟时间;
transition: all 3s linear 0s;
2D转换
缩放scale
transform: scale(x, y);
transform: scale(2, 0.5);
参数解释: x:表示水平方向的缩放倍数。y:表示垂直方向的缩放倍数。如果只写一个值就是等比例缩放。y大于1表示放大,小于1表示缩小。
位移translate
transform: translate(水平位移, 垂直位移);
transform: translate(-50%, -50%);
-
参数为百分比,相对于自身移动。
-
正值:向右和向下。 负值:向左和向上。
位移的应用:让绝对定位中的盒子在父亲里居中
div {
width: 600px;
height: 60px;
background-color: red;
position: absolute; 绝对定位的盒子
left: 50%; 首先,让左边线居中
top: 0;
transform: translate(-50%); 然后,利用translate,往左走自己宽度的一半【推荐写法】
旋转
transform: rotate(角度);
transform: rotate(45deg);
参数解释:正值 顺时针;负值:逆时针。
3D 旋转
transform: rotateX(360deg); //绕 X 轴旋转360度
transform: rotateY(360deg); //绕 Y 轴旋转360度
transform: rotateZ(360deg); //绕 Z 轴旋转360度
项目实战
还原了半个豆瓣首页,纯HTML+CSS,代码还很不成熟。