CSSinheritance
说我有这样一个div
,将具有所有相同的属性与背景图像或类似的东西:
div.someBaseDiv { margin-top:3px; margin-left:auto; margin-right:auto; margin-bottom:0px; }
我想要像这样inheritance它:
div.someBaseDiv someInheritedDiv { background-image:url("images/worldsource/customBackground.gif"); background-repeat:no-repeat; width:950px; height:572px; }
当然,我很确定这是写错了,我不害怕寻求帮助,所以有人可以告诉我如何使这项工作,并包括HTML标记?
最简单的方法就是将someInheritedDiv元素添加到第一个规则中。
div.someBaseDiv, #someInheritedDiv { margin-top:3px; margin-left:auto; margin-right:auto; margin-bottom:0px; }
这会告诉你的#someInheritedDiv应用与div.someBaseDiv一样的风格。 然后,将这组样式扩展到更具体的#someInheritedDiv:
#someInheritedDiv { background-image:url("images/worldsource/customBackground.gif"); background-repeat:no-repeat; width:950px; height:572px; }
这是如何特异性在CSS的作品。
使用这两个类并将它们组合如下:
.baseClass { margin-top:3px; margin-left:auto; margin-right:auto; margin-bottom:0px; } .baseClass.otherClass /* this means the element has both baseClass and otherClass */ { background-image:url("images/worldsource/customBackground.gif"); background-repeat:no-repeat; width:950px; height:572px; }
标记如下:
<div class="baseClass otherClass"></div>
现在,以这种方式,你可以覆盖baseClass,如果需要的话…因为你不必继续添加你的新类名到baseClass定义,它有点干净。
对于这个任务,我build议你使用CSS的一个强大的扩展名LESS 。 它编译成CSS或可以使用一个JavaScript文件的dynamic链接解释。
如你所描述的,LESS支持(几乎)inheritance。 文档有详细信息(请参阅“Mixins”一节)。
举例来说,LESS代码是:
.someBaseDiv { margin-top:3px; margin-left:auto; margin-right:auto; margin-bottom:0px; } someInheritedDiv { .someBaseDiv; background-image:url("images/worldsource/customBackground.gif"); background-repeat:no-repeat; width:950px; height:572px; }
请注意,它必须是.someBaseDiv
而不是div.someBaseDiv
你想要做的是使一些CSS适用于两种不同types的元素,但也允许它们有一些差异。 你可以使用一些简单的HTML来做到这一点:
<div class="base"> <div class"inherited"> </div> </div>
和CSS:
.base, .inherited{ margin-top:3px; margin-left:auto; margin-right:auto; margin-bottom:0px; } .inherited{ background-image:url("images/worldsource/customBackground.gif"); background-repeat:no-repeat; width:950px; height:572px; }
这将共享属性添加到这两种types的div
,但具体的只有派生div
这真的取决于你的标记。 如果你的inheritance元素位于具有类someBasDiv
的div下,那么它的所有子元素将自动inheritance这些属性。
然而,如果你想在你的标记中的任何地方inheritancesomeBaseDiv
类,你可以使你想要inheritance的元素,使用这两个类:
<div class="someBaseDiv someInheritedDiv">
和你的CSS会是这样的:
div.someBaseDiv { margin-top:3px; margin-left:auto; margin-right:auto; margin-bottom:0px; } div.someInheritedDiv { background-image:url("images/worldsource/customBackground.gif"); background-repeat:no-repeat; width:950px; height:572px; }
如果您希望所有具有特定类的内部DIV从基类inheritance,则可以像这样构buildHTML标记:
<div class="parent"> <div class="child">X</div> </div>
和CSS
.parent { border: 2px solid red; color: white } .parent .child { background: black }
如果所有DIV都必须inheritance更改.child
到div
。
在jsFiddle上看到这个例子
下面的代码
// parent // all DIVs inside the parent .someClass div { }
意思是:具有类someClass
顶层元素(任何)将把样式添加到所有的子DIV(recursion地)。