一、css结构与编写规则
CSS 本身只有“选择器 + 样式规则”这一种结构,基本结构永远是:
选择器 {
属性: 值;
}
其中,选择器包括标签选择器、类选择器与ID选择器,优先级从低到高,以下是每种选择器的使用方法。
二、基本使用方法
先给出各种选择器的定义方法:
/* 标签选择器 */
a {color: red;}
/* 类选择器 */
.back {color: blue;}
/* ID选择器 */
#back {color: green;}
各种选择器的使用方法如下,推荐css文件放在/var/www/myflask_blog/static/css下:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>一个例子</title>
<!-- 引入本站主题 -->
<link rel="stylesheet" href="{{ url_for('static', filename='css/style.css') }}">
</head>
<body>
<a>这里是标签选择器</a>
<div class="back">这里是类选择器</div>
<div id="back">这里是ID选择器</div>
</body>
需要注意的是,类和ID的内容通常可以自定义(ID不能出现两个),而标签的内容一般需要符合要求,因此类在CSS中使用更加广泛,下面给出一些常见的标签。
| 标签 | 用途 | 标签 | 用途 |
|---|---|---|---|
| p | 段落 | a | 超链接 |
| span | 内联文本容器 | table | 表格 |
| div | 通用块级容器(无语义) | input | 输入框(文本、密码、单选、多选等) |
| section | 语义化区块,通常表示页面一部分 | img | 图片 |
| article | 独立文章 | audio | 音频 |
| header | 页眉/区块头部 | video | 视频 |
| footer | 页脚/区块尾部 | html | 根标签 |
三、复杂选择器的使用
1. 层级选择器
.footer a {
color: #999;
}
上面的CSS代码表示只选中 .footer 里面的 a 标签,严格满足时才被选中:
<!-- 被选中 -->
<footer class="footer">
<a>备案号</a>
</footer>
<!-- 未被选中 -->
<a>页面其他链接</a>
同理可以构造三级甚至四级的层级选择器。
2. 组合选择器
下面的CSS代码表示只选中<a class="back">蓝色的内容</a>:
a.back {
color: blue;
}
3. 伪元素
在某个元素的“内容之后”插入一个虚拟的、不可见的 HTML 元素,并可以对它进行样式设计。举个例子,CSS和html分别为:
.box::after {
content: " 👋";
color: blue;
}
<p class="box">你好</p>
实际渲染的效果为你好 👋。
四、动态效果
这里以鼠标悬停的动态效果的实现为例,涉及两个方面:“样式何时改变”与“样式如何改变”。
1. 样式何时改变
标准的CSS提供了一种很方便的定义方法:
/* 定义一个初始的静态样式 */
.box {
width: 100px;
background: blue;
}
/* 定义此类对象在被鼠标指向时的样式 */
.box:hover {
width: 200px;
}
以上的代码即可实现:当鼠标悬停在box类的对象上时,它的样式由{width: 100px;background: blue;}变成{width: 200px;}。
2. 样式如何改变(动画)
关于样式改变的动画,标准CSS也提供了方法:使用transition属性。我们依旧对前面给出的CSS代码作修改:
/* 定义一个初始的静态样式 */
.box {
width: 100px;
background: blue;
transition: width 1s; /* 宽度变化时,用 1 秒过渡 */
}
/* 定义此类对象在被鼠标指向时的样式 */
.box:hover {
width: 200px;
}
然后即可实现平滑的改变。
3. 可行的例子
- 继续改进上面的代码可以得到这样的效果:鼠标悬停后对象整体上移,阴影加深:
.box {
box-shadow: 0 2px 8px rgba(0,0,0,0.05);
transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.box:hover {
transform: translateY(-5px);
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
- 另一个很有意思的例子,鼠标悬停后,文字下方延伸出一条下划线:
.nav-links a {
position: relative; /* 为子级的伪元素提供坐标系 */
}
.nav-links a::after {
content: "";
position: absolute; /* 向上查找 position: relative 的父级并以此为坐标系 */
left: 0;
bottom: -6px;
width: 0;
height: 2px;
background: 你的主题颜色;
transition: width 0.3s ease;
}
.nav-links a:hover::after {
width: 100%;
}
更多内容还在学习中...