一、Emmet语法
Emmet语法的前身是Zen coding,它使用缩写来提高html/css编写速度,Vscode内部已经集成该语法。
1、快速生成HTML结构语法
(1)生成标签:直接输入标签名按tab键即可;
(2)生成多个相同标签,标签+*+数字;div*3可以快速生成3个div标签;
(3)如果有父子级关系的标签,可以用> ,比如 ul>li;
(4)如果有兄弟关系标签,用+,比如div+p;
(5)如果生成带有类名或id名的,直接写.demo或#two tab键即可;
(6)如果生成的div类名是有顺序的,可以用自增符号 $;
(7)如果想在生成的标签内部写内容可以用{}表示。
2、快速生成CSS样式
基本采取简写形式。
二、CSS的复合选择器
- 复合选择器可以更准确、更高效的选择目标元素(标签)
- 复合选择器由两个或多个基础选择器通过不同方式组合而成
- 常用复合选择器:后代选择器、子选择器、并集选择器、伪类选择器等
1、后代选择器(重要)
后代选择器也称包含选择器,可以选择父元素里面的子元素。其写法是把外层标签写在前面,内层标签写在后面,中间用空格分隔。当标签发生嵌套时,内层标签就成为外层标签的后代。
语法:元素1 元素2 {样式声明}
表示选择元素1里面的所有元素2(后代元素)
注意:
- 元素1和元素2中间用空格分开。
- 元素是父级,元素2是子级,最终选择的是元素2。
- 元素2可以是儿子,也可以是孙子等,只要是元素1的后代即可。
- 元素1和元素2可以是任意基础选择器。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>复合选择器之后代选择器</title>
<style>
/* 选出ol里面的小li改颜色 */
ol li {
color: pink;
}
ol li a {
color: red;
}
.nav li a {
color: yellowgreen;
}
ul .one {
color: blueviolet;
}
</style>
</head>
<body>
<ol>
变态写法
<li>我是ol的孩子</li>
<li>我是ol的孩子</li>
<li>我是ol的孩子</li>
<li><a href="#">ol的孙子</a></li>
</ol>
<ul>
<li>我是ul的孩子</li>
<li class="one">我是ul的特殊孩子</li>
<li>我是ul的孩子</li>
<li><a href="#">ul的孙子不变化</a></li>
</ul>
<ul class="nav">
<li>我是ul的孩子</li>
<li>我是ul的孩子</li>
<li>我是ul的孩子</li>
<li><a href="#">ul的这个孙子变化</a></li>
<li><a href="#">ul的这个孙子变化</a></li>
<li><a href="#">ul的这个孙子变化</a></li>
</ul>
</body>
</html>
2、子元素选择器(重要)
子元素选择器(子选择器)只选择作为某元素的最近一级子元素。
语法:元素1>元素2 {样式声明}
表示选择元素1里面的所有直接后代(子元素)元素2。
注意:
- 元素1和元素2中间用大于号隔开
- 元素1是父级,元素2是子级,最终选择的是元素2
- 元素2必须是亲儿子,其孙子、重孙子之类都不归他管。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>复合选择器之子元素选择器</title>
<style>
.one a {
color: red;
text-decoration: none;
}
.two>a {
color: yellowgreen;
text-decoration: none;
}
</style>
</head>
<body>
<div class="one">
<a href="#">谁是1的儿</a>
<p>
<a href="#">谁是1的孙</a>
</p>
</div>
<div class="two">
<a href="#">谁是2的儿</a>
<p>
<a href="#">谁是2的孙</a>
</p>
</div>
</body>
</html>
3、并集选择器(重要)
并集选择器可以选择多组标签,同时为他们定义相同的样式。通常用于集体声明。
并集选择器是各选择器通过英文逗号(,)连接而成,任何形式的选择器都可以作为并集选择器的一部分。
语法:元素1,元素2 {样式声明}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>复合选择器之并集选择器</title>
<style>
div,
p,
.pig li {
color: pink;
}
</style>
</head>
<body>
<div>熊大</div>
<p>熊二</p>
<span>光头强</span>
<ul class="pig">
<li>小猪佩奇</li>
<li>猪爸爸</li>
<li>猪妈妈</li>
</ul>
</body>
</html>
4、伪类选择器
用冒号:表示。
(1)链接伪类选择器
a:link | 选择所有未被访问的链接 |
a:visited | 选择所有已被访问的链接 |
a:hover | 选择鼠标指针位于其上的链接 |
a:active | 选择活动链接(鼠标按下未弹起的链接) |
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>复合选择器之链接伪类选择器</title>
<style>
/*1、 a:link 未访问的链接 */
a:link {
color: #333;
text-decoration: none;
}
/*2、 a:visited 点击过的链接 */
a:visited {
color: orange;
}
/* 3、a:hover 选择鼠标经过的链接 */
a:hover {
color: skyblue;
}
/* 4、a:active 选择鼠标正在按下还未弹起时的链接 */
a:active {
color: green;
}
</style>
</head>
<body>
<a href="#">名侦探学院</a>
<a href="g=http://www.xxxxxx.com">未知网站</a>
</body>
</html>
注意:
- 为确保其生效,请按照LVHA的顺序声明:link;visited;hover;active(记忆法:love hate);
- 因为a链接在浏览器中具有默认样式,所以实际工作中需要给a单独指定样式。
实际开发一般的写法:
a {color: gray;}
a:hover {color: red;}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>链接伪类选择器</title>
<style>
a {
color: black;
text-decoration: none;
}
a:hover {
color: skyblue;
text-decoration: underline;
}
</style>
</head>
<body>
<a href="#">名侦探学院</a>
<a href="g=http://www.xxxxxx.com">未知网站</a>
</body>
</html>
(2):focus伪类选择器
:focus伪类选择器用于选取获得焦点的表单元素。
焦点就是光标,一般情况<input>类表单元素才能获取,这个选择器主要针对表单元素来说。
input:focus {
background-color: yellow;
}
示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>:focus伪类选择器</title>
<style>
input:focus {
background-color: red;
color: greenyellow;
}
</style>
</head>
<body>
<input type="text">
<input type="text">
<input type="text">
</body>
</html>
5、复合选择器总结
选择器 | 作用 | 特征 | 使用情况 | 隔开符号及用法 |
后代选择器 | 用来选择后代元素 | 可以是子孙后代 | 较多 | 符号是空格,如.nav a |
子代选择器 | 选择最近下一级元素 | 只选亲儿子 | 较少 | 符号是大于,如 .nav>p |
并集选择器 | 选择某些相同样式的元素 | 可以用于集体声明 | 较多 | 符号是逗号,如 .nav,.header |
链接伪类选择器 | 选择不同状态的链接 | 跟链接相关 | 较多 | 重点记住a{}和a:hover 实际开发的写法 |
:focus选择器 | 选择获得光标的表单 | 跟表单相关 | 较少 | input:focus 记住这个写法 |
三、CSS的元素显示模式
元素显示模式就是元素(标签)以什么方式进行显示。
HTML元素一般分为块元素和行内元素。
1、块元素
常见块元素:<h1>~<h6>、<p>、<div>、<ul>、<ol>、<li>等。
(1)块元素特点:
- 独占一行。
- 高度、宽度、外边距及内边距可以控制。
- 宽度默认是容器(父级宽度)的100%,高度是自己的高度。
- 是一个容器及盒子里面可以放行内或块级元素。
(2)注意:
- 文字类的元素内不能使用块级元素
- <p>标签主要用于存放文字,因此<p>里面不能放块级元素,特别是不能放<div>
- <h1>~<h6>等都是文字类块级标签,里面也不能放其他块级元素。
2、行内元素(内联元素)
常见行内元素:a、strong、b、em、i、del、s、ins、u、span等。
(1)特点:
- 相邻行内元素在一行,一行可以显示多个。
- 高宽直接设置是无效的。
- 默认宽度是他本身内容的宽度。
- 行内元素只容纳文本或其它行内元素。
(2)注意:
- 链接内不能放链接。
- 特殊情况链接<a>里面可以放块级元素,但给<a>转换一下块级模式最安全。
3、行内块元素
<img/>、<input/>、<td>,他们同时具有块元素和行内元素的特点。
(1)特点:
- 和相邻行内元素(行内块)在一行上,但之间会有空白缝隙,一行可以显示多个(行内元素特点)
- 默认宽度就是她本身内容的宽度(行内元素特点)
- 宽度行高外边距以及内边距可以控制(块级元素特点)
4、元素显示模式总结:
5、元素显示模式转换
转换为块级元素:display:block;
转换为行内元素:display:inline;
转换为行内块元素:display:inline-block;
6、简洁小米侧边栏案例
单行文字垂直居中:让文字的行高等于盒子的高度。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>简单版小米侧边栏</title>
<style>
/* 1、把a转换为块级元素 */
a {
display: block;
width: 230px;
height: 40px;
background-color: #55585a;
font-size: 14px;
color: #fff;
text-decoration: none;
text-indent: 2em;
line-height: 40px;
}
/* 2、鼠标经过变换背景颜色 */
a:hover {
background-color: #ff6700;
}
</style>
</head>
<body>
<a href="#">手机 电话卡</a>
<a href="#">电视 盒子</a>
<a href="#">笔记本 平板</a>
<a href="#">出行 穿戴</a>
<a href="#">智能 路由器</a>
<a href="#">健康 儿童</a>
<a href="#">耳机 音响</a>
</body>
</html>