场景叙述:点击某一个按钮,能够加载一个新的css文件,并且页面进行相应的更改
还写了一篇使用alternate stylesheet更改样式的文章,各有优缺使用link的rel属性一键换肤
// index.html ---->需要引入一个style1.css和index.js文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>一键换肤</title>
<link rel="stylesheet" href="./style1.css" />
</head>
<body>
<div class="root">hello</div>
<button id="changbtn">改变颜色</button>
<script src="./index.js"></script>
</body>
</html>
另外需要准备一个style2.css
进行替换
// style1.css
.root {
color: red;
}
// style2.css
.root {
color: blue;
}
js需要实现的功能就是,当用户点击button
的时候,能够加载style2.css
并且页面进行相应的变化
let btn = document.getElementById('changbtn');
let changeStyleName = 'style2';
let change = name => {
let link = document.createElement('link');
link.rel = 'stylesheet';
link.href = name + '.css';
document.head.appendChild(link);
};
btn.addEventListener('click', _ => {
// 进行解耦,方便后期更改
change(changeStyleName);
});
Tips:应用的场景应该是html中没有行内样式,所有的样式放在一个个css
文件中,毕竟行内样式的优先级最高,除了一个个进行更改别无选择,整体的思想是利用css
代码的覆盖性,即如果有相同的样式,后面的样式会覆盖前面的样式,而不是替换