我对CSS和class
属性有点困惑。我一直认为,我在属性值中指定多个类的顺序具有意义。后面的类可以/应该覆盖前一个的定义,但这似乎不起作用。这是一个例子:
<html>
<head>
<style type="text/css">
.extra {
color: #00529B;
border:1px solid #00529B; /* Blue */
background-color: #BDE5F8;
}
.basic {
border: 1px solid #ABABAB;
}
</style>
</head>
<body>
<input type="text" value="basic" class="basic"/>
<input type="text" value="extra" class="extra"/>
<input type="text" value="basic extra" class="basic extra"/>
<input type="text" value="extra basic" class="extra basic"/>
</body>
</html>
我希望,class="basic extra"
的第三个示例应该有一个蓝色边框,因为额外指定的边框会覆盖基本边框。
我在ubuntu 9.04上使用FF 3
答案 0 :(得分:218)
类属性被覆盖的顺序不是由类属性中定义的类的顺序指定的,而是它们出现在css中的位置
.myClass1 {font-size:10pt;color:red}
.myClass2 {color:green;}
<div class="myClass2 myClass1">Text goes here</div>
div中的文本将显示为绿色而不是红色,因为myClass2在CSS定义中比我的class1更低。如果我要在class属性中交换类名的顺序,那么什么都不会改变。
答案 1 :(得分:25)
属性中的类的顺序无关紧要。 class
属性中的所有类都同等地应用于元素。
问题是:样式规则以什么顺序出现在.css文件中。在您的示例中,.basic
位于.extra
之后,因此.basic
规则将尽可能优先。
如果你想提供第三种可能性(例如,它是.basic
,但.extra
规则仍然适用),你需要发明另一个类,.basic-extra
,明确规定了这一点。
答案 2 :(得分:1)
这可以完成,但是您必须在选择器上有所创新。使用属性选择器,您可以指定诸如“开始于”,“结束于”,“包含”等内容。请参见下面的示例,使用相同的标记,但具有属性选择器。
var dialogResult = MessageBox.Show("Message", "System message",
MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);
if (dialogResult == DialogResult.Yes || dialogResult == DialogResult.Cancel)
{
return;
}
// logic for No here
// as this means No was pressed
[class$="extra"] {
color: #00529B;
border:1px solid #00529B;
background-color: #BDE5F8;
}
[class$="basic"] {
border: 1px solid #ABABAB;
}
input {display:block;}