当前位置:首页 > 技术知识 > 正文内容

不要哪里都用div标签,特别是嵌套多的时候,这会越来越糟糕

maynowei7个月前 (09-11)技术知识96

如果你的HTML里<div>标签比2007年的WordPress主题还多,我们得好好审视下了。

干净的标记不仅更美观,而且更智能。

刚接触前端开发时,我把<div>当盐一样使用。

  • 到处乱撒
  • 每个元素都加一层
  • 需要包装器?用div
  • 需要容器?还是div
  • 需要...随便什么?没错——又是div

几年后调试一个布局时,我发现仅仅为了在页面中央放置一个卡片,竟然嵌套了11个<div>

这就像剥洋葱,只不过我不是被感动哭的,而是被CSS地狱折磨哭的。

最讽刺的是:这些div大多毫无作用

这个div滥用问题

这相当于回调地狱的标记语言版本。一开始只是小问题:

四层包装器了,我们甚至还没接触到真实内容。

确实,有时我们需要几层结构来实现布局或样式,但开发者常常不假思索就使用<div>,而不是停下来思考:
这个元素到底在做什么

HTML有语义...请善用它

浏览器不在乎你的整个网站是否全是div。但未来的你、辅助技术工具、以及任何维护你代码的人会在乎。

不要这样写:

而是这样写:

这样更易读、更有语义、更可访问。

猜猜看?这样还更容易设置样式。

深度嵌套=脆弱的布局

嵌套越深,就越难:

  • 调试定位问题
  • 干净地应用响应式样式
  • 理解间距来源

你可能见过这种情况:

过度嵌套会导致选择器变得荒谬。当设计变更时(这是必然的),你只能:

  1. 解开那团DOM意大利面
  2. 添加_更多_包装器来打补丁

这就像用胶带修补漏水的管道——前端版的权宜之计。

控制错觉

很多开发者添加div是因为害怕布局破坏。"先包一层吧,万一后面需要样式调整呢"

这种"以防万一"的心态很危险。它会:

  • 污染你的DOM结构
  • 加剧样式优先级冲突
  • 让样式推理变得极其困难

想要最大宽度容器?用工具类或CSS Grid容器。
别嵌套三个div然后求神保佑。

现实案例:简化卡片组件

糟糕的写法:

优化后的写法:

我们直接干掉了两个多余的包装器。

布局依然有效。
灵活性丝毫不减。

但现在DOM结构清晰可读了...对你和屏幕阅读器都一样

什么情况下嵌套确实必要?

有些嵌套不可避免——布局本来就不是平的
但每个包装器都应该有存在的理由:

  • 它是flex/grid容器吗?
  • 它提供了语义含义吗?
  • 它充当了样式边界吗?

如果不符合以上任何一条,就删除它。

这里有个实用原则:如果div没有class、没有属性、没有明确目的...就删掉它

为什么你的标记让布局更难维护

性能加成:更轻量的DOM=更快的页面

更少的节点意味着浏览器需要解析、样式化和绘制的元素更少。布局重排更快,调试更顺畅,你的Lighthouse评分可能也会提升。

没错,删两个div不会让应用飞起来。但如果是在大型网站上全面优化?效果会累积

HTML不只是你在CSS和JS"真正工作"之前写的东西。
它是UI的基础,其结构方式至关重要

我们都曾过度嵌套div。
我们都曾为了"以防万一"而添加包装器。

但你的标记质量取决于它的可维护性。

六个月后可能就是你自己来维护这段代码——提前谢谢你现在没有构建一个div套娃结构。

所以下次你要添加包装器时,先停下来问问:

  • 能否改用语义化元素?
  • 能否不嵌套就实现样式?
  • 这个层级能不能...干脆不存在?

因为更精简的DOM,就是更快乐的DOM。

相关文章

关于异步信号安全(下面关于异步电路危害的描述错误的是)

线程安全与重入以及异步信号安全的区别. 可重入一定是线程安全的,但是线程安全不一定是可重入的. 引用别人的博客中的话吧.如下: http://blog.csdn.net/xiaofei0859/art...

一个快要被忘记的数据库开发岗位,但应该被尊重

数据库测试,似乎是被人遗忘的数据库职业,但依然是不错的选择。底下是我在某站找的招聘启事,就连蚂蚁金服都在积极寻找数据库测试人:要说我经历的项目,大大小小也有几十个,从 C/S, B/S, 再到 B/C...

Oracle又双叕开始严查JDK,连夜提桶跑路

哈佛商业报道了最近几起北美的JDK许可问题公司用了来源不明的JDK,怕蹲里面,连夜提桶跑路The company uses JDK from unknown sources, and is afrai...

Oracle数据库无法连接问题排查(oracle数据库连接不成功)

数据库告警日志 如下图 。发现 问题时间段,没有 数据库服务故障 报错,但是存在较多 TNS-12535 、 12560 、 12170 、 00505 错误:通过检查问题时间段应用日志, 也记录了...

ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务

早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误,帮其解决后,发现很多人遇到过这样的问题,因此写着这里。也...

Oracle 11g安装教程完整版(oracle 11g 安装教程)

由于工作需要,将安装的经验分享给大家。第一步:首先准备安装文件包:Oralce 11.2.0.4 64bit和plsqldev1405x64如图所示:第二步:将2个文件解压到同一个目录,如图所示:第三...