不使用Javascript,有没有办法通过嵌套元素打开和关闭CSS属性。
我正在尝试解决的问题是,我有许多标记和类,这些标记和类使一些文本斜体(<em>
,<blockquote>
,<cite>
,<q>
,<dfn>
和其他一些类,当其中一个在其中一个内部时,斜体化需要切换。
<blockquote> And so the man said, <q>That's not from <cite>Catcher In The Rye</cite>, dear fellow!</q>, can you believe that?! </blockquote>
应呈现为:
所以男人说,“那不是来自麦田守望者,亲爱的家伙!”,你能相信吗?!
我为此获得的CSS变得有点混乱:
q, em, dfn, cite, blockquote {
font-style: italic;
}
q q, q em, q dfn, q cite,
em q, em em, em dfn, em cite,
dfn q, dfn em, dfn dfn, dfn cite,
cite q, cite em, cite dfn, cite cite,
blockquote q, blockquote em, blockquote dfn, blockquote cite {
font-style: normal;
}
...而且我很确定甚至不会超过一级嵌套(如我的例子中所示)。
有没有办法可以做到这一点而不必列出标签的每个排列?
答案 0 :(得分:2)
我无法告诉你哪些浏览器(如果有的话)实现了CSS3 :not
伪类,但是如果我们看到它支持的话,我们可以这样做:
q:not(q, em, dfn, cite, blockquote), em:not(q, em, dfn, cite, blockquote), dfn:not(q, em, dfn, cite, blockquote), cite:not(q, em, dfn, cite, blockquote), blockquote:not(q, em, dfn, cite, blockquote) { font-style: italic; }
任何人都可以猜测浏览器如何实现这一点,因此深度可能超过2级(如您的示例)。
除此之外,遗憾的是我无法想到另一种纯CSS解决方案。
答案 1 :(得分:0)
我会用一个为每个排列生成必要嵌套规则的脚本来管理它。这是我不会疯狂维持它的唯一方法。
答案 2 :(得分:0)
CSS3中可以使用简单的解决方案:
em {
font-style: toggle(italic, normal);
}
答案 3 :(得分:-1)
你说你有各种各样的元素需要以斜体显示,但是一旦嵌套它们就需要打破以前的斜体。原谅我说,但我真的想知道是否真的想要这样的行为。
请允许我解释一下:你有不同的标记,例如引用,引用,强调等。当使用嵌套时,引用内部的重点应该与引用之外的内容具有不同的含义。因此,默认的css规则适用于下面的所有内容。因此,我不理解将有意义的嵌套标记扁平化为斜体和非斜体的愿望,因为它隐藏了手头内容的基本含义(因为类似的格式将应用于文档的不同有意义部分)。 / p>
我的建议是:
很抱歉,如果这不是您问题的直接解决方案,但我希望能够为您提供另一个解决问题的方法,并且可能会发现可能根本没有问题。祝你好运!