1. CSS3的兼容情况
-
Webkit引擎浏览器使用“-webkit-”作为私有属性,像Safari和Chrome浏览器。
-
Gecko引擎浏览器使用“-moz-”作为私有属性,像Firefox浏览器。
-
Presto引擎浏览器使用“-o-”作为私有属性,像Opera浏览器。
-
Trident引擎浏览器使用“-ms-”作为私有属性,只有IE8以上支持,像IE浏览器
2.1 选择相邻兄弟(+)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
/* 相邻兄弟选择器 + */
span+div {
color: red;
}
</style>
</head>
<body>
<div class="content">
<span>哈哈</span>
<div>你好</div>
<span>今天天气不错</span>
</div>
</body>
</html>
2.2 匹配选择器(~)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
/* 匹配选择器 ~ */
/* 位于div后面的所有span */
div ~ span{
color: red;
}
.content div~span{
color: springgreen;
}
</style>
</head>
<body>
<div class="content">
<span>123</span>
<span>123</span>
<span>123</span>
<span>123</span>
<div>哈哈哈</div>
<span>123</span>
</div>
<div class="content1">
<span>123</span>
<span>123</span>
<div>哈哈哈</div>
<span>123</span>
</div>
</body>
</html>
2.3 属性选择器(重点)
CSS3新增加了属性选择器,使选择器引入了通配符的概念。这3中常用的属性选择器如下所示:
选择器 | 描述 |
---|---|
[attribute] | 用于选取带有指定属性的元素。 |
[attribute=value] | 用于选取带有指定属性和值的元素。 |
[attribute^=value] | 匹配属性值以指定值开头的每个元素。 |
[attribute$=value] | 匹配属性值以指定值结尾的每个元素。 |
[attribute*=value] | 匹配属性值中包含指定值的每个元素。 |
[attribute~=value] | 用于选取属性值中(包含)指定词汇的元素,还可以空格为分隔符。 |
[attribute|=value] | 用于选取带有以指定值(开头)的属性值的元素,还可以连字符为分隔符。 |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
[title]{
color: red; /*睡觉还看电视*/
}
[class="box"]{
color: aqua; /*哈哈*/
}
[class^="box"]{
font-weight: bold;
}
[class$="2"]{
font-style: oblique; /*睡觉还看电视 大框架*/
}
[class*="x"]{
color: saddlebrown; /*所有*/
}
[class~="box2"]{
color: orange;/*睡觉还看电视 大框架*/
}
[class|="box"]{
font-family: "华文彩云";/*哈哈 啦啦啦啦*/
}
</style>
</head>
<body>
<div class="box">哈哈</div>
<div class="box1">霓虹</div>
<div class="box pc">懒蛋</div>
<div class="box2" title="">睡觉还看电视</div>
<div class="box box2">大框架</div>
<div class="box box123">烧仙草</div>
<div class="box box-data">额外热</div>
<div class="box2-box-data">额外热</div>
<div class="box-box-data">啦啦啦啦</div>
</body>
</html>
2.4 结构性伪类选择器
结构性伪类选择器是CSS3中新增加的类型选择器。常用的的结构性伪类选择器如下所示:
2.4.1 整体结构类型
-
:first-child 匹配的是某父元素的第一个子元素,可以说是结构上的第一个子元素。
-
:last-child 匹配的是某父元素的最后一个子元素,可以说是结构上的最后一个子元素。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.content h1:first-child{
color: springgreen;/*雨过天晴*/
}
.content h1:last-child{
color: pink; /*h1中的最后一个*/
}
</style>
</head>
<body>
<div class="content">
<h1>雨过天晴</h1>
<h1>阳光总在风雨过</h1>
<h1>阳光总在风雨过</h1>
<h1>阳光总在风雨过</h1>
<h1>阳光总在风雨过</h1>
<h1>阳光总在风雨过</h1>
</div>
<div class="content">
<p>哈哈哈哈哈哈哈哈</p>
<h1>雨过天晴</h1>
<h1>阳光总在风雨过</h1>
<h1>阳光总在风雨过</h1>
<h1>阳光总在风雨过</h1>
<h1>阳光总在风雨过</h1>
<h1>阳光总在风雨过</h1>
</div>
</body>
</html>
2.4.2 标签结构类型
-
:first-of-type 匹配的是某父元素下相同类型子元素中的第一个,比如 p:first-of-type,就是指所有类型为p的子元素中的第一个。这里不再限制是第一个子元素了,只要是该类型元素的第一个就行了。
-
:last-of-type 匹配某个父元素中最后一个某一类型的元素。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .content h1:first-of-style{ color: springgreen;/*雨过天晴*/ } .content h1:last-of-style{ color: pink; /*h1中的最后一个*/ } </style> </head> <body> <div class="content"> <h1>雨过天晴</h1> <h1>阳光总在风雨过</h1> <h1>阳光总在风雨过</h1> <h1>阳光总在风雨过</h1> <h1>阳光总在风雨过</h1> <h1>阳光总在风雨过</h1> </div> <div class="content"> <p>哈哈哈哈哈哈哈哈</p> <h1>雨过天晴</h1> <h1>阳光总在风雨过</h1> <h1>阳光总在风雨过</h1> <h1>阳光总在风雨过</h1> <h1>阳光总在风雨过</h1> <h1>阳光总在风雨过</h1> </div> </body> </html>
2.4.3 指定子元素的序号
-
:nth-child(n) 对指定序号的子元素设置样式(从前往后数)。参数可以是数字(1、2、3)、关键字(odd、even)、公式(2n、2n+3 :使用公式时,n从0开始),参数的索引起始值时1,而不是0。
.content p:nth-child(2n){ font-family: "华文彩云"; /*在p标签中偶数改变字体家族*/ }
-
:nth-last-child(n) 对指定序号的子元素设置样式(从后往前数第几个)。参数同上。
-
:nth-of-type(n) 匹配指定序号的同一种类型的子元素(从前往后数第几个)。参数同上。
-
:nth-last-of-type(n) 匹配 指定序号的同一种类型的子元素(从后往前数第几个)。参数同上。
2.4.4 其他伪类选择器
-
:root:将样式应用到页面的根元素中。root选择器就是将样式应用到根元素中。在整个HTML页面中,指的就是整个“html”部分。(内容改变样式)
-
:empty 指定当元素内容为空白时使用的样式。(为没添加内容的标签添加样式)
-
:not(selector)排除selector选择器选中的元素,不对它们应用样式解析。(去除所有与给定选择器匹配的元素,返回元素集合)
-
:target 对页面中某个target元素指定样式,该样式只在用户单击了页面中的链接,并且跳转到target元素后生效。(跳转之后才有反应)
2.5 文本选择伪元素
-
::selection指定当前元素处于选中状态部分的样式。
2.6 表单中使用的状态伪类选择器
-
:disabled 指定当前元素处于不可用状态时的样式。(元素不可用时的样式)
-
:enabled 指定当前元素处于可用状态时的样式。(改变当前元素样式)
-
:checked 指定表单中单选框或复选框处于选中状态时的样式。
权重回顾
0,0,0,0
css的权重:行内样式,ID选择器,类选择器,标签
!important > 行内样式>ID选择器 > 类选择器|伪类|属性选择器 > 标签> 通配符 > 继承 > 浏览器默认属性
2.7 内容追加伪元素
-
::before:向当前的元素前面追加内容(创建一个伪元素,其将成为匹配选中的元素的第一个子元素)
-
::after:向当前的元素内容后面追加内容(创建一个伪元素,作为已选中元素的最后一个子元素)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> .content:before{ /*添加到前面*/ content: "欢迎来到这里"; background-color: pink; } .content:after{ /*添加到后面*/ content: "下次再来"; background-color: pink; } </style> </head> <body> <div class="content"> 哈哈哈哈 </div> </body> </html>
注意:
:before和::before写法的区别
相同点
1.都可以用来表示伪类对象,用来设置对象前的内容,:before和::before写法是等效的
2.伪类对象要配合content属性一起使用
3.伪类对象不会出现在DOM中,所以不能通过js来操作,仅仅是在 CSS 渲染层加入
4.所以不要用:before或:after展示有实际意义的内容,尽量使用它们显示修饰性内容,
不同点
:before是css2的写法,::before是css3的写法,在H5开发中建议使用::before比较好。
伪元素和伪类区别
伪元素/伪对象:不存在在DOM文档中,是虚拟的元素,是创建新元素。代表某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中。
伪类:存在DOM文档中,逻辑上存在但在文档树中却无须标识的“幽灵”分类。
2.8 JS新增的选择器(重点)
-
querySelector();获取标签
-
querySelectorAll();获取所有
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div class="content">
<div class="box"></div>
单选按钮:<input type="radio">
</div>
<div class="box2">
<h3>1234567890</h3>
<h3>1234567890</h3>
<h3>1234567890</h3>
<h3>1234567890</h3>
<h3>1234567890</h3>
</div>
<script>
// querySelector();//获取标签
var box=document.querySelector(".box");//<div class="box"></div>
console.log(box);
//获取表单
var input=document.querySelector("[type='radio']");
console.log(input); //<input type="radio">
// 获取所有h3
var _h3=document.querySelectorAll('h3');
console.log(_h3);
</script>
</body>
</html>
3. CSS3新增样式属性
3.1 background-image多重背景
在CSS3中可以在一个元素里显示多个背景图像,还可以将多个背景图像进行重叠显示(之间用逗号隔开)。(最后写在最下面)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
.box{
width: 500px;
height: 500px;
border: 1px solid aqua;
background-image: url(./a.jpg),url(./2a.jpg),url(./bj.jpg);/*可以获取多张图片*/
background-repeat: no-repeat;
background-size: 150px 150px;
background-position: 0px 0px,center center,right bottom;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
3.2 background-image的渐变
background-image: linear-gradient(方向,颜色1, 颜色2,...);
#grad { background-image: linear-gradient(to bottom right, red , yellow); } #grad { background-image: linear-gradient(to right, red , yellow); }
3.2.2 径向渐变
径向渐变由它的中心定义。
为了创建一个径向渐变,你也必须至少定义两种颜色节点。颜色节点即你想要呈现平稳过渡的颜色。同时,你也可以指定渐变的中心、形状(圆形或椭圆形)、大小。默认情况下,渐变的中心是 center(表示在中心点),渐变的形状是 ellipse(表示椭圆形)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.content {
/* 径向渐变 */
width: 200px;
height: 200px;
/* background-image: radial-gradient(circle, red, yellow, green); */
/* background-image: radial-gradient(black,white); */
/* background-image: radial-gradient(circle, black, white); */
background-image: radial-gradient(#00FFFF, #00FA9A, #000000);
}
</style>
</head>
<body>
<div class="content"></div>
</body>
</html>