网站html结构分析 | 青训营笔记

138 阅读3分钟

从哔哩哔哩首页的HTML结构来看,它主要广泛使用了非语义化标签(如div和span)。以下是对其HTML结构中非语义化标签使用的分析以及它们的差异:

div 的使用分析

特点

  1. 主要用于容器和布局: div 主要被用来包裹大块的内容区域。例如,导航栏、视频列表、推荐内容等模块,都使用了多个嵌套的div结构。但通过类名(如.header、.nav、.content,.data)对不同区域进行区分。
  2. 结合CSS和JS赋予功能: 类名通常用来定义样式规则,比如宽度、高度、背景等。div 也常被用作交互容器,与JavaScript事件绑定,例如鼠标点击、悬停等操作。

代码示例

<div class="video-container">
  <div class="video-thumbnail">
    <img src="video.jpg" alt="Video Thumbnail">
  </div>
  <div class="video-info">
    <span class="video-title">Example Video</span>
    <span class="video-duration">10:00</span>
  </div>
</div>

span 的使用分析

特点

  1. 用于内联内容: span 通常用于细粒度控制,例如文本样式、图标位置或状态标记。 在哔哩哔哩中,span多用于显示视频标题、时间、用户信息等小块内容。
  2. 便于动态调整: span 通常结合CSS或JavaScript动态显示或隐藏内容(例如用户操作时显示悬浮提示)。 更适合局部的内联装饰或标记,与<div>的模块化用途形成互补。

代码示例

<div class="user-info">
  <span class="username">Bilibili User</span>
  <span class="user-level">Lv.5</span>
</div>

以下是另外的一些网站的html代码使用div和span标签的一些用例:

淘宝网站:

<div class="product-list">
  <div class="product-item">
    <div class="image-container">
      <img src="product.jpg" alt="Product">
    </div>
    <div class="details">
      <span class="price">$19.99</span>
      <span class="title">Example Product</span>
    </div>
  </div>
</div>

这里,div 被用作容器来包裹商品列表、图片和详情信息。 span 则用于修饰价格和标题,它们是小范围的内容,不需要块级展示。

BBC网站:

<div class="news-item">
 <div class="headline">Breaking News: World Event</div>
 <div class="meta">
   <span class="date">2024-11-18</span>
   <span class="author">Reporter</span>
 </div>
</div>

YouTube

<div class="video-container">
  <div class="thumbnail" onclick="playVideo()">Thumbnail Image</div>
  <span class="play-icon"></span>
</div>

可以看到,div标签和span标签可以结合事件监听器,达到更好的与用户交互的功能。其中,div触发较大区域的点击,span触发较小区域的点击。

对比:div vs span

特性divspan
语义无语义,用于块级布局无语义,用于内联装饰
默认显示行为块级元素,独占一行内联元素,与其他内容并列显示
常见用途分块布局、包裹大块内容修饰文本、图标等内联内容
动态交互能力用于容器级别的动态行为,如拖拽、排序等用于细粒度动态行为,如状态标记

虽然语义标签带来更好的可读性,但主流网站仍然主要使用非语义标签,我认为,原因在于以下两点:

  1. 灵活性高:非语义化标签没有功能和语义限制,适合动态复杂布局。对于像哔哩哔哩这样的视频平台,其首页需要频繁更新内容(如推荐视频、活动模块等),使用div和span便于快速调整。
  2. 样式与功能分离:通过CSS赋予div和span样式,通过JavaScript赋予功能(如点击事件、动态展示等),便于复用和维护。