HTML, CSS, JavaScript 三方相互分离, 各司其职
这是前端开发的初学者都知道基本原则
尤其是 CSS, 虽然和 JavaScript, 都是围着 HTML 转, 但两者间是鲜有来往
而 CSS 和 HTML 的关系是 CSS 修饰 HTML, 几乎都是 CSS 单方面指挥 HTML
整体来讲, CSS 是个"独立的孩子"
但凡事都有例外, 在很个别的情况下, CSS 还是要受到 HTML 的控制
比如伪类的 content 属性
很多初学者只知道伪类的 content 可以设成字符串, 却不知道还可以设成 attr() 表达式, 从而获取动态数据
content 还可以拼接文本内容, 多 attr() 连用
css 中 content: attr(属性名);
对应
HTML 中 属性名=“content 获取到的值”
详见demo
demo
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title>css content 与 HTML, JavaScript 的联动</title>
<style>
.div::before {
outline: 1px green solid;
content: attr(data-before);
}
.div::after {
outline: 1px green solid;
content: attr(data-after);
}
#div3::after {
content: "还可以拼接文本内容, 多 attr() 连用 "attr(data-after)" , "attr(data-before);
}
</style>
</head>
<body>
<div class="div" id="div0" data-before="初始 before" data-after="初始 after"> div </div>
<div class="div" id="div1" data-before="初始 before" data-after="初始 after"> div </div>
<div class="div" id="div2" data-before="初始 before" data-after="初始 after"> div </div>
<div class="div" id="div3" data-before="初始 before" data-after="初始 after"> div </div>
<script type="text/javascript">
"use strict"
window.onload = function () {
document.getElementById("div1").setAttribute("data-after", "setAttribute 修改了 after")
document.getElementById("div2").dataset.before = "dataset 修改了 before"
}
</script>
</body>
</html>
一旦 CSS 的值与 HTML 元素的属性值挂钩, 那么用 JavaScript 获取修改该值就是轻轻松松的事了
end