语义错误
块级元素可以包含内联元素和某些块级元素,内联元素不能包含块级元素,只能包含内联元素
页面可能正常解析,但不符合语义。浏览器自带容错机制,对于不规范的写法也能够正确解析,各浏览器的容错机制不同,所以尽量按规范来写;
/*规范的写法*/
<div>
<h2>jikexueyuan</h2>
<p>IT education</p>
</div>
/*不规范的写法*/
<span>
<div>wrong</div>
</span>
h1、h2、h3、h4、h5、h6、P标签不能包含块级元素 如div section等
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no,email=no" name="format-detection">
<meta name="App-Config" content="fullscreen=yes,useHistoryState=yes,transition=yes">
<title></title>
</head>
<body>
<a href="">
<button>click</button>
</a>
<p>
<h3>dsds</h3>
</p>
</body>
</html>
行内元素强制转成块级元素,块级元素强制转成行内元素
如下做法是不推荐的:
给 <div> 标签设置 inline-block 属性
给 <span>标签设置 block 属性
li标签可以包含div以及ul,ul的子元素应该只有li
/*规范的写法*/
<li>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
<div></div>
</li>
/*不规范的写法*/
<ul>
<a href="">迷路的a标签</a>
<li></li>
<li></li>
<li></li>
</ul>
使用 disabled=false
disabled 属性是用来禁用标签的,一般用于 input 、button等,表示不可点击。
正常的用法是:
<input type="text" name="lname" />
<input type="text" name="lname" disabled="disabled" />
错误的写法:
<input type="text" name="name" disabled="false" />
这里虽然 disabled="false" 语义也代表不禁用,但实际上是被禁用的。
disabled 属性规定应该禁用 input 元素,即只要出现改属性为禁用。<input type="text" name="name" disabled="" />
页面中同一个 ID 出现两次及更多
ID应该是dom元素唯一标示符;
错误的使用 role 属性
role更多的是用来增强语义性,当现有的html标签不能充分表达语义性的时候,就可以借助role来说明。通常它更多的出现在一些自定义的组件上。比如html中没有tree标签,我们就可以把他的role设置为tree,这样可以增强组件的可访问性、可用性和可交互性。