使用at-rules,可以在at-rule事件期间为元素设置规则集(如打印,移动设备等)但是对于特定的选择器呢?
我正在处理更大网站的子页面,我必须使用主样式表来处理我的任何页面。有时,样式规则会被主样式表中的规则所取代。为了解决这个问题,我最终必须在我的所有规则之前添加“#mypage #content blah blah”以确保我的css更具体。它变得非常混乱。我更喜欢做的事情是:
@#mypage {
div {
border: 1px solid #000;
}
div p {
color: #00f;
}
}
这样我编写的任何规则都包含在我正在处理的页面部分的id中。
哦,我忘了提及,我不能(据我所知)使用@namespace,因为我的页面在模板框架内(因此需要主样式表),所以如果我只是说@namespace (my-page-url)我的样式表会覆盖主样式表。
我错过了一些简单的东西吗?
澄清:
对不起,我想我试图保持简单,我太模糊了......
我正在开发一个页面内容,该页面将放置在一个更通用的模板(标头栏,侧边栏导航等)中,该模板具有全局样式表,我无法控制任何内容。
对于我的部分,我对样式表有一些自由。我不希望任何我的规则意外地覆盖全局样式表,并且我希望避免为我的规则使用非常长的选择器来避免全局样式表覆盖我的样式表。例如,如果我想说
“所有表格都有黑色边框”
我冒险在侧边栏的某个桌子周围放置黑色边框。但是,如果我说
“div #content中的所有表格都有黑色边框”
这只有在没有更具体的规则时才有效。
现在,我可以通过每个规则并添加一长串选择器,以确保我的每个规则都有效,并且仅适用于我的部分,但这并不是真正有吸引力或有趣。我希望我可以将所有规则嵌入到更大的规则中,就像我上面的例子一样,这样我就可以有一个主要规则:
#content {
//and place all of my style rules inside of that:
p {
border: pink;
}
因此我只需要声明一次特异性,它涵盖了该主要规则中的所有规则。
答案 0 :(得分:2)
不是一个完美的解决方案,因为它使用基于PHP的服务器端处理,但这对您来说可能已经足够了:
http://www.shauninman.com/archive/2007/06/27/css_server_side_pre_processor
答案 1 :(得分:2)
不久前曾问过very similar question(标题相当差)。
最受欢迎的答案是Shaun Inman's server-side preprocessor(现已被CSSCacheer取代)。
我的建议是Sass。
在任何一种情况下,这都是vanilla CSS的一个缺陷。
答案 2 :(得分:1)
您可以使用“!important”声明覆盖其他样式表:
div {
border: 1px solid #000 !important;
}
div p {
color: #00f !important;
}
答案 3 :(得分:1)
从我读过的内容来看,以下规则符合要求,只有一个层次,坦率地说是我见过和使用的大多数网站的典型:
#content div {
... your rules ...
}
这只会影响具有内容id的元素下的div。
没有办法将这些规则“分组”:
#content {
div {
... your rules ...
}
}
那会很好,但唉,这不是它写的方式。
答案 4 :(得分:0)
有一种方法可以使用CSS引擎,例如less
(node.js库)。
根据lesscss'网站(和个人经验),您可以嵌套这样的css规则:
#header {
h1 {
font-size: 26px;
font-weight: bold;
}
p { font-size: 12px;
a { text-decoration: none;
&:hover { border-width: 1px }
}
}
}
并使用命令行实用程序less
将其编译为
#header h1 {
font-size: 26px;
font-weight: bold;
}
#header p {
font-size: 12px;
}
#header p a {
text-decoration: none;
}
#header p a:hover {
border-width: 1px;
}
使用less
,您还可以使用字体大小等变量,这样可以更快地进行更改。