【问题标题】:Disable underline for lowercase characters: g q p j y?禁用小写字符的下划线:g q p j y?
【发布时间】:2014-05-16 23:25:21
【问题描述】:

有时您不希望下划线盲目地穿过带下划线的页面标题!
有没有办法优雅地自动禁用某些小写字符的下划线 在这些情况下,最好不要在这些小写字母下划线,例如 {g,q,p,j, y}

CSS: h1{ text-decoration: underline; }
PAGE TITLE: George quietely jumped!

A) 有没有任何方法可以实现如此精细和高级的样式规则?
B) 还有哪些其他拉丁字符我们要取消下划线吗?
C) 如何设置下划线的粗细?

【问题讨论】:

标签: javascript css underline


【解决方案1】:

你也可以用底部边框伪造下划线。这适用于单行,如果显示属性允许元素在内容上缩小。 (只是避免阻塞)。

这里是一个带有display:table 的示例,以允许居中文本和前后换行:http://codepen.io/gc-nomade/pen/vJoKB/ 有什么想法?

  1. 设置小于字体大小的行高会导致文本从其容器溢出。
  2. 为文本绘制下边框
  3. SVG 提供 stroke ,在 CSS 中,我们可以做类似的增加 text-shadow 与背景相同的颜色。
  4. DEMO您甚至可以为 simili 下划线设置不同的颜色并添加阴影。

在旧版浏览器中,您将失去 box-shadow 选项,但您仍然可以使用与文本颜色不同的 doublegrooveridge border 样式。


感谢@PatNewell 分享这个链接:https://medium.com/designing-medium/7c03a9274f9

【讨论】:

  • 太棒了,我不知道text-shadow 能走那么远。您可能只是精确地说它们不受 IE9 和 caniuse.com/css-textshadow 的支持
  • 抱歉不清楚删除了我的帖子,惭愧。我在这方面不如我想的那么好。看看我想要的是让 Gcyrillus 的演示(它没有自动 javascript 功能,并且逐字母手动 css)与 web-tiki 的自动 javascript 一起工作。这种组合会得到更好的结果。真的?我自己尝试了一些东西,但无济于事helas。我还不清楚吗?我一定很愚蠢:)
  • oki,就像我说的,导入 css 到下划线类,所以你有两个:JS + CSS jsfiddle.net/5u44B/46
  • GCyrillus 和 @Sam,这两种技术不能一起工作,正如您在 GCyrillus 刚刚发布的小提琴中看到的那样,如果 Sam 的观点是,.underline 上的 display:inline-block; 属性会打破单词之间的空格在我的技术中添加下划线效果(使用 2 行),这不是实现它的方法。
  • 嗨@web-tiki,不,这不是我的意思:在您的演示中,自动生成的取消下划线是字母的全宽,因此整个字母“p”没有下划线。在 GCyrillus 展示的演示中,未加下划线的部分以图形方式围绕字母流动,这样它就更好了!所以我想要的是他的无下划线阴影样式与你的自动 javascript 解决方案合并。也许是第二次跟进赏金的时候了!?!?!哥们你怎么看? :)
【解决方案2】:

此解决方案使用jQuery 自动将要下划线的字母换行在<span> 标记中。

DEMO

作为具有text-decoration:underline 的父母“覆盖”具有text-decoration:none; 的孩子(请参阅here)。该技术是仅用<span class="underline"> 包装目标字母(要下划线的字母)并将text-decoration:underline; 应用于该类。

输出:

不加下划线的符号:

g  j  p  q  y  Q  @  {  _  (  )  [  |  ]  }  ;  ,  §  µ  ç  /

HTML:

<h1 class="title">George quietely jumped!</h1>

CSS:

.underline {
    text-decoration:underline;
}

jQuery :

$('.title').each(function () {
    var s = '<span class="underline">',
        decoded;
    $(this).prop('innerHTML', function (_, html) {
        s += html.replace(/&amp;/g, '&').replace(/(g|j|p|q|y|Q|@|{|_|\(|\)|\[|\||\]|}|;|,|§|µ|ç|\/)/g, '</span>$1<span class="underline">');
        s += '</span>'
        $(this).html(s);
    });
});

【讨论】:

  • @Sam 使用此技术,您不会失去&lt;h1&gt; 标签的 SEO 语义,第一个原因:脚本未触及它,第二个原因 JS 未被大多数爬虫计算。尽管 wwitch 不如 &lt;h1&gt; 标签重要,但您将失去下划线的语义。
  • @Sam 我刚刚更新了我的答案,修复了 & 符号,我还添加了很多其他不需要下划线的符号。如果你想到其他的,请告诉我。
  • 你好,我只是为 & jsfiddle.net/ytR8s/4 这样做。确实很好的问题:)
  • @GCyrillus 哦,是的,这太奇怪了!
  • @web-tiki 我不关注你,它只搜索字符串。我一定在这里遗漏了一些东西:)
【解决方案3】:

文字装饰模块3级介绍text-decoration-skip

此属性指定元素内容的哪些部分是任何文本 影响元素的装饰必须跳过。

你可以通过将其设置为ink来实现你想要的行为:

跳过绘制字形的位置:打断装饰线,让 文本的形状通过文本装饰的位置显示 否则跨越一个字形。 UA 必须跳过一小段距离 字形轮廓的任一侧。

h1 {
  text-decoration: underline;
  text-decoration-skip: ink;
}
&lt;h1&gt;George quietely jumped!&lt;/h1&gt;

注意主要浏览器还不支持它。

【讨论】:

    【解决方案4】:

    如果您知道背景颜色(在本例中假设为白色),请试一试:

    h1 {
        line-height: 0.9em;
        border-bottom: 1px solid black;
        text-shadow: 2px 2px #fff, -2px 2px #fff;
    }
    

    想法:

    1. 使用border-bottom,并降低line-height以将h1 box模型的底部拉上来。
    2. 应用两个不模糊的文本阴影,它们将呈现在文本后面和边框底部上方。 (在这个例子中,第一个是向下和向左 2px;第二个是向下和向右 2px。)

    小提琴:http://jsfiddle.net/pmn4/a5LZE/


    fyi - 浏览器不能很好地处理文本阴影;谨慎使用!

    【讨论】:

    • 这正是我在回答中解释和展示的内容:),您是否阅读并关注了演示链接?那是 3 周前左右:p
    • 哦!对@GCyrillus 感到抱歉。完全错过了。
    • 没问题,看到你的答案突然冒出来让我有点好笑。那时我正在那个页面上与 web-tiki 聊天。 :)
    • 顺便说一句,感谢您早先分享此链接medium.com/designing-medium/7c03a9274f9,您也应该将其添加到您的答案中。它告诉了很多事情:)
    【解决方案5】:

    这会很痛苦,但我会创建一个“下划线”类,然后手动进行操作

    HTML

    <h1><span class="underline">Ver</span>g<span class="underline">eten Kanalen</span></h1>
    

    CSS

    .underline{text-decoration:underline;}
    

    【讨论】:

    • 为什么会被否决?这回答了问题(就此而言,这几乎是唯一有效的答案)。
    • 我也相信将不应加下划线的字母换行会更有效。
    • 是的,事后看来,包裹非下划线的字母会更有效,但两者都可以。
    • 还可以通过给 H1 一个“fix-underline”类来减少 HTML,然后让跨度不带类。 CSS 选择器是 h1.fix-underline span { ... }
    • 只是我的 2p 价值:除非有一个可以正则表达式文本内容并添加此类跨度标签的后端平台,否则这不能自动化(如 OP 所要求的那样) - 这听起来相当 hacky,而且我甚至不想让 JS 做同样的事情(FOUC)。也许最好的答案是对问题的第一条评论
    【解决方案6】:

    这是我的解决方案:

    Working Fiddle

    CSS

    h1, h2 {
      background-image: linear-gradient(to top, transparent 0px, transparent .15em, red .15em, red calc(.15em + 1px), transparent calc(.15em + 1px), transparent 100%);
      text-shadow: 0px -2px 3px white, 0px -2px 3px white, 0px -2px 3px white, 0px -2px 3px white, 0px -2px 3px white, 0px -2px 3px white;
    }
    

    【讨论】:

      【解决方案7】:

      查看text-decoration-skip-ink CSS 属性。这可以指定上划线和下划线越过字形升序和降序时的绘制方式。

      h1 {
        text-decoration: black underline;
        text-decoration-skip-ink: auto;
      }
      &lt;h1&gt;George quietely jumped!&lt;/h1&gt;

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-19
        • 2014-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多