【问题标题】:How to write CSS code without using :not selector?如何在不使用 :not 选择器的情况下编写 CSS 代码?
【发布时间】:2014-06-03 01:58:52
【问题描述】:

我有一个文章页面,我正在对其进行小的 CSS 更改,例如边距和字体大小。我的代码必须能够受 Internet Explorer 8 及更高版本的支持。问题是,我使用了一些 IE8 不支持的 CSS 选择器。如何在不使用 :not 选择器的情况下编写 CSS 代码?

示例文章页面的 HTML

<div class="entry">
  <h3 class="social-title>Share This Article </h3> 
  <div class="social-content>
    <table>
      <td><a href="twitter.com"><img class="" src="twitter.png"><span class="">Twitter</span></a></td>
      <td><a href="facebook.com"><img class="" src="facebook.png"><span class="">Twitter</span></a></td>
    </table>
  </div>

<!-- The article would start here -->
  <p class="category_row"><h1 class="category-title>Lifestyle</h1></p>
  <p style="margin: 0in 0in 0.0001pt; line-height: 13.5pt; vertical-align: baseline;"><a href="example.com/article.html"><img alt="" style="float: left;" src="example.jpg"></a>Article goes starts here...</p>
  <p style="margin: 0in 0in 0.0001pt; line-height: 13.5pt; vertical-align: baseline;">Second paragraph</p>
  Third paragraph
</div>

我正在使用的 CSS

.entry p:not(.category_row) {
font-size: 14px;
line-height:22px;
}

img (margin: 10px)

到目前为止,如果我想为文章部分中的图像添加边距,我将如何编写 CSS 代码以便它只影响文章部分中的图像而不影响 &lt;div class="social-content"&gt; 中的图像?不使用 :not?

另外,我将如何编写 CSS 代码来将文章的字体大小更改为 14 像素的字体大小和 22 像素的行高?在不影响上述所有内容的情况下(不在文章部分)?

对不起,如果这令人困惑,但如果需要,我会澄清更多!

【问题讨论】:

  • 你反对使用一些javascript来填充支持吗?如果不是...那么您的解决方案是 selectivizr.js - selectivizr.com
  • 这里没有javascript。由于我可以访问的代码存在某些限制,我只能使用 CSS。
  • 除了通过给这些特定段落一个类并增加特异性来做到这一点之外,没有使用 :not 就没有其他动态解决方案。所以它要么不支持 IE,要么在其中粘贴一个 javascript 库......
  • 您的 HTML 似乎格式不正确。您的多个属性值包含不匹配的引号,p 不能包含 h1。其中一些错误实际上会干扰您的选择器,因此您首先需要确保您的 HTML 有效。
  • ewww...内联样式...您可以根据需要设置p 标签的样式,然后在.category_row 上使用!important 以确保这些样式显示为您喜欢的样式。

标签: html css internet-explorer-8 css-selectors


【解决方案1】:

如果您想支持较旧的浏览器,您需要更加详细。新语法的乐趣在于我们能够更加简洁,但如果您的支持的浏览器列表中有 IE 8,您需要从设计更通用的选择器开始,然后在更精确的选择器中覆盖这些样式。

.entry p {
   font-size: 14px;
   line-height:22px;
}

.entry p.category_row {
  font-size: XXpx;
  line-height:XXpx;
}

我不知道您的文章部分从您的标记开始的位置。找出最合乎逻辑的图像容器是什么,然后用它来约束你的选择器。注意article 是一个 HTML5 元素,所以你不使用它是失职的:

<article>
  <img ... />
</article>

文章图片将使用这个简单的选择器设置样式:article img { ... }

如果您想在 IE 8 中使用 article,请务必包含以下内容:https://code.google.com/p/html5shiv/

【讨论】:

  • 或者他可以选择不使用任何新的语义元素,也可以不使用 shiv,而是坚持使用 IE8 已经合理支持的内容。
  • 可能是最好的,正如我现在看到的那样,他说他根本无法使用 Javascript :)
  • @ChrisHardie 谢谢克里斯。我没有这样想过,代码但随后以 :not 选择器中指定的任何内容为目标以恢复正常。看来这就是我必须这样做的方式!
  • @user3097331 它将是,直到 IE 10 成为标准。如果这有帮助,请随意标记为答案:)
【解决方案2】:

为什么不将实际内容包装在它自己的div 中?

<p class="category-row">....</p>
<div class="post-content"><!--- maybe use article tag here -->
   <p>First paragraph....</p>
   <p>Second Paragraph</p>
</div>

那么你就可以引用p的like

.entry .post-content p {
     ....
}

另外,“类别行”看起来不应该是一个段落? 如果它是“行”,则 div 或 span 会更合适。 如果它只包含 h1,则最好将其废弃,并将 h1 保留在没有包装器的情况下。

如果您使用文章标签(或任何其他新的 html5 语义标签),请包括 html5shiv,正如 Chris 在他的回答中所说的那样。

【讨论】:

  • 我无权访问模板,而且我必须更改多个门户网站上的数千篇文章。不过谢谢。
  • 如果您更改模板,它们也会被更改(除非您有一个非常奇怪的缓存解决方案)。完全不更改 HTML 标记,不可能只选择 p 标签,除非您使用某种更复杂的 CSS 选择器,例如 :not.
  • 由于我只是一名实习生,我无法访问这些模板,尽管它可以为我节省很多时间。我喜欢 :not 选择器,但我们仍然支持 IE 8。嘘。
猜你喜欢
  • 2020-02-01
  • 1970-01-01
  • 2021-06-08
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多