iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >css如何解决文字和text-decoration:underline下划线重叠问题
  • 483
分享到

css如何解决文字和text-decoration:underline下划线重叠问题

2024-04-02 19:04:59 483人浏览 薄情痞子
摘要

这篇文章给大家分享的是有关CSS如何解决文字和text-decoration:underline下划线重叠问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、text-deco

这篇文章给大家分享的是有关CSS如何解决文字和text-decoration:underline下划线重叠问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

一、text-decoration:underline下划线的问题

CSS text-decoration:underline可以给内联文本增加下划线,但是,如果对细节要求较高,就会发现,下划线经常会和中文文字的下边缘搞在一起,英文的话甚至直接穿越,看起来就比较香菇蓝瘦。

css如何解决文字和text-decoration:underline下划线重叠问题

上图几个中文下边缘正好都是横线,结果,可以看到,基本上合在一起分不清谁是谁了,换成微软雅黑字体(见下图),似乎变本加厉了:
css如何解决文字和text-decoration:underline下划线重叠问题

有没有什么办法让下划线不要靠得这么近,或者文字可以完整清晰地显示呢?

有,方法还不少,下面逐一介绍,大家可以根据自己的实际项目需求,选择合适的技术选型。

方法一:text-decoration-skip指定覆盖关系

理论上,使用下面的CSS:

a { text-decoration-skip: ink; }

机会有类似下图的效果:
css如何解决文字和text-decoration:underline下划线重叠问题

text-decoration-skiptext-decoration相关的css3新的属性,还有很多其他新的CSS3 text-decoration属性,可以指定下划线类型等,具体可参见我之前的文章:“了解CSS3 text-decoration新特性新表现”。

看上去效果很不错,但是遗憾的是,即使现在快到2017年了,此属性的浏览器支持情况还是很不乐观,包括大头Chrome浏览器目前尚未支持。

Safari 8+ supports -WEBkit-text-decoration-skip with values none and skip (other values behave like none or skip)

目前也就是Safari 8+浏览器支持带-webkit-私有前缀的text-decoration-skip属性,且仅仅支持skip(默认值)和none两个值,换句话说,Safari 8+浏览器默认下划线就是和文字非穿越而是避让效果。这进一步导致CSS代码中没有text-decoration-skip属性出现的必要了。所以,此方法虽然最原生,但时机还不够。

方法二:使用border-bottom属性模拟

内联元素虽然不支持垂直方向的margin属性,但是支持垂直方向的padding属性和border属性,并且,对原来的布局定位等没有任何影响。因此,配合padding,我们就可以很有效地调节下边框和文字下边缘的距离,实现我们最想要的的效果,类似下面的CSS代码:

a {
    text-decoration: none;
    border-bottom: 1px solid;
}

效果类似下图:
css如何解决文字和text-decoration:underline下划线重叠问题

如果觉得border-bottom模拟的下划线还是和文字走得太近,我们可以使用padding-bottom再撑开点距离,例如:

a {
    text-decoration: none;
    border-bottom: 1px solid;
    padding-bottom: 5px;
}

则效果类似下面截图:
css如何解决文字和text-decoration:underline下划线重叠问题

眼见为实,您可以狠狠地点击这里:border-bottom模拟下划线文字无重叠demo

注意,使用border-bottom模拟下划线的时候,border-color最好缺省,这样就会使用文字的color颜色作为边框色,这样,鼠标hover的时候,下划线会自动和文字一起变色,类似下图效果:
css如何解决文字和text-decoration:underline下划线重叠问题

使用border-bottom模拟的另外一个好处就是我们还可以使用虚线下划线:

a {
    text-decoration: none;
    border-bottom: 1px dashed;
}

类似下面实际项目需求的截图就可以使用这种策略:
css如何解决文字和text-decoration:underline下划线重叠问题

方法三:使用box-shadow属性模拟

我们也可以使用CSS3 box-shadow属性模拟下划线,代码如下:

a {
    text-decoration: none;
    box-shadow: 0 1px;
}

同样,建议颜色值缺省,使用color属性的颜色值。

效果基本上和border-bottom如出一辙,如下截图:
css如何解决文字和text-decoration:underline下划线重叠问题

眼见为实,您可以狠狠地点击这里:box-shadow模拟下划线效果demo

相比border-bottom属性,box-shadow的优势在于,即使我们把内联元素设置成display:inline-block,生成的下划线也不会对垂直对齐或者布局产生影响,但,如果是border-bottom,会增加元素的尺寸,可能就会影响元素的排列。

但是,box-shadow也有不足,一是兼容性,IE9+才支持,二是只能实线,不能虚线。

方法四:使用background-image属性模拟

就是使用CSS3渐变绘制实线或虚线背景图。

效果截图如下:
css如何解决文字和text-decoration:underline下划线重叠问题

相关CSS代码如下:

.solid {
    padding-bottom: 2px;
    background-image: linear-gradient(to top, currentColor, currentColor 1px, transparent 1px);
}
.dashed {
    padding-bottom: 2px;
    background: linear-gradient(to right, currentColor, currentColor 4px, transparent 4px) repeat-x 0 bottom/7px 1px;    
}

由于背景图片是在原本区域内显示,有别于border-bottom或者box-shadow区域外显示,因此,实现的下划线实际上和文字还是很近的,尤其类似yqp这种基线以下的字母,就会合体。一般有两种处理手段,一种是文字增加白色描边,类似下面CSS:

a {
    text-shadow: 0 1px #fff, 0 -1px #fff, 1px 0 #fff, -1px 0 #fff;
}

效果类似下面这样:
css如何解决文字和text-decoration:underline下划线重叠问题

第二种就是使用padding-bottom对内联元素增加可视高度。所以,上面实线下划线和虚线下划线均有padding-bottom:2px的设置。

眼见为实,您可以狠狠地点击这里:background-image模拟下划线效果demo

对了,突然想起来,demo中的下划线使用的是currentColor变量,但是在Chrome浏览器和IE浏览器下,currentColor作为背景图片色值的时候,当:hover改变元素的color颜色值的时候,背景图片颜色并不会跟着变,Firefox浏览器的表现符合预期,因此,如果使用此方法,需要:hover时候,背景图片重新绘制下。

使用background-image绘制的好处在于,我们对样式的控制更灵活的,例如我们可以把线放在文字的后面,我们可以上下划线,我们控制虚线的稀松程度,我们也可以使用圆点表示虚线,我们甚至也可以使用径向渐变绘制波浪样子的下划线,甚至可以把线做成倾斜的等等。不足在于IE10+浏览器才支持。

方法五:使用SVG滤镜处理

该SVG滤镜相关html代码如下:

<svg class="out">
  <filter id="svg-underline" primitiveUnits="objectBoundingBox"><!-- 原图文基础上水平垂直方向一点点扩展并存储到新的层上 --><feMorphology in="SourceGraphic" operator="dilate" radius="0.0075 0.05" result="outline"></feMorphology><!-- 一个蓝色矩形,高度3%然后宽度100%,位置稍微往下一点 --><feFlood flood-color="#34538b" width="1" height="0.03" x="0" y="0.9" result="underline"></feFlood><!-- 遮罩蓝色矩形,这样,文字重合部分边缘会镂空 --><feComposite in="underline" in2="outline" operator="out" result="underline"></feComposite>    <!-- 效果合体 --><feMerge>
      <feMergenode in="underline"></feMergeNode>
      <feMergeNode in="SourceGraphic"></feMergeNode>
    </feMerge>
  </filter>
</svg>

相关CSS代码如下:

a {
    -webkit-filter: url('#svg-underline');
    filter: url('#svg-underline');
    text-decoration: none;
}

然后,实现的效果类似下面的截图(截自Chrome浏览器):
css如何解决文字和text-decoration:underline下划线重叠问题

看上去很麻烦很啰嗦,hover变色还需要另外的处理,SVG滤镜兼容性并不乐观,IE现在都不支持,所以,这种方法的意义在哪里?

意义就在于可以实现真正意义上的text-decoration-skip效果,也就是下划线和文字重叠的位置自动从文字下面穿过,并且附近完全是真正的透明,仔细看上面截图,可以看到,文字和下划线接触的位置的地方,看上去有1像素的接触点是透明的。

原生的Safari外加SVG滤镜下的Chrome/Firefox,也就是绝大多数浏览器都可以实现下划线和文字自动接触点镂空的效果。

眼见为实,您可以狠狠地点击这里:使用SVG滤镜模拟下划线demo

方法六:使用canvas实现(著名的Underline.js

Underline.js项目地址:https://GitHub.com/wentin/underlineJS

作者是这位妹纸(图片源自网络):
css如何解决文字和text-decoration:underline下划线重叠问题

zhangwenting,目前任职于 Adobe Typekit。

underline.js同样实现的是下划线和文字重叠自动避让的效果,类似下图:
css如何解决文字和text-decoration:underline下划线重叠问题

您可以狠狠地点击这里:canvas原理的underline.js解决下划线重叠demo

基本上,下划线文字穿越效果只有英文才好看,中文如果穿越,我去,基本上下划线就没了,尤其类似“金玉全王”这样的汉字:
css如何解决文字和text-decoration:underline下划线重叠问题

所以,对于中文,最好的效果还是避让,就是直接线和文字留点距离,这样是最好的。对于,英文为主的内容,则text-decoration-skip效果确实还是挺有价值的。

根据我自己对underline.js的使用,发现,局限性还不小,内联元素最好要inline-block化,纯inline生成的canvas的垂直位置不是很精准,然后,不支持文字自动换行下划线折线显示,毕竟canvas元素是个独立的替换元素,跟图片一样,不可能换行时候分一半上面再一半下面。

基本上,适合用在局部一些大的标语,标题,sloGon等位置或者追求视觉的官方网站或活动页面上使用。

感谢各位的阅读!关于“css如何解决文字和text-decoration:underline下划线重叠问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: css如何解决文字和text-decoration:underline下划线重叠问题

本文链接: https://www.lsjlt.com/news/94121.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • css如何解决文字和text-decoration:underline下划线重叠问题
    这篇文章给大家分享的是有关css如何解决文字和text-decoration:underline下划线重叠问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、text-deco...
    99+
    2024-04-02
  • vuerouter-link下划线和颜色问题及解决
    目录router-link下划线和颜色问题解决方法"router-link"各种属性解释1.":to" 属性2."replace&q...
    99+
    2022-11-13
    vue router-link router-link下划线 router-link颜色
  • Linux 下 Sublime Text 中文输入问题的如何解决
    这篇文章主要介绍“Linux 下 Sublime Text 中文输入问题的如何解决”,在日常操作中,相信很多人在Linux 下 Sublime Text 中文输入问题的如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希...
    99+
    2023-06-13
  • 如何解决CSS中margin边界叠加的问题
    小编给大家分享一下如何解决CSS中margin边界叠加的问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!CSS的margin边界叠加深度剖析边界叠加简介边界叠加是一个相当简单的概念。但是...
    99+
    2024-04-02
  • mybatis plus 查询数据库字段名自动添加下划线问题解决
    实体类和数据库中的字段名是一致的,但报错Unknown column 'dept_id' in 'field list',这是因为plus中的驼峰命名法,会自动添加下划线。 关闭驼峰式命名转换为下划线 在配置文件中加一个: mybatis...
    99+
    2023-09-01
    mybatis java mysql
  • 如何解决Win7快速启动栏图标重叠的问题
    Win7快速启动栏图标重叠怎么办?下面为大家介绍: 1、中毒了,下载360系统急救箱查杀一下。下载地址 http://down.360safe.com/360compkill5.0.zip 2、显卡驱动过老,更新显卡驱动...
    99+
    2023-05-26
    快速启动栏 图标 问题 Win7
  • firefox中div重叠覆盖之前ul的问题如何解决
    这篇文章主要介绍“firefox中div重叠覆盖之前ul的问题如何解决”,在日常操作中,相信很多人在firefox中div重叠覆盖之前ul的问题如何解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操...
    99+
    2024-04-02
  • 如何解决css文件乱码问题
    这篇文章主要介绍如何解决css文件乱码问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!css文件乱码的解决办法就是将css编码和html页面编码统一起来,方法如:1、用记事本打开源码,编码另存为“ANSI”;2、用...
    99+
    2023-06-14
  • 如何解决Linux下文件名、文件和mp3名字、pdf的乱码问题
    这篇文章主要介绍“如何解决Linux下文件名、文件和mp3名字、pdf的乱码问题”,在日常操作中,相信很多人在如何解决Linux下文件名、文件和mp3名字、pdf的乱码问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-13
  • 如何解决css数字文本过长被隐藏的问题
    这篇文章主要介绍了如何解决css数字文本过长被隐藏的问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 css数...
    99+
    2024-04-02
  • linux下如何解决was汉字乱码问题
    这篇文章给大家分享的是有关linux下如何解决was汉字乱码问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。linux下was汉字乱码的解决办法:1、登录WAS管理控制台;2、选择“java虚拟机”;3、 设置...
    99+
    2023-06-25
  • CSS样式如何解决文字过长显示省略号问题
    这篇文章主要介绍了CSS样式如何解决文字过长显示省略号问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、CSS样式 解决文字过长显示省略...
    99+
    2024-04-02
  • 如何使用CSS解决文本溢出问题
    这篇文章主要介绍了如何使用CSS解决文本溢出问题的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇如何使用CSS解决文本溢出问题文章都会有所收获,下面我们一起来看看吧。   CS...
    99+
    2024-04-02
  • 如何理解权重和层叠规则决定了CSS样式优先级
    本篇内容介绍了“如何理解权重和层叠规则决定了CSS样式优先级”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • css文字和图片对不齐如何解决
    本篇内容介绍了“css文字和图片对不齐如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!css文字和图片对不齐的解决办法:1、打开相应的...
    99+
    2023-07-05
  • 如何解决CSS margin-top在火狐下失效问题
    这期内容当中小编将会给大家带来有关如何解决CSS margin-top在火狐下失效问题,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。margin-top属性在火狐及IE下...
    99+
    2024-04-02
  • CSS中flex-basis文本溢出问题如何解决
    本篇内容介绍了“CSS中flex-basis文本溢出问题如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1. flex 家族flex ...
    99+
    2023-07-05
  • 如何解决JVMFullGC引发严重线上事故的问题
    今天就跟大家聊聊有关如何解决JVMFullGC引发严重线上事故的问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、业务场景介绍先简单说说线上生产系统的一个背景,因为仅仅是文章作为...
    99+
    2023-06-03
  • Java中的重定向和路径关键字:如何调试和解决问题?
    Java是一种广泛使用的编程语言,它在开发Web应用程序、桌面应用程序、移动应用程序等方面都有广泛的应用。在Java编程中,重定向和路径关键字是必不可少的概念。重定向是将用户从一个URL重定向到另一个URL,而路径关键字则是指在Java应用...
    99+
    2023-10-11
    重定向 关键字 path
  • 如何解决JS在firefox和IE下差异问题
    这篇文章主要介绍了如何解决JS在firefox和IE下差异问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。JS在firefox和IE下差异...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作