Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:伪类在前端模块化编程中很有用的, 用一个class做为入口 内部元素全部用伪类进行匹配控制, 这是常用的技巧
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>简单选择器:点菜</title>
<style>
/* grid:网格布局;
container:容器,一般是块级元素,也可以设为行内元素;
item:项目;
row:行,column:列;
cell:单元格,grid line:网格线 */
/* 快餐店点菜:grid网格布局实现 */
.head{
width: 400px;
display:grid;
gap: 5px;
}
.item1{
font-size: 2rem;
background-color: rgba(11, 184, 236, 0.993);
display:inline-flex;
justify-content: center;
align-items:center;
}
.container{
/* W300=width: 300px;类同 */
width: 400px;
height: 400px;
/* display:grid--显示块级元素
display:inline-grid--显示行内元素 */![](https://img.php.cn/upload/image/481/936/382/1592776683308501.png)
display:grid;
grid-template-columns: repeat(4,1fr);
gap: 5px;
}
.item{
font-size: 1rem;
background-color: rgb(132, 204, 99);
display:inline-flex;
justify-content: center;
align-items:center;
}
/* 简单选择器 */
/* 元素(=标签)选择器 */
body{
background-color: rgb(170, 223, 172);
}
/* 类选择器:对应着html标签中的class属性 */
.item{
border:2px solid rgb(98, 28, 190);
}
/* 多个类复合应用 */
.item.center{
background-color: rgb(178, 223, 17);
}
/* .item.first{
background-color: lightpink;
} */
/* id选择器 */
.item#first{
background-color: lightpink;
}
/* 层叠样式表,相同元素后面追加的样式会覆盖前面的样式 */
/* *:属于元素级别 *.item=.item*/
.item#first{
background-color: yellow;
}
*.item#first{
background-color: rgb(0, 140, 255);
}
#first.item{
background-color: red;
}
/* 元素<class<id */
/* id,class可以添加到任何元素上,所以可以省略 */
/* id 选择器的应用场景目前只有两种场景:1、表达元素 2、锚点 。将逐渐被class代替。*/
</style>
</head>
<body>
<div class="head">
<div class="item1 center">欢迎光临ABC快餐店</div>
<div class="item1 center">欢迎选餐!</div>
</div>
<br/>
<div class="container">
<div class="item" id="first">A1米饭</div>
<div class="item">A2馒头</div>
<div class="item">A3煎饼</div>
<div class="item">A4油条</div>
<div class="item">B1炒鸡</div>
<div class="item center">B2蒸鱼</div>
<div class="item center">B3烤鸭</div>
<div class="item ">B4焖肉</div>
<div class="item">C1炒青菜</div>
<div class="item center">C2土豆丝</div>
<div class="item center">C3番茄炒蛋</div>
<div class="item">C4地三鲜</div>
<div class="item">D1南瓜粥</div>
<div class="item">D2小米粥</div>
<div class="item">D3八宝粥</div>
<div class="item">D4红豆粥</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>上下文选择器:点菜</title>
<style>
.head{
width: 400px;
display:grid;
gap: 5px;
}
.item1{
font-size: 2rem;
background-color: rgba(11, 184, 236, 0.993);
display:inline-flex;
justify-content: center;
align-items:center;
}
.container{
width: 400px;
height: 400px;
display:grid;
grid-template-columns: repeat(4,1fr);
gap: 5px;
}
.item{
font-size: 1rem;
background-color: rgb(132, 204, 99);
display:inline-flex;
justify-content: center;
align-items:center;
}
body{
background-color: lightgray;
}
/* 1、 后代选择器:空格 */
.head div{
border:2px solid lime;
}
.container div {
border:3px solid lightcoral;
}
/* 2、父子选择器 */
body>div{
border:5px solid red;
}
/* 3、同级相邻选择器 */
.item.center+.item{
/* 此时B2+相邻的是B3;C2C3+相邻=C2相邻的C3+C3相邻的C4 */
background-color: lightgreen;
}
/* 4 、同级所有选择器 */
.item.first1~.item{
background-color: lightsalmon;
}
</style>
</head>
<body>
<div class="head">
<div class="item1 center">欢迎光临ABC快餐店</div>
<div class="item1 center">欢迎选餐!</div>
</div>
<br/>
<div class="container">
<div class="item" id="first">A1米饭</div>
<div class="item">A2馒头</div>
<div class="item">A3煎饼</div>
<div class="item">A4油条</div>
<div class="item">B1炒鸡</div>
<div class="item center">B2蒸鱼</div>
<div class="item ">B3烤鸭</div>
<div class="item ">B4焖肉</div>
<div class="item">C1炒青菜</div>
<div class="item center">C2土豆丝</div>
<div class="item center">C3番茄炒蛋</div>
<div class="item">C4地三鲜</div>
<div class="item first1">D1南瓜粥</div>
<div class="item">D2小米粥</div>
<div class="item">D3八宝粥</div>
<div class="item">D4红豆粥</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>结构伪类选择器:不分组</title>
<style>
.head{
width: 400px;
display:grid;
gap: 5px;
}
.item1{
font-size: 2rem;
background-color: rgba(11, 184, 236, 0.993);
display:inline-flex;
justify-content: center;
align-items:center;
}
.container{
width: 400px;
height: 400px;
display:grid;
grid-template-columns: repeat(4,1fr);
gap: 5px;
}
.item{
font-size: 1rem;
background-color: rgb(132, 204, 99);
display:inline-flex;
justify-content: center;
align-items:center;
}
body{
background-color: lightgray;
}
/* 匹配第一个子元素 .container>*:first-child等于.container>.item:first-child*/
.container>*:first-child{
background-color: lime;
color:brown;
}
.container>.item:first-child {
background-color: lightblue;
}
/* 最后一个子元素 */
.container>:last-child{
background-color: lightpink;
}
/* 选第三个 ,索引从第1开始*/
.container>:nth-child(3){
background-color: lightgreen;
}
/* 只选择偶数单元格 ,even-偶数*/
.container>:nth-child(even){
background-color: lightgreen;
}
/* 只选择偶数单元格 ,odd-奇数*/
.container>:nth-child(odd){
background-color: lightcoral;
}
/* 从指定位置开始,选择剩下的所有元素,从第5个开始后面所有元素如下: */
.container>.item:nth-child(n+5){
background-color: lightslategrey
}
/* 只取前2个 */
.container>.item:nth-child(-n+2){
background-color: lightgreen;
}
/* 只取最后三个 */
.container>.item:nth-last-child(-n+3){
background-color: lightblue;
color:mediumorchid;
}
/* 取第12个,用倒数方式更 直观*/
.container>.item:nth-last-child(5){
background-color: yellow;
}
/* 取第7-10个,怎么取??*/
/* 层叠样式表,相同元素后面追加的样式会覆盖前面的样式 */
</style>
</head>
<body>
<div class="head">
<div class="item1 center">欢迎光临ABC快餐店</div>
<div class="item1 center">欢迎选餐!</div>
</div>
<br/>
<div class="container">
<div class="item" id="first">A1米饭</div>
<div class="item">A2馒头</div>
<div class="item">A3煎饼</div>
<div class="item">A4油条</div>
<div class="item">B1炒鸡</div>
<div class="item center">B2蒸鱼</div>
<div class="item ">B3烤鸭</div>
<div class="item ">B4焖肉</div>
<div class="item">C1炒青菜</div>
<div class="item center">C2土豆丝</div>
<div class="item center">C3番茄炒蛋</div>
<div class="item">C4地三鲜</div>
<div class="item first1">D1南瓜粥</div>
<div class="item">D2小米粥</div>
<div class="item">D3八宝粥</div>
<div class="item">D4红豆粥</div>
</div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>结伪类选择构器:分组</title>
<style>
.head{
width: 400px;
display:grid;
gap: 5px;
}
.item2{
font-size: 2rem;
background-color: yellow;
display:inline-flex;
justify-content: center;
align-items:center;
}
.container{
width: 400px;
height: 400px;
display:grid;
grid-template-columns: repeat(4,1fr);
gap: 5px;
}
.item{
font-size: 1rem;
background-color: rgb(132, 204, 99);
display:inline-flex;
justify-content: center;
align-items:center;
}
.item1{
font-size: 1rem;
background-color: rgb(99, 153, 204);
display:inline-flex;
justify-content: center;
align-items:center;
}
body{
background-color: lightgray;
}
/* 分组结构伪类分二步 */
/* 1、元素按类型分组 */
/* 2、在分组中根据索引选择 */
/* 取div组第一个 */
.container div:first-of-type {
background-color: red;
color:yellow;
}
/* 取div最后一个 */
.container div:last-of-type {
background-color: blue;
}
/* 取span组第一个 */
.container span:first-of-type {
background-color: violet;
}
/* 取span组最后一个 */
.container span:last-of-type {
background-color: yellow;
}
/* 在分组中匹配任何一个*/
.container div:nth-of-type(3) {
background-color: rgb(89, 0, 255);
}
.container span:nth-of-type(3) {
background-color: rgb(89, 0, 255);
}
/* 在分组中匹配任何几个,n=0,正数*/
.container span:nth-of-type(-n+2) {
background-color:red;
}
/* 在分组中匹配任何几个,n=0,倒数*/
.container span:nth-last-of-type(-n+2) {
background-color:yellow;
}
</style>
</head>
<body>
<div class="head">
<div class="item2 center">欢迎光临ABC快餐店</div>
<div class="item2 center">欢迎选餐!</div>
</div>
<br/>
<div class="container">
<div class="item" >A1米饭</div>
<div class="item">A2馒头</div>
<div class="item">A3煎饼</div>
<div class="item">A4油条</div>
<div class="item">B1炒鸡</div>
<div class="item" >B2蒸鱼</div>
<div class="item">B3烤鸭</div>
<div class="item">B4焖肉</div>
<span class="item1">C1炒青菜</span>
<span class="item1" >C2土豆丝</span>
<span class="item1" >C3番茄炒蛋</span>
<span class="item1">C4地三鲜</span>
<span class="item1" >D1南瓜粥</span>
<span class="item1">D2小米粥</span>
<span class="item1">D3八宝粥</span>
<span class="item1">D4红豆粥</span>
</div>
</body>
</html>
状态伪类属性 | 描述 |
---|---|
:link | 应用于未被访问过的链接; |
:hover | 应用于鼠标悬停到的元素; |
:active | 应用于被激活的元素; |
:visited | 应用于被访问过的链接,与:link互斥。 |
:focus | 应用于拥有键盘输入焦点的元素。 |
:target | 应用于链接点击后指向元素 |
结构伪类选择器属性 | 描述 |
---|---|
:first-child | 选择某个元素的第一个子元素; |
:last-child | 选择某个元素的最后一个子元素; |
:nth-child() | 选择某个元素的一个或多个特定的子元素; |
:nth-last-child() | 选择某个元素的一个或多个特定的子元素,从这个元素的最后一个子元素开始算; |
:nth-of-type() | 选择指定的元素; |
:nth-last-of-type() | 选择指定的元素,从元素的最后一个开始计算; |
:first-of-type | 选择一个上级元素下的第一个同类子元素; |
:last-of-type | 选择一个上级元素的最后一个同类子元素; |
:only-child | 选择的元素是它的父元素的唯一一个子元素; |
:only-of-type | 选择一个元素是它的上级元素的唯一一个相同类型的子元素; |
:empty | 选择的元素里面没有任何内容。 |
伪元素:用于向某些选择器设置特殊效果。是对元素中的特定内容进行操作,而不是描述状态
伪元素属性 | 描述 |
---|---|
:first-letter | 选择元素文本的第一个字(母) |
:first-line | 选择元素文本的第一行。 |
:before | 在元素内容的最前面添加新内容。 |
:after | 在元素内容的最后面添加新内容。 |
伪类 | 伪元素 |
---|---|
单冒号(:) | 双冒号(::) |
效果可以通过添加一个实际的类来达到 | 效果则需要通过添加一个实际的元素来达到 |
1>
2>
3>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>常用伪类和伪元素01:</title>
<style>
#login-form{
display:none;
}
/* :target 必须与ID配合,实现锚点操作 */
/* 当前#login-form的表单元素被a的锚点激活时执行 */
#login-form:target{
display:block;
}
/* :focus:当获取焦点时执行 */
input:focus{
background-color: lightcyan;
}
/* ::selection:设置选中文本的前景色和背景色 */
input::selection{
color:white;
background-color: blue;
}
</style>
</head>
<body>
<!-- <a href="">我要登录山大</a> -->
<button onclick="location='#login-form'">点击登录山大</button>
<form
<form action=" " method="post" id="login-form">
<label for="name">姓名: </label>
<input type="name" name="name" id="name">
<br/>
<label for="email">邮箱:</input>
<input type="email" name="email" id="email"/>
<br/>
<label for="password">密码:</label>
<input type="password" name="password" id="password"/>
<br/>
<button ><a href="https://www.sdu.edu.cn/">登录</a></button>
</form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>常用伪类和伪元素02:</title>
<style>
/* :not():选择不满足条件的元素 */
.list >:not(:nth-of-type(3)){
color:orange;
}
/* 创建伪元素,伪元素:页面中不存在,无代码,浏览器自动生成 */
/* ::before :在表单前面创建*/
.list::before{
content:'满分学员名单:';
color:red;
font-size:1.5rem;
border-bottom:1px solid blue;
margin-left: -20px;
}
/* ::after:在表单后面创建*/
.list::after{
content:'人数小计:';
color:red;
font-size:1.5rem;
border-top: 1px solid blue;
margin-left: -20px;
}
</style>
</head>
<body>
<!-- ul.list>li{item$}*6,回车如下: -->
<ul class="list">
<li>张三</li>
<li>李四</li>
<li>孙五</li>
<li>赵六</li>
<li>周七</li>
<li>郑八</li>
</ul>
</body>
</html>