CSS3的新特性
1.CSS3的现状
- 新增的CSS3特性有兼容性问题
- 移动端支持优于PC端
- 不断改进中
- 应用相对广泛
- 现阶段主要学习:新增选择器和盒子模型以及其他特性
2.CSS3新增选择器
CSS3新增了选择器,可以更加便捷、自由的选择目标元素
- 属性选择器
- 结构伪类选择器
- 伪元素选择器
2.1属性选择器
属性选择器可以根据元素特定属性来选择元素,这样就可以不用借助于类选择器或者id选择器
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS3新增属性选择器</title>
<style>
/* 属性选择器 */
/* 必须是input标签,同时必须具有value属性 */
/*input[value] {
color: pink;
} */
/*只选择type属性值为text的input表单元素*/
input[type=text] {
color: aqua;
}
/* 选择首先是div,然后具有class属性,并且属性值必须是incon开头的这些元素 */
div[class^=incon] {
color: skyblue;
}
/* 选择首先是section,然后是具有class属性,且属性值必须是以data结尾的这些元素 */
section[class$=data] {
color: burlywood;
}
/* 选择首先是p,然后是具有class属性,且属性值里有xt的元素 */
p[class*=xt] {
color: crimson;
}
</style>
</head>
<body>
<!-- 1.利用属性选择器可以不用借助于类或者id选择器 -->
<!-- <input type="text" value="请输入用户名"> -->
<!-- <input type="text"> -->
<!-- 2.属性选择器还可以选择属性=值的某些元素 -->
<input type="text" name="" id="" >
<input type="password" name="" id="">
<!-- 3.属性选择器可以选择属性值开头的某些元素 -->
<div class="incon1">小图标1</div>
<div class="incon2">小图标2</div>
<div class="incon3">小图标3</div>
<div class="incon4">小图标4</div>
<div>我是打酱油的</div>
<!-- 4.属性选择器可以选择属性值结尾的某些元素 -->
<section class="icon1-data">我是安其拉</section>
<section class="icon2-data">我是哥斯拉</section>
<section class="icon3-ico">我是谁</section>
<!-- 5.属性选择器可以选择属性值里含有值的某些元素 -->
<p class="text1">00001</p>
<p class="text2">00002</p>
<p class="text3">00003</p>
<p class="dasdxtbbb">ddddd</p>
</body>
</html>
注意:类选择器、属性选择器、伪类选择器,权重都是10
2.2结构伪类选择器
结构伪类选择器主要根据文档结构来选择器元素,常用于根据父级选择器里面的子元素
nth-child(n) 选择某个父元素的一个或多个特定子元素
- n可以是数字,关键字和公式
- n如果是数字,就是选择第n个子元素,里面数字从1开始
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS3新增结构伪类选择器</title>
<style>
/* 选择ul里面的第一个li */
ul li:first-child {
background-color: red;
}
/* 选择ul里面的最后一个li */
ul li:last-child {
background-color: blue;
}
/* 选择ul里面的第五个li */
ul li:nth-child(3) {
background-color: darkblue;
}
</style>
</head>
<body>
<ul>
<li>我是第1个孩子</li>
<li>我是第2个孩子</li>
<li>我是第3个孩子</li>
<li>我是第4个孩子</li>
<li>我是第5个孩子</li>
<li>我是第6个孩子</li>
<li>我是第7个孩子</li>
<li>我是第8个孩子</li>
</ul>
</body>
</html>
- n可以是关键字,even偶数,odd奇数
- n可以是公式,常见的公式如下所示,(若公式是n,则会从0开始计算,但是第零个元素或者超出了元素个数的会被忽略)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS3新增结构伪类选择器-nth-child</title>
<style>
/* 把所有偶数的li选出来 */
ul li:nth-child(odd) {
background-color: greenyellow;
}
/* 把所有奇数的li选出来 */
ul li:nth-child(even) {
background-color: skyblue;
}
/* nth-child(n),n从零开始,每次加一,括号里面的字母必须是n */
/* 选择ol里面所有的偶数li */
ol li:nth-child(2n) {
background-color: #4fa;
}
/* 选择ol里面所有的奇数li */
ol li:nth-child(2n+1) {
background-color: #cfc;
}
</style>
</head>
<body>
<ul>
<li>我是第1个孩子</li>
<li>我是第2个孩子</li>
<li>我是第3个孩子</li>
<li>我是第4个孩子</li>
<li>我是第5个孩子</li>
<li>我是第6个孩子</li>
<li>我是第7个孩子</li>
<li>我是第8个孩子</li>
</ul>
<ol>
<li>我是第1个孩子</li>
<li>我是第2个孩子</li>
<li>我是第3个孩子</li>
<li>我是第4个孩子</li>
<li>我是第5个孩子</li>
<li>我是第6个孩子</li>
<li>我是第7个孩子</li>
<li>我是第8个孩子</li>
</ol>
</body>
</html>
区别
nth-child
对父元素里面所有子标签排序,先找到第n个子标签,再看是否与前面指定的标签相对应nth-of-type
对父元素里指定子元素进行排序,先匹配标签,再找第几个
小节
- 结构伪类选择器一般用于选择父盒子里的第几个子元素
nth-child
对父元素里面所有子标签排序,先找到第n个子标签,再看是否与前面指定的标签相对应==nth-of-type
对父元素里指定子元素进行排序,先匹配标签,再找第几个- 关于
nth-child(n)
我们要知道n从0开始计算 - 类选择、属性选择器、伪类选择器权重为10
2.3伪元素选择器(重点)
伪元素选择器可以帮助我们利用CSS创建新标签元素,而不需要HTML标签,从而简化HTML结构
注意:
before
和after
创建一个元素,但是属于行内元素- 新创建的这个元素在文档树中是找不到的,所以叫做伪元素
- 语法:
element::before{}
- before和after必须有content属性
- before在父元素内容的前面创建元素,after在父元素内容的后面插入元素
- 伪类选择器和标签选择器一样,权重为1
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>伪元素选择器</title>
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
}
div::before {
content:'wo';
/* 行内元素直接设置宽高是无效的 */
width: 50px;
height: 50px;
background-color: blue;
}
div::after {
/* 必须写content */
content: '我';
/* 转换为行内块元素 */
display: inline-block;
width: 50px;
height: 50px;
background-color: red;
}
</style>
</head>
<body>
<div>
是
</div>
</body>
</html>
3.CSS3盒子模型
CSS3中可以通过box-sizing
来指定盒模型,有两个值,即可指定为content-box
,border-box
,这样我们计算盒子大小的方式就发生了变化
分为两种情况:
box-sizing: content-box;
盒子大小为width+padding+border(以前默认的方式)box-sizing: border-box;
盒子大小为width,此时padding和border不会撑大盒子
对比如下所示
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS3盒子模型</title>
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
border: 20px solid red;
box-sizing: content-box;
}
p {
width: 200px;
height: 200px;
background-color: pink;
border: 20px solid red;
box-sizing: border-box;
}
</style>
</head>
<body>
<div>
小猪
</div>
<p>
小猪
</p>
</body>
</html>
4.CSS3的其他特性(了解)
- 图片变模糊
- 计算盒子宽度
width: calc
函数
4.1CSS3滤镜filter
filter CSS属性将模糊或者颜色偏移等图形效果应用于元素
例如:filter: blur(5px);
(注意有单位)
4.2CSS3 calc函数
calc()此CSS函数让你在声明CSS属性值时,执行一些计算
width: calc(100% - 80px);
括号里可以是+,-,*,/等运算
注意:计算符号和数字之间要有空格
5.CSS3 过渡 (重点)
过渡(transition)是CSS3中具有颠覆性的特性之一,让可以在不使用flash动画或者JS的情况下,当元素从一种样式变成另一种样式时,为元素添加过渡动画
过渡动画:从一个状态逐渐的过渡到另外一个状态
经常和:hover搭配使用
transition: 要过渡的属性 花费时间 运动曲线 开始时间;
(后面两个可以省略)
谁做过渡给谁加这句代码
例子如下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>CSS3过渡</title>
<style>
div {
width: 200px;
height: 200px;
background-color: pink;
/* transition: 变化的属性 花费的时间 运动曲线 何时开始; */
/* transition: width 3s ease 1s; */
/* 写多个属性时,利用逗号分隔 */
/* transition: width 3s ease 1s , height 3s ease 1s; */
/* 如果想要多个属性都变化,属性写all即可 */
transition: all 3s;
}
div:hover {
width: 400px;
height: 300px;
background-color: skyblue;
}
</style>
</head>
<body>
<div></div>
</body>
</html>