【问题标题】:Whitespace appearing using CSS :after and :content使用 CSS 出现的空白 :after 和 :content
【发布时间】:2013-05-09 23:07:24
【问题描述】:

我正在尝试使用 CSS 设置 wp_list_categories 的输出样式,以便在项目之间放置逗号。但是,逗号前出现了一个空格,我真的无法理解它来自哪里!

我做了一个jsbin来演示和比较。

截图:

HTML:

<ul id="category-listing">
    <li class="cat-item cat-item-6"><a href="#" title="View all posts filed under Branding">Branding</a>
</li>
    <li class="cat-item cat-item-4"><a href="#" title="View all posts filed under Environment">Environment</a>
</li>
    <li class="cat-item cat-item-5"><a href="#" title="View all posts filed under Exhibition">Exhibition</a>
</li>
    <li class="cat-item cat-item-8"><a href="#" title="View all posts filed under Lecture">Lecture</a>
</li>
    <li class="cat-item cat-item-9"><a href="#" title="View all posts filed under Photography">Photography</a>
</li>
    <li class="cat-item cat-item-10"><a href="#" title="View all posts filed under Print">Print</a>
</li>
</ul>

CSS:

li {
  font-size: 46px;
  display: inline;
  margin: 0;
  padding: 0;
}

#category-listing li:after {
  content: ', ';
}

【问题讨论】:

    标签: html css wordpress


    【解决方案1】:

    出现空白是因为它在您的 HTML 代码中。

    结束 &lt;/li&gt; 标记位于新行上。回车在 HTML 中算作空格,因此列表项元素的末尾有空格。

    它出现的原因是因为您使用的是display:inline。当使用inline(或inline-block)时,空格是相关的,因为inline 的意思是“将此元素视为纯文本”,因此任何空格都被视为文本的有意部分。

    摆脱这种情况的最佳方法是简单地将&lt;/li&gt; 结束标记与文本的其余部分放在同一行,这样那里就没有空白了。

    还有很多其他的方法可以解决它,但其中大多数都涉及到相当 hacky 的 CSS;简单地关闭空间是迄今为止最简单的选择。

    下一个最佳选择是改用float:left 而不是display:inline。这也将解决问题,但会改变整个事物的呈现方式,这将需要您对 CSS 进行各种其他更改以进行补偿。

    【讨论】:

    • 感谢您的描述性解释。换行符是由 wp_list_categories 函数插入的,但我用 str_replace str_replace("\n", '', $snip); 删除了它们。完美,谢谢!
    • 实际上,在这种特殊情况下,有一个非常简单的不使用浮点数的 css 解决方案,至少对于现代浏览器来说:#category-listing li a:after { content: ' '; font-size: 0;}
    • 我害怕这个,假设我不得不忍受很长的 HTML 行。很遗憾,我的选择似乎是丑陋的 HTML 或 hacky CSS。我希望在 CSS 中有某种“修剪”功能来解决这个问题。
    • @MichaelScheper 请记住,这个答案已经有好几年了。与此同时,CSS 中添加了一些可能对您有所帮助的东西,并且现在可以使用一些选项,因为我们不再需要支持旧版浏览器。 2017 年的浏览器世界与 2013 年的浏览器世界截然不同。
    • 说实话,我认为原始问题的正确答案是将逗号样式放在a标签上而不是li....即a:after{ ... }而不是@ 987654335@。不知道为什么我最初回答这个问题时没有发现这一点,但如果你想做同样的事情,试试看。您可能想要的更通用的答案是使用 CSS display:flex 而不是 display:inline。您可能还需要进行其他更改才能使用它,我没有时间详细介绍,但请查看它,看看它是如何进行的。
    【解决方案2】:

    这是因为你有spacesinline 显示。你有两个选择:

    1. 删除空格:

      <ul id="category-listing">
          <li class="cat-item cat-item-6"><a href="#" title="View all posts filed under Branding">Branding</a>
      </li><li class="cat-item cat-item-4"><a href="#" title="View all posts filed under Environment">Environment</a>
      </li><li class="cat-item cat-item-5"><a href="#" title="View all posts filed under Exhibition">Exhibition</a>
      </li><li class="cat-item cat-item-8"><a href="#" title="View all posts filed under Lecture">Lecture</a>
      </li><li class="cat-item cat-item-9"><a href="#" title="View all posts filed under Photography">Photography</a>
      </li><li class="cat-item cat-item-10"><a href="#" title="View all posts filed under Print">Print</a></li>
      </ul>
      
    2. 使用float

      ul {overflow: hidden;}
      ul li {float: left;}
      

    【讨论】:

    【解决方案3】:

    在列表项内浮动锚点可以解决这个问题:

    li a {float:left;}
    

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 2017-05-02
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多