虽然现在还是不到25的青年人,有时仍会感到恐慌,害怕不定的未来,后悔失去的时间,但细细想来,只有自己才知道,再来一次也不会有太多的改变。
CSS的选择器五花八门,而且以后在JavaScript
中也会用到,所以就把所有的选择器写到一篇文章里好了。
注意:同时为了方便展示,全部使用内部样式表的形式,实际的应用中还是推荐使用外部样式表!!
标签选择器(元素选择器):顾名思义,根据HTML标签名选中指定的元素,使用 HTML 标签名作为选择器,为页面中的一类标签指定样式
语法格式:
标签名 {
属性1: 属性值1;
……
}
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>2.标签选择器title>
div {
color: red;
}
p {
color: yellowgreen;
}
head>
<body>
<div>我是divdiv>
<p>我是1个pp>
<p>我是2个pp>
<p>我是3个pp>
<p>我是4个pp>
<p>我是5个pp>
body>
html>
head
标签中的div和p
就是标签选择器
类选择器:通过给标签添加类名class=""
,可以选择一个或多个标签,为其添加样式
.类名
,一定要记得加.
!!!,在JS中也会用这一类选择器.类名 {
属性1: 属性值1;
……
}
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>类选择器title>
.div1 {
color: red;
}
.p1 {
font-size: 30px;
}
head>
<body>
<div class="div1">我是divdiv>
<p class="div1 p1 p2 p3">我是1个pp>
<p>我是2个pp>
<p>我是3个pp>
<p>我是4个pp>
<p>我是5个pp>
body>
html>
这里有几个类,分别是div1
p1
p2
p3
p4
,给div
标签添加了div1
的类,此处的div
标签就会套用对应的样式。当然,我们并没有写p1 p2 p3
类的样式,所以p
也只有div1
的样式
id选择器:通过HTML标签的id属性选中唯一一个标签。
#id名 {
属性1:属性值1;
……
}
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>4.id choosertitle>
#baby {
color: red;
font-size: 30px;
}
head>
<body>
<div id="baby">baby,你是我的唯一div>
<div id="baby">baby,你是我的唯一div>
body>
html>
注意:这里我们写了具有相同id
的标签,而且发现也可以正常的显示,实际上是浏览器进行了一些修正,实际情况下CSS不允许出现相同的id
如果使用WebStorm
的话编辑器会给出报错提示,VS Code
可能有插件可以给出提示(但我不知道hh)
通配符选择器:用于选中页面中所有的元素
* {
……
}
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>5.wildcard selectortitle>
* {
color: red;
font-size: 30px;
}
head>
<body>
<div>我是divdiv>
<span>我是spanspan>
<p>我是pp>
body>
html>
通配符选择器非常的简单粗暴,他可以给页面中所有的标签添加上相同的样式
选择器分组(并集选择器):同时选中多个选择器对应的元素。当为不同选择器选中的元素设置相同的样式时
选择器1, 选择器2,……, 选择器n {
……
}
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
/* h1 {
color: red;
font-size: 30px;
}
.div1 {
color: red;
font-size: 30px;
}
#baby {
color: red;
font-size: 30px;
} */
h1, .div1, #baby {
color: red;
font-size: 30px;
}
head>
<body>
<h1>我是标题h1>
<div class="div1">我是divdiv>
<p id="baby">你就是我的唯一p>
body>
html>
可以发现并集选择器的优势在于,可以为不同类型的选择器设置相同的样式
交集选择器:选中满足多个选择器需求的元素。
选择器1选择器2……选择器n {
……
}
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Documenttitle>
.d1 {
color: red;
}
p.d1 {
font-size: 50px;
}
head>
<body>
<div class="d1">我是divdiv>
<p class="d1">我是pp>
body>
html>
注意:如果标签选择器不放在第一个,就会变成.d1p
,CSS会把他认为是一个叫d1p
的类,这并不是我们想要的
关系选择器:利用标签之间的关系选中指定的元素。
在开始关系选择器前,首先要进行必要的科普环节:
标签之间的关系:标签之中创建另外一对标签,外面的标签称为父标签,里面的标签称为子标签
标签的一层层父级标签,统称为祖先标签
标签的一层层子级标签,统称为后代标签
同一个层级的标签之间,称为兄弟标签
子元素选择器
父元素A > 子元素B{
……
}
后代元素选择器
祖先元素A 后代元素B {
……
}
兄弟元素选择器
1)相邻兄弟选择器
兄弟A + 兄弟B {
……
}
2)通用兄弟选择器
兄弟A ~ 兄弟B {
……
}
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>relationship selectortitle>
ul>li {
color: red;
}
div span {
color: blue;
}
ul+span {
background-color: #c7decc;
}
ul~span {
background-color: #fde6e0;
}
head>
<body>
<div>
<ul>
<li>项目1li>
<li>项目2li>
<li>项目3
<span>我是spanspan>
li>
ul>
<div>div>
<span>我是spanspan>
<span>小兄弟spanspan>
div>
<ol>
<li>项目1li>
<li>项目2li>
<li>项目3li>
ol>
body>
html>
注意:兄弟选择器
只会往后选,而不会往前选
属性选择器:为带有属性的元素指定样式
语法格式一:标签必须包含某属性
标签名[属性名]
语法格式二:标签属性必须等于某值
标签名[属性名=属性值]
CSS3对属性选择器的扩展:
语法格式三:标签属性以某个值开头
标签名[属性名^=属性值]
语法格式四:标签属性以某个值结尾
标签名[属性名$=属性值]
语法格式五:标签属性必须包含某个值
标签名[属性名*=属性值]
注意:属性选择器实际上由两部分选择器组成,这会影响选择器的优先级,暂且不提。真正的属性选择器是[]及[]里的内容
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>attribute selectortitle>
input[value] {
background-color: #c7decc;
}
input[value="哈哈"] {
background-color: #fde6e0;
}
div[class^="div"] {
background-color: #dce2f1;
}
div[class$="hello"] {
color: red;
}
div[class*="d"] {
font-size: 30px;
}
head>
<body>
<input type="text" value="呵呵">
<input type="text" value="哈哈">
<div class="div1">我是div1div>
<div class="div2">我是div2div>
<div class="div3">我是div3div>
<div class="d1-hello">我是hello1div>
<div class="d2-hello">我是hello2div>
<div class="d3-hello">我是hello3div>
body>
html>
伪类:同一个标签,在不同的状态下显示的样式不同,这一类标签,称为伪类
例如:超链接(未被点击过、已被点击过、鼠标悬停时、鼠标正在点击时)
伪类选择器:选中标签状态的选择器,为标签的状态指定样式。伪类选择器都是以 :
开头
链接伪类选择器
:link
选择未被访问的链接
:visited
选择已被访问的链接
上述两个选择器仅对于超链接使用,下面两个选择器任何标签都适用
:hover
选择鼠标“悬停”时
:active
选择鼠标正在点击时(鼠标点击,不松开时)
其他伪类选择器
:first-child
匹配器第一个子元素
:last-child
匹配最后一个子元素
:nth-child(n)
匹配第n个子元素
n的值可以是以下三种方式:
1. 数字
2. 关键字 odd:奇数,even:偶数
3. 公式(an+b) a b是自然数,n从0开始,递增1
:first-of-type 匹配同类型的第一个子元素
:last-of-type 匹配同类型的最后一个子元素
:nth-of-type(n) 匹配同类型的第n个子元素
element:first-child
匹配父元素下的第一个子元素,是则选中,不是则不选中
element:first-of-type
匹配父元素下所有的子元素中的 第一个 element
:focus
获取某个标签的焦点时(比如文本框获取焦点)
示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pseudo class selectortitle>
a:link {
color: yellowgreen;
}
a:visited {
color: indianred;
}
a:hover {
background-color: #dce2f1;
}
a:active {
background-color: #c7edcc;
font-size: 30px;
}
div p:last-child {
color: red;
}
div p:nth-child(2n+1) {
color: blue;
}
div p:first-of-type {
color: red;
}
input:focus {
background-color: #c7edcc;
}
head>
<body>
<a href="#">超链接a>
<div>
<span>我是spanspan>
<p>第1个p>
<p>第2个p>
<p>第3个p>
<p>第4个p>
<p>第5个p>
div>
<input type="text" name="" id="">
body>
html>
伪元素:在HTML文档中并不真实存在的元素,以两个英文的 ::
开头
常见的伪元素
::before
在元素内部最前面插入一些内容
::after
在元素内部最后面插入内容
::first-letter
在元素内的第一个字母
::first-line
在元素内部的第一行
::selection
表示被选中的内容,只有少量属性可以被设置
注意:
::before
与 ::after
中必须包含content
属性DOM
对其进行操作示例如下:
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Pseudo element selectortitle>
div::before {
content: "乐";
}
div::after {
content: "笑哈哈";
}
p::first-letter {
font-size: 30px;
}
p::first-line {
background-color: #c7decc;
}
p::selection {
color: red;
background-color: #fde6c0;
}
head>
<body>
<div>呵呵div>
<p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Sed voluptas non eligendi aspernatur, ullam, corrupti
eveniet repellat minima magni consectetur accusantium laboriosam, eos cum nemo a explicabo rerum asperiores
quas! Lorem ipsum dolor sit amet consectetur adipisicing elit. Sunt consequatur at natus sapiente aliquid
provident, adipisci in vero explicabo placeat hic nisi unde cum delectus eaque ratione. Nesciunt, impedit ex?
Lorem ipsum dolor sit amet consectetur adipisicing elit. Reiciendis quidem nulla, quisquam numquam molestiae
laudantium officia repellendus incidunt assumenda quam aperiam id dignissimos maxime iste tempora ab rem
perferendis pariatur?p>
body>
html>