禁用小写字符的下划线:gqpjy?

IT技术 javascript css underline
2021-03-09 18:06:00

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

在此处输入图片说明

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

A ) 有什么方法可以实现如此精致和高级的造型规则?
B ) 我们想要取消下划线的其他拉丁字符是什么?
C ) 如何设置下划线的粗细?

6个回答

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

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

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

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


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

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

此解决方案用于jQuery将字母自动换行以在<span>标签中加下划线

演示

作为text-decoration:underline“覆盖”孩子的父母text-decoration:none;(见这里)。该技术是仅用 a 包裹目标字母(要下划线的字母)<span class="underline">并应用于text-decoration:underline;该类。

输出 :

jQuery 所选字符上没有下划线

不加下划线的标志:

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);
    });
});

@GCyrillus 哦,是的,那更不妙了!
2021-05-05 18:06:00
@Sam 我刚刚用 & 符号的修复更新了我的答案,我还添加了很多其他不需要下划线的符号。告诉我你是否想到了其他的。
2021-05-06 18:06:00
@Sam 使用这种技术,您不会丢失<h1>标签的 SEO 语义,第一个原因:脚本未触及它,第二个原因 JS 不是由大多数爬虫计算的。尽管女巫远不如<h1>标签重要,但您将失去下划线的语义
2021-05-09 18:06:00
@web-tiki 我不关注你,它只搜索字符串。我一定在这里遗漏了一些东西:)
2021-05-12 18:06:00
你好,我只是为 & jsfiddle.net/ytR8s/4做这件事确实很好的问题:)
2021-05-20 18:06:00

文字装饰moduleLevel 3介绍 text-decoration-skip

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

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

跳过绘制字形的位置:打断装饰线,让文本的形状通过文本装饰会与字形交叉的位置显示出来。UA 必须向字形轮廓的任一侧跳过一小段距离。

在此处输入图片说明

h1 {
  text-decoration: underline;
  text-decoration-skip: ink;
}
<h1>George quietely jumped!</h1>

请注意,主要浏览器尚不支持它。

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

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

想法:

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

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


仅供参考 - 浏览器不能很好地使用文本阴影;保守使用!

哦!抱歉@GCyrillus。完全错过了。
2021-05-03 18:06:00
这正是我在回答中解释和展示的内容:),您是否阅读并遵循了演示链接?那是 3 周前左右:p
2021-05-10 18:06:00
没问题,看到你的答案突然出现对我来说有点好笑。当时我正在那个页面上与 web-tiki 聊天。:)
2021-05-18 18:06:00
顺便说一句,感谢您之前分享此链接medium.com/designing-medium/7c03a9274f9,您也应该将其添加到您的答案中。它讲述了很多事情:)
2021-05-20 18:06:00

这会很麻烦,但我会创建一个“下划线”类,然后手动进行

HTML

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

CSS

.underline{text-decoration:underline;}
我也相信,将不应该加下划线的字母包装起来会更有效。
2021-04-22 18:06:00
是的,事后看来,包装无下划线的字母会更有效,但两者都可以。
2021-04-26 18:06:00
为什么这是downvoted?这回答了这个问题(几乎是唯一有效的答案,就此而言)。
2021-04-29 18:06:00
也可以通过给 H1 一个“修复下划线”类来减少 HTML,然后让跨度没有类。CSS 选择器将是 h1.fix-underline span { ... }
2021-05-08 18:06:00
只是我的 2p value:除非有一个后端平台可以对文本内容进行正则表达式并添加这样的跨度标签,否则这不能自动化(如 OP 所要求的那样)-虽然听起来很hacky,但我什至不想去想JS 也在做同样的事情(FOUC)。也许最好的答案是对问题的第一条评论
2021-05-18 18:06:00