5.CSS层次选择器-CSS进阶
五、CSS选择器
选择器,就是用一种方式把我们想要的那一个标签选中。把它选中了,你才能操作这个标签的
CSS样式
。CSS
中有很多把你所需要的标签选中的方式,这些不同的方式就是不同的选择器。 在2.CSS选择器-CSS基础中我们学习了以下几种选择器:
- 元素选择器
- id选择器
- class选择器
- 群组选择器
这些都是CSS
中最基本的选择器。
层次选择器,就是通过元素之间的层次关系来选择元素。
层次选择器在实际开发中也是相当重要的,常见的层次关系包括:父子、后代、兄弟和相邻。
CSS层次选择器
选择器 |
说明 |
---|---|
M N |
后代选择器,选择M元素内部后代N元素(所有的N元素) |
M>N |
子代选择器,选择M元素内部子代N元素(所有第1级N元素) |
M~N |
兄弟选择器,选择M元素后所有的同级N元素。 |
M N |
相邻选择器,选择M元素相邻的下一个元素(M、N是同级元素) |
1.后代选择器
后代选择器:选中元素内部中所有的指定的某个元素,包括子元素和其它后代元素。
(1)语法格式
M N{}
① 说明
M元素和N元素之间用空格隔开,表示选中M元素内部所有N元素后代。
(2)示例
① 例1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<title>CSS层次选择器</title>
<style type="text/css">
/*后代选择器*/
#first p{
color:#FFC0CB;
}
</style>
</head>
<body>
<div id="first">
<p>
<strong>子元素:</strong>人生若只如初见
</p>
<div id="second">
<p>
<strong>子元素的子元素:</strong>当时只道是寻常
</p>
</div>
<p>
<strong>子元素:</strong>越努力,越幸运。
</p>
</div>
</body>
</html>
<!--
#first p:会选中id为first元素的所有后代p元素。
-->
后代选择器示例11.png
2.子代选择器
子代选择器:选中元素内部的某一个子元素,只限子元素。 和后代选择器很相似,但却有不同。
(1)语法格式
M>N{}
① 说明
M元素和N元素之间用 > 隔开,表示选中M元素内部的子元素N。
(2)子代选择器与后代选择器区别
- 后代选择器,选取的是元素内部所有的元素,包括子元素。
- 子代选择器,选取的是元素内部某一个元素,只限子元素。
(3)示例
① 例1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<title>CSS层次选择器</title>
<style type="text/css">
/*子代选择器*/
#first>p{
color:#FFC0CB;
}
</style>
</head>
<body>
<div id="first">
<p>
<strong>子元素:</strong>人生若只如初见
</p>
<div id="second">
<p>
<strong>子元素的子元素:</strong>当时只道是寻常
</p>
</div>
<p>
<strong>子元素:</strong>越努力,越幸运。
</p>
</div>
</body>
</html>
<!--
#first p:会选中id为first元素的子元素p。
-->
子代选择器示例1.png
3.兄弟选择器
兄弟选择器:选中元素后面(不包括前面)的某一类兄弟元素(同级)。
(1)语法格式
M~N{}
① 说明
M元素和N元素之间用 ~ 隔开,表示选中 M 元素后面的所有某一类兄弟元素 N。
(2)示例
① 例1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<title>CSS层次选择器</title>
<style type="text/css">
/*兄弟选择器*/
#second ~ p{
color:greenyellow;
}
</style>
</head>
<body>
<div id="first">
<p>
<strong>子元素:</strong>人生若只如初见
</p>
<div id="second">
<p>
<strong>子元素的子元素:</strong>当时只道是寻常
</p>
</div>
<p>
<strong>子元素:</strong>越努力,越幸运。
</p>
<p>
<strong>子元素:</strong>
男儿何不带吴钩,收取关山五十州。
请君暂上凌烟阁,若个书生万户侯?
</p>
</div>
</body>
</html>
<!--
#second p:会选中id为second元素的所有兄弟元素p,且只选择second后面的兄弟元素,前面的兄弟元素不管。
-->
兄弟选择器示例1.png
4.相邻选择器
相邻选择器:选中元素后面(不包括前面)的某一个相邻的兄弟元素(同级)。 相邻选择器与兄弟选择器也很像。
(1)语法格式
M N{}
① 说明
M元素和N元素之间用 + 隔开,表示选中 M 元素后面某一个相邻的兄弟元素 N。
(2)相邻选择器与兄弟选择器区别
- 兄弟选择器,选中元素后面所有的某一类元素。
- 相邻选择器,选中元素后面相邻的某一个元素。
(3)示例
① 例1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<title>CSS层次选择器</title>
<style type="text/css">
/*相邻选择器*/
#second + p{
color:greenyellow;
}
</style>
</head>
<body>
<div id="first">
<p>
<strong>子元素:</strong>人生若只如初见
</p>
<div id="second">
<p>
<strong>子元素的子元素:</strong>当时只道是寻常
</p>
</div>
<p>
<strong>子元素:</strong>越努力,越幸运。
</p>
<p>
<strong>子元素:</strong>
男儿何不带吴钩,收取关山五十州。
请君暂上凌烟阁,若个书生万户侯?
</p>
</div>
</body>
</html>
<!--
#second p:会选中id为second元素后面相邻的1个兄弟元素p。
-->
相邻选择器示例1.png
② 例2
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<title>CSS层次选择器</title>
<style type="text/css">
*{
padding: 0; /*去除所有元素的 padding和margin*/
margin: 0;
}
ul{
list-style-type:none; /*去除列表默认符号*/
}
/*相邻选择器*/
li+li{
border-top:2px solid #FFD700;
}
</style>
</head>
<body>
<ul>
<li>第 1 li元素</li>
<li>第 2 li元素</li>
<li>第 3 li元素</li>
<li>第 4 li元素</li>
<li>第 5 li元素</li>
</ul>
</body>
</html>
<!--
“1i+li”使用的是相邻选择器,表示“选择li元素相邻的下一个li元素”。
由于最后一个li元素没有相邻的下一个元素,所以对于最后一个元素,它是没有下一个l1元素可以选取的。
“li+li{ border-top:2 px solid #FFD700;}”使得两个li元素之间添加一个边框的效果。
-->
相邻选择器示例2.png
(4)实际开发
在两个列表项之间使用相邻选择器是一个非常棒的技巧,在实际开发中如果我们想要在两个元素之间实现什么效果(例如:border、 margin等),我们会经常用到这个技巧! 一定要重点掌握。
① 例1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8"> <!--必须放在title标签及其它meta标签前-->
<title>CSS层次选择器</title>
<style type="text/css">
*{
padding: 0; /*去除所有元素的 padding和margin*/
margin: 0;
}
ul{
list-style-type:none;
}
li{
float: left; /*去除列表默认符号*/
}
/*相邻选择器*/
li+li{
border-left:2px solid #FFD700;
}
</style>
</head>
<body>
<ul>
<li>第 1 li元素 </li>
<li>第 2 li元素 </li>
<li>第 3 li元素 </li>
<li>第 4 li元素 </li>
<li>第 5 li元素</li>
</ul>
</body>
</html>
相邻选择器示例3.png
(5)关于CSS3
到目前为止,我们已经学习了 8 种选择器,其实还有非常多重要的选择器,但大部分都是
CSS3
新增的。CSS3
非常强大,能实现非常多很棒的效果,以后一定要去学习一下CSS3
。
- Android View体系(九)自定义View
- Android网络编程(二)HttpClient与HttpURLConnection
- Spring Batch入门篇
- Android网络编程(三)Volley用法全解析
- Android网络编程(八)源码解析OkHttp中篇[复用连接池]
- Mybatis SqlSessionTemplate 源码解析
- MapperScannerConfigurer处理过程源码分析
- Spring Boot中使用Actuator的/info端点输出Git版本信息
- Spring Batch:文件的批量读写Flatfile(XML,CSV,TXT)
- 项目本机部署过程中的若个问题
- Android View体系(十一)自定义ViewGroup
- Java并发编程(四)Java内存模型
- Android View体系(十)自定义组合控件
- 算法(一)时间复杂度
- HTML 教程
- HTML 简介
- html div 标签介绍
- html span 标签介绍
- html a 超链接标签
- HTML Br换行标签介绍
- HTML P段落标签介绍
- HTML br与p标签区别
- Html H 标题标签
- html px em pt长度单位
- HTML form 标签
- HTML radio 单选框
- HTML B 加粗标签
- HTML strong加粗粗体标签
- HTML em 强调标签
- HTML i 斜体标签
- HTML u下划线标签
- HTML s 删除线标签
- Html img 图片标签
- Html上标注sup与下标注sub标签
- HTML nobr 禁止换行标签
- HTML hr 水平线标签
- HTML label 标签
- HTML input 标签
- HTML textarea 标签
- HTML select下拉列表标签
- HTML checkbox 多选框
- HTML font color 标签
- HTML iframe 框架标签
- HTML Table 表格
- HTML dl dt dd 标签
- HTML ol li有序列表标签
- HTML ul li 无序列表标签
- HTML 注释
- CSS 教程
- CSS 简介
- CSS 语法
- CSS Id 和 Class选择器
- CSS 样式的创建
- CSS background 背景介绍
- CSS 文本样式
- CSS font 字体
- CSS A 链接
- CSS ul ol列表样式
- CSS TABLE 样式
- CSS 框模型
- CSS border 边框
- CSS Outlines 轮廓
- CSS 外边距 Margin
- CSS Padding 内边距
- CSS 分组和嵌套选择器
- CSS 尺寸 (Dimension)
- CSS Display 属性
- CSS Position 定位
- CSS Float 浮动
- CSS 水平对齐(Horizontal Align)
- CSS 组合选择符
- CSS 伪类
- CSS 伪元素
- CSS 导航栏
- CSS 下拉菜单
- CSS 图片廊
- CSS 图像透明/不透明
- CSS sprite 图像拼合技术
- CSS 媒体类型
- CSS 属性选择器
- CSS 实例
- 聊聊dubbo-go的failsafeCluster
- 【HDFS】distcp报错Check0sum mismatch
- ffmpeg转换多媒体文件,真香
- 静态库与动态库的那些事
- 云服务器网络延迟与丢包问题定位(mtr工具)
- Spark UDF1 输入复杂结构
- Qt音视频开发6-ffmpeg解码处理
- MySQL 百万级数据量分页查询方法及其优化
- 教你设计一个超牛逼的本地缓存!
- Flutter延时任务、Flutter通过Future与Timer实现延时任务
- DDIA 笔记
- 工作流和状态机
- CentOS 6.x 搭建:Headless Chrome + ChromeDriver + Selenium的爬虫环境系统
- 聊聊dubbo-go的registryAwareCluster
- 同样是空值,null和undefined有什么异同?