HTML5语义化标签实战经验分享及常见误区解析
语义化标签怎么用?折腾了半天发现这些坑
最近在重构一个项目的时候,想着把一些旧的div标签换成更语义化的HTML5标签。一开始觉得这事儿挺简单的,改完以后才发现,哎,还是踩了不少坑。
直接上代码吧,我最后是怎么改的
先看下最终的代码吧,这是核心的部分:
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>我的项目</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<header>
<nav>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
</header>
<main>
<article>
<h1>欢迎来到我们的网站</h1>
<p>这里是我们的一些介绍内容。</p>
</article>
<aside>
<h2>侧边栏</h2>
<p>这里可以放一些辅助信息。</p>
</aside>
</main>
<footer>
<p>版权所有 © 2023</p>
</footer>
</body>
</html>
为什么我要改?这里的坑在哪里
其实这个项目之前都是用div套div的方式写的,虽然看起来也挺规整,但是一旦页面复杂起来,维护起来就特别麻烦。比如,你得记住每个div是干嘛的,还得靠类名和ID来区分不同的部分。而且,从SEO的角度来看,这样的结构对搜索引擎也不是很友好。
所以我就想着,干脆把那些div都换成HTML5的语义化标签,比如<header>、<nav>、<main>、<article>、<aside>和<footer>。这样不仅代码更清晰,也更容易理解。
改的过程中遇到的问题
开始改的时候我还挺顺利的,但是改到一半发现,有些地方并不像想象中那么简单。特别是CSS样式这块,之前的样式都是针对div写的,现在换了标签,很多样式就失效了。
比如,原来的头部导航是这样写的:
<div class="header">
<div class="nav">
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</div>
</div>
改成了:
<header>
<nav>
<ul>
<li><a href="#">首页</a></li>
<li><a href="#">关于我们</a></li>
<li><a href="#">联系我们</a></li>
</ul>
</nav>
</header>
结果发现,原本的.header和.nav样式都不生效了。折腾了半天发现,原来是因为选择器的问题。我得把.header改成header,把.nav改成nav才行。
另一个坑:浏览器兼容性
还有一个问题是浏览器兼容性。虽然现在大部分浏览器都支持HTML5标签,但还是有一些老旧的浏览器(比如IE8)不支持这些新标签。这个问题我也是后来才意识到的,因为测试的时候没注意到。
解决方法就是加个小小的polyfill,让老浏览器也能识别这些标签。网上有很多现成的解决方案,我用了这个:
document.createElement('header');
document.createElement('nav');
document.createElement('main');
document.createElement('article');
document.createElement('aside');
document.createElement('footer');
这段代码的作用就是告诉老浏览器,这些标签是存在的,别给忽略了。
总结一下吧
总的来说,改用HTML5语义化标签确实能让代码更清晰,也更有利于SEO。但是,改的过程中还是得小心一些细节问题,特别是CSS样式和浏览器兼容性。希望这些经验能帮到你,如果你有更好的方案或者遇到了其他问题,欢迎在评论区交流。
