共计 6326 个字符,预计需要花费 16 分钟才能阅读完成。
CSS3 介绍
CSS3 在 CSS2 基础上,增强 或新增 了许多特性,弥补了 CSS2 的众多不足之处,使得 Web 开发变得更为高效和便捷。
CSS3 的现状
-
浏览器支持程度不够好,有些需要添加 私有前缀
-
移动端支持优于 PC 端
-
不断改进中
-
应用相对广泛
应对的策略:渐进增强
- (1)坚持 渐进增强 的原则:让低版本浏览器能正常访问页面,高版本的浏览器用户体验更好。【重要】
比如说,同样是一个头像,可能在低版本的浏览器中,头像方的;在高版本的浏览器中,头像是圆的。
-
(2)考虑用户群体。
-
(3)遵照产品的方案。
参考链接:
浏览器的版本问题
由于 CSS3 普遍存在兼容性问题,为了避免因兼容性带来的干扰,浏览器的建议版本为:
-
Chrome 浏览器 version 46+
-
Firefox 浏览器 firefox 42+
如何使用手册
CSS 参考手册的网址:http://css.doyoe.com/
CSS 参考手册的下载链接:http://download.csdn.net/download/smyhvae/10243974
在查看 CSS 参考手册 时,需要注意以下符号:
比如说,{1,4}
表示可以设置一至四个参数。
下面讲 CSS3 的基础知识。本文讲一下 CSS3 选择器的内容。
CSS3 选择器
我们之前学过 CSS 的选择器,比如:
div 标签选择器
.box 类名选择器
#box id 选择器
div p 后代选择器
div.box 交集选择器
div,p,span 并集选择器
div>p 子代选择器
* : 通配符
div+p: 选中 div 后面相邻的第一个 p
div~p: 选中的 div 后面所有的 p
CSS3 新增了许多 灵活 查找元素的方法,极大的提高了查找元素的效率和 精准度 。CSS3 选择器与 jQuery 中所提供的 绝大部分 选择器兼容。
属性选择器
属性选择器的标志性符号是 []
。
匹配含义:
^:开头 $:结尾 *:包含
格式:
-
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。
比如说,我们用属性选择器去匹配标签的 className,是非常方便的。
这里我们用 class 属性来举例。代码举例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title> 选择器 - 属性 </title>
<style>
body {
margin: 0;
padding: 0;
font-family: '微软雅黑';
background-color: #F7F7F7;
}
.wrapper {
width: 1024px;
margin: 0 auto;
}
.wrapper > section {
min-height: 300px;
margin-bottom: 30px;
box-shadow: 1px 1px 4px #DDD;
background-color: #FFF;
}
.wrapper > header {
text-align: center;
line-height: 1;
padding: 20px;
margin-bottom: 10px;
font-size: 30px;
}
.wrapper section > header {
line-height: 1;
padding: 10px;
font-size: 22px;
color: #333;
background-color: #EEE;
}
.wrapper .wrap-box {padding: 20px;}
form {
width: 300px;
height: 300px;
margin: 0 auto;
}
form input[type="text"] {
width: 200px;
height: 30px;
}
form input[type="password"] {
width: 200px;
height: 30px;
}
.attr1 { }
.download { }
.attr1 a[href="./a.rmvb"] {color: red;}
.attr1 a[href="./b.rmvb"] {color: pink;}
/* E[attr~=val] 表示的一个单独的属性值 这个属性值是以空格分隔的 */
.attr2 a[class~="download"] {color: red;}
/* E[attr|=val] 表示的要么一个单独的属性值 要么这个属性值是以 "-" 分隔的 */
.attr3 a[class|="download"] {color: red;}
/* E[attr*=val] 表示的属性值里包含 val 字符并且在“任意”位置 */
.attr4 a[class*="download"] {color: red;}
/* E[attr^=val] 表示的属性值里包含 val 字符并且在“开始”位置 */
.attr5 a[class^="download"] {color: red;}
/* E[attr$=val] 表示的属性值里包含 val 字符并且在“结束”位置 */
.attr6 a[class$="download"] {color: red;}
</style>
</head>
<body>
<div class="wrapper">
<header>CSS3- 属性选择器 </header>
<section>
<header> 简介 </header>
<div class="wrap-box">
<form action="">
<ul>
<li>
姓名: <input type="text">
</li>
<li>
密码: <input type="password">
</li>
<li>
性别: <input type="radio"> 男
<input type="radio"> 女
</li>
<li>
兴趣: <input type="checkbox" name="" id=""> 写代码
</li>
<li>
<input type="submit" value=" 提交 ">
</li>
</ul>
</form>
</div>
</section>
<section class="attr1">
<header>E[attr]</header>
<div class="wrap-box">
<a href="./a.rmvb" class="download download-movie"> 下载 </a>
<a href="./b.rmvb" class="download download-movie"> 下载 </a>
<a href="./a.mp3" class="download download-music"> 下载 </a>
</div>
</section>
<section class="attr2">
<header>E[attr~=attr]</header>
<div class="wrap-box">
<a href="./a.rmvb" class="download download-movie"> 下载 </a>
<a href="./b.rmvb" class="download download-movie"> 下载 </a>
<a href="./a.mp3" class="download download-music"> 下载 </a>
</div>
</section>
<section class="attr3">
<header>E[attr|=attr]</header>
<div class="wrap-box">
<a href="./a.rmvb" class="download"> 下载 </a>
<a href="./b.rmvb" class="download-movie"> 下载 </a>
<a href="./a.mp3" class="download-music"> 下载 </a>
</div>
</section>
<section class="attr4">
<header>E[attr*=val]</header>
<div class="wrap-box">
<a href="./a.rmvb" class="download"> 下载 </a>
<a href="./b.rmvb" class="moviedownload"> 下载 </a>
<a href="./a.mp3" class="downloadmusic"> 下载 </a>
</div>
</section>
<section class="attr5">
<header>E[attr^=val]</header>
<div class="wrap-box">
<a href="./a.rmvb" class="download"> 下载 </a>
<a href="./b.rmvb" class="moviedownload"> 下载 </a>
<a href="./a.mp3" class="downloadmusic"> 下载 </a>
</div>
</section>
<section class="attr6">
<header>E[attr$=val]</header>
<div class="wrap-box">
<a href="./a.rmvb" class="download"> 下载 </a>
<a href="./b.rmvb" class="moviedownload"> 下载 </a>
<a href="./a.mp3" class="downloadmusic"> 下载 </a>
</div>
</section>
</div>
</body>
</html>
最后来张表格:
结构伪类选择器
伪类选择器的标志性符号是 :
。
CSS 中有一些伪类选择器,比如:link
、:visited
、:hover
、:active
、:focus
。
CSS3 又新增了其它的伪类选择器。这一小段,我们来学习 CSS3 中的 结构伪类选择器 :即通过 结构 来进行筛选。
1、格式:(第一部分)(重要)
-
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。
理解:
(1)这里我们要好好理解 父元素 的含义,它指的是:以 E 元素的父元素为参考。
(2)注意:以上选择器中所选到的元素的类型,必须是指定的类型 E,如果选不中,则无效。这个要好好理解,具体可以看 CSS 参考手册中的 E:nth-child(n)
的示例。我们可以理解成:先根据选择器找到选中的全部位置,如果发现某个位置不是类型 E,则该位置失效。
(3)另外,E:nth-child(n)
这个属性也很有意思。比如,针对下面这样一组标签:
<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>
<li>9</li>
<li>10</li>
</ul>
上方代码中:
-
如果选择器写成
li:nth-child(2)
,则表示第 2 个li
。 -
如果选择器写成
li:nth-child(n)
,则表示 所有的li
。因为此时的n
表示 0,1,2,3,4,5,6,7,8…..(当 n 小于 1 时无效,因为 n = 0 也是不会选中的) -
如果选择器写成
li:nth-child(2n)
,则表示所有的 第偶数个 li。 -
如果选择器写成
li:nth-child(2n+1)
,则表示所有的 第奇数个 li。 -
如果选择器写成
li:nth-child(-n+5)
,则表示 前 5 个 li。 -
如果选择器写成
li:nth-last-child(-n+5)
,则表示 最后 5 个 li。 -
如果选择器写成
li:nth-child(7n)
,则表示选中 7 的倍数。。
上面列举的选择器中,我们只要记住:n
表示 0,1,2,3,4,5,6,7,8….. 就很容易明白了。
2、格式:(第二部分)
-
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。
既然上面这几个选择器带有type
,我们可以这样理解:先在同级里找到所有的 E 类型,然后根据 n 进行匹配。
3、格式:(第三部分)
-
E:empty
匹配没有任何子节点(包括空格等 text 节点)的元素 E。 -
E:target
匹配相关 URL 指向的 E 元素。要配合锚点使用。
举例:
我们可以把多个伪类选择器结合起来使用,比如:
如果想把上图中,第一行的前三个 span 标红,我们可以这样使用结构伪类选择器:
dt:first-child span:nth-of-type(-n+3) {color: red;}
最后来张表格:
伪元素选择器
伪元素选择器的标志性符号是 ::
。
1、格式:(第一部分)
-
E::before
设置在 元素 E 前面(依据对象树的逻辑结构)的内容,配合 content 属性一起使用。 -
E::after
设置在 元素 E 后面(依据对象树的逻辑结构)的内容,配合 content 属性一起使用。
E:after
、E:before
在旧版本里是伪类,在 CSS3 这个新版本里是伪元素。新版本里,E:after
、E:before
会被自动识别为E::after
、E::before
,按伪元素来对待,这样做的目的是用来做兼容处理。
举例:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
/*::before 和::after 是通过 css 模拟出的 html 标签的效果 */
span::before{
content:"smyhvae";
color:red;
background-color: pink;
width: 50px;
height: 50px;
display: inline-block;
}
span::after{
content:" 永不止步 ";
color:yellowgreen;
}
/* 给原本的 span 标签设置一个默认的属性 */
span{border: 1px solid #000;}
</style>
</head>
<body>
<span> 生命壹号 </span>
</body>
</html>
效果如下:
上图可以看出:
-
通过伪元素选择器,就可以添加出类似于 span 标签的效果(记得要结合 content 属性使用)。
-
通过这两个属性添加的伪元素,是 行内元素,需要转换成块元素才能设置宽高。
2、格式:(第二部分)
-
E::first-letter
设置元素 E 里面的 第一个字符 的样式。 -
E::first-line
设置元素 E 里面的 第一行 的样式。 -
E::selection
设置元素 E 里面被鼠标选中的区域的样式(一般设置颜色和背景色)。
E::first-letter
的举例:
E::first-line
的举例:
最后来张表格: