如何仅使用CSS(最糟糕的情况是使用某些JS)来实现以下目的
global.css(只读)
.red {
color: red;
/*tens of lines of additionnal css*/
}
mystyle.css
div[error] {
background: yellow;
apply .red; << here
}
PS。
问题是关于SASS
或LESS
的不。
答案 0 :(得分:5)
如果您要调整颜色值,则可以使用:root
变量
/* define color variable */
:root {
--red-color: red;
}
/* now you can use it anywhere */
.red {
color: var(--red-color);
}
CSS中的变量应在定义其范围的CSS选择器中声明。对于全局作用域,可以使用:root或主体选择器。
旧的浏览器可能不支持此解决方案。您可以通过使用一些polyfill来解决此问题。浏览器支持可以在w3schools
上看到无法用纯CSS复制整个类。除此之外,您可以将选择器分组。
.red, div[error] {
color:red;
/* another style attributes */
}
或者您可以使用SASS并将其编译为CSS。在official site上提到
它写为@extend,它告诉Sass一个选择器应该继承另一个选择器的样式。
.red {
color: red;
}
div[error] {
@extend .red;
}
LESS具有与SASS类似的系统,为此有两种解决方案。 您可以简单地叫课。
.red {
color: red;
}
div[error] {
.red;
}
或者您可以使用described on official site的:extend
伪元素
.red {
color: red;
}
div[error] {
&:extend(.red);
}
Extend是一个Less伪类,它将合并的选择器与匹配其引用的选择器合并。
答案 1 :(得分:1)
据我所知,css中没有条件if / then / else。另外,您可以使用javascript / jQuery动态地应用CSS。像这样的东西。
component.classList.add('red');
component.classList.remove('red');
答案 2 :(得分:0)
按照相同的规则进行操作:
.red, div[error] {
color: red;
}
如果它是动态的,则不能使用纯CSS来实现-尽管还有其他多种方法:
JavaScript:
document.querySelectorAll("div[error]").forEach)e => e.classList.add("red"));
jQuery:
$("div[error]").addClass("red");
答案 3 :(得分:0)
您可以概括它们并根据需要定义它们。即使它们是不同的.css
文件,只要它们与要应用的其他属性没有冲突。
.red {
color: red;
}
div[error] {
background-color: yellow;
}
div[error=true] {
color: red;
}
div[error=false] {
color: blue;
}
<div error>error</div>
<div error="true">true error</div>
<div error="false">fake error</div>
<div class="red">red</div>
答案 4 :(得分:0)
您可以使用div[error]
组合器将选择器.red
添加到,
的定义中,如其他答案中所述。
但是,没有提到的是,您可以将更多样式应用于div[error]
:
/* this will be applied to .red and div[error] */
.red, div[error] {
color:red;
}
/* this will be applied only to div[error] */
div[error] {
background-color: yellow;
}
编辑:
如果无法修改.red
类的定义,那么使用纯CSS是不可能的。
这是一个JS解决方案,它将应用与div[error]
,类.red
相匹配的所有元素:
function extend(selector, className){
document.querySelectorAll(selector).forEach(element=>element.classList.add(className))
}
extend('div[error]','red')