【问题标题】:Display first letter only只显示第一个字母
【发布时间】:2012-07-15 19:30:52
【问题描述】:

让我们说这个标记:

<div id="socialMedia">
    <a class="Twitter">Twitter</a>
</div>

我想要的只是显示文本的第一个字母(在这种情况下,只是一个 T)

(其实我不会用它,但我对此很好奇;以后肯定会有所帮助)

所以这是我的尝试:

#socialMedia .Twitter{
    display:none;
}
#socialMedia .Twitter:first-letter {
    display: block !important;
}

我能够检查它不会实现它。问题是为什么?有什么解决方法吗?

-编辑-

我们正在寻找支持 IE=+7/8 版本的解决方案..

敬礼

【问题讨论】:

  • 顺便说一句,这是伪元素还是伪类?
  • 你所做的就像隐藏一个父元素并试图显示它的一个子元素,它不会起作用,因为父元素的样式会覆盖它。父元素也必须是块级元素才能工作。就像 divp 标签,或 display: block 上的 a 标签。
  • @sachleen 颜色,也许吧? (透明VS自定义)
  • 确保您阅读了规范,您的答案就在那里。 w3.org/TR/CSS2/selector.html#first-letter
  • The :first-letter pseudo-element applies to block container elements.,尤其是。

标签: css pseudo-element


【解决方案1】:

试试这样的:

.Twitter {
  font-size: 0;
}

.Twitter:first-letter {
  font-size: 12px;
}
&lt;div class="Twitter"&gt;Twitter&lt;/div&gt;

也许这不是最好的解决方案,但它确实有效。

【讨论】:

  • 我使用了@tjeezy 的 jsfiddle (jsfiddle.net/H7jhF/89) 并对其进行了编辑以使用您建议的字体大小,并将其设置为内联块,以便另一个元素可以在它之后流动。总之我更喜欢使用字体大小。
  • 这个作品和字母(除了第一个)不占用任何空间
【解决方案2】:

编辑:免责声明:根据 cmets,这不起作用。请不要在未检查是否符合您的需求的情况下按原样使用。

如果您检查 :first-letter 伪元素的规范,您会注意到以下内容:

:first-letter 伪元素必须选择块第一行的第一个字母,如果它的行上没有任何其他内容(例如图像或内联表)。

这里的重要词是“阻止”。

您正在尝试在类为Twitter&lt;a/&gt; 标记上使用伪元素。默认情况下,锚标签是内联元素(不是块级元素)。

对于您给定的标记,您的问题的一种解决方案是以这种方式设置锚的样式:

.Twitter {
    display:block;
    visibility:hidden;
}

.Twitter:first-letter {
    visibility:visible;
}​

我不确定你到底想要什么,但这对于实验目的来说已经足够了。在此处查看演示:http://jsfiddle.net/H7jhF/

【讨论】:

  • 嗯,这很奇怪。 visibility:hidden 上的规范说“如果元素的后代具有'可见性:可见性',它们将是可见的”(w3.org/TR/CSS2/visufx.html#visibility)。我会环顾四周,看看我是否找出问题所在。请记住,这仍然是一个愚蠢的解决方案,因为 visibility 属性不会消除元素的框。
  • 这适用于 chrome,但由于某种原因不适用于 IE9。微软表示它受到支持,但似乎并非如此。 msdn.microsoft.com/en-us/library/hh781508(v=vs.85).aspx
  • 由我的回答更新以引用 cmets。目前没有时间修复或寻找修复。
  • 它不起作用,因为规范只允许 ::first-letter: developer.mozilla.org/en-US/docs/Web/CSS/::first-letter 中的一些属性。 visibility 不是其中之一。
  • 如果您使用visibility:hidden;,您可能无法正确对齐文本。我建议使用font-size: 0;,这样字母就不会占用空间;
【解决方案3】:

另一种方式是使用color: transparent

.twitter{
  display: block;
  color: transparent;
}

.twitter:first-letter{
  color: #000;
}
<div id="socialMedia">
    <a class="twitter">Twitter</a>
</div>

JSFiddle


但是,这不适用于 lte IE8。

参考资料:

【讨论】:

    【解决方案4】:

    你所做的就像隐藏一个父元素并试图显示它的一个子元素,它不会起作用,因为父元素的样式会覆盖它。父元素也必须是块级元素才能工作。就像divp 标签,或a 标签上的display: block;

    这是使用颜色的东西:

    HTML

    <div id="socialMedia">
        <a class="Twitter">Twitter</a>
    </div>
    

    CSS

    body {
      background-color:#FFF;
    }
    .Twitter{
        display: block;
        color:#FFF;
    }
    .Twitter:first-letter {
        color:#000;
    }
    

    【讨论】:

    • 我正要按照这些思路发布一些内容。这是一个小演示:jsfiddle.net/H7jhF。另外,对于 OP,当您认为应该起作用的东西不起作用时,请查看规范(在这种情况下:w3.org/TR/CSS2/selector.html#first-letter
    • @tjeezy 啊,是的,我正在查看能见度,但它不起作用,但我还没有弄清楚显示块。您应该将其发布为答案,因为它比我的要好。
    • 不过,您的回答很好。哦,好吧,我也提交了一份。
    • 是的;我应该考虑颜色。少依赖..无论如何;而不是将颜色设置为白色;默认情况下最好是透明的。感谢您的宝贵时间!
    • 问题是如果你改变颜色,你不想看到的字母仍然占用空间。我更喜欢字体大小。
    【解决方案5】:

    从页面上拍摄内容并使用动态内容显示字母:

      
    .twitter{
        text-indent:-9999px;
        display:block; 
        position:relative;
    }
    .twitter:before,.twitter::before{
        content:"T";
         position:absolute;
        width:10px;
        height:15px;
        z-index:100; 
        text-indent:9999px;
    }
    

    玩这个小提琴:
    http://jsfiddle.net/jalbertbowdenii/H7jhF/67/

    【讨论】:

      【解决方案6】:

      为什么不直接使用 JavaScript 并将字符串拆分为数组并使用数组中的第一项。或 charAt()

      【讨论】:

        【解决方案7】:

        纯 CSS 答案使用可见性和颜色技巧来隐藏剩余的字母,但它们仍然存在并影响布局。它可能会导致布局问题,例如如果你想浮动元素并在它旁边放一些东西。

        我找到了一种无需隐藏元素的有趣方法。诀窍是将整个单词缩小到几乎没有,然后只炸掉第一个字母。这有点像 OP 试图做的事情,但它之所以有效,是因为它在连续频谱上运行,而不是 display: none,它只会关闭其中的任何东西。 (一种模拟 > 数字情况。)

        Demo

        HTML:

        <div>Ding Dong</div> and other stuff
        

        CSS:

        div {
          font-size: 0.0000016px;
          float: left;
        }
        
        div::first-letter {
          color: red;
          font-size: 10000000em;
        }
        

        结果:

        【讨论】:

        • 不适用于 Firefox 62 - D 根本不显示。
        【解决方案8】:

        这是我的工作:

        .Twitter{
                display:block;
                width:1ch;
                overflow:hidden;
                white-space: nowrap;
            }
        

        【讨论】:

        • 使用 1ch 的宽度适用于固定宽度的字体。但是,在使用比例字体时,1ch 的宽度可以比一个字符宽或窄,宽度会导致第一个字母可能被意外截断,或者第二个字符可能被意外暴露。
        • @DanielKauffman,我认为 'ch' 单位处理没有间距的字符宽度,所以我们应该很好。
        • “ch”单位是相对于“零”字符的宽度的。在固定宽度字体中,所有字符的宽度都相同,因此 1ch 总是正好是一个字符宽。但是,在比例字体中,“零”字符可能比其他字符更宽(通常)或更窄(偶尔),因此 1ch 只是 大约一个字符的宽度。大多数时候,这已经足够接近一切了。但需要注意区别。
        猜你喜欢
        • 2014-03-01
        • 1970-01-01
        • 2022-06-19
        • 1970-01-01
        • 1970-01-01
        • 2011-05-11
        • 2021-08-23
        • 1970-01-01
        • 2021-03-11
        相关资源
        最近更新 更多