如何实现文字下划线左右最大各延伸300px且适配不同屏幕宽度
实现自适应延伸下划线的方案
方案1:伪元素实现(推荐,无多余DOM)
实现原理
- 用伪元素生成下划线,无需额外添加空节点
- 通过
min()函数动态计算宽度,同时满足两个限制:最大宽度为文本宽度+600px(左右各延伸300px)、最大不超过屏幕宽度减20px(避免贴边) - 绝对定位配合水平偏移实现下划线与文本居中对齐
完整代码
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>自适应下划线</title> <style> .text-wrapper { display: inline-block; position: relative; /* 可自定义文本上下边距 */ margin: 20px 0; } .text-wrapper::after { content: ''; position: absolute; /* 调整下划线和文本的间距 */ bottom: -4px; left: 50%; transform: translateX(-50%); /* 下划线高度 */ height: 2px; /* 下划线颜色 */ background-color: #222; /* 核心规则:动态计算宽度 */ width: min(calc(100% + 600px), calc(100vw - 20px)); } </style> </head> <body style="text-align: center; padding: 0 10px;"> <div class="text-wrapper"> <p>Hello</p> </div> </body> </html>
方案2:基于原有代码修改
无需调整整体结构,仅修改两处样式即可修复问题:
- 左右空div将固定
width:300px改为flex: 1; max-width: 300px,实现宽屏固定300px、窄屏自动收缩 - 外层父容器添加
max-width: 100%,避免超出屏幕宽度
修改后代码
<div style="max-width: 100%; width: fit-content; display: flex; flex-direction: column; margin: 0 auto;"> <div style="display: flex; flex-direction: row; width: 100%;"> <div style="flex: 1; max-width: 300px;"></div> <p style="margin: 0;">Hello</p> <div style="flex: 1; max-width: 300px;"></div> </div> <hr style="width: 100%; margin: 4px 0 0 0;"> </div>
效果验证
- 宽屏场景:下划线向左右各延伸300px,符合预期
- 窄屏场景:下划线自动收缩到适配屏幕宽度,不会溢出被裁剪
内容的提问来源于stack exchange,提问作者Fudge Fudge
相关产品推荐
相关产品推荐

