HTML5 本身并没有一个叫做 <listview> 的原生标签。

(图片来源网络,侵删)
你所说的 listview 模板,通常指的是在移动端开发中,使用 HTML、CSS 和 JavaScript 来创建的一种具有特定样式和交互效果的列表视图,这种列表在移动端框架(如 jQuery Mobile)或原生开发中非常常见,其特点是:
- 触摸友好:元素有足够大的点击区域,易于触摸。
- 视觉层次分明:通常有清晰的边框、阴影、图标和分隔线。
- 交互反馈:点击或触摸时有高亮效果。
- 结构化:列表项内部可以包含标题、描述、图片、图标等多种元素。
下面,我将为你提供几种主流的 listview 模板实现方式,从最简单的原生 HTML/CSS 到使用流行框架的版本。
模板 1:原生 HTML & CSS (最基础、最灵活)
这是实现列表视图的根本,不依赖任何外部库,完全由你自己控制样式。
HTML 结构
使用无序列表 <ul> 和列表项 <li> 是最语义化的方式,我们可以在 <li> 内部放置各种子元素来构建复杂的列表项。

(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">原生 CSS Listview</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>我的列表</h1>
<!-- 基础列表 -->
<ul class="listview">
<li>
<div class="item-content">
<img src="https://via.placeholder.com/50" alt="头像" class="item-icon">
<div class="item-text">
<div class="item-title">列表项标题 1</div>
<div class="item-subtitle">这里是副标题或简短描述</div>
</div>
</div>
</li>
<li>
<div class="item-content">
<img src="https://via.placeholder.com/50" alt="头像" class="item-icon">
<div class="item-text">
<div class="item-title">列表项标题 2</div>
<div class="item-subtitle">这是另一个副标题</div>
</div>
</div>
</li>
<li>
<!-- 可以只包含标题 -->
<div class="item-content">
<span class="item-icon">📁</span>
<div class="item-text">
<div class="item-title">仅包含标题的项</div>
</div>
</div>
</li>
</ul>
</body>
</html>
CSS 样式
这是实现 listview 视觉效果的核心,我们添加了圆角、边框、阴影、悬停效果等。
/* style.css */
/* 重置和基础样式 */
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
background-color: #f4f4f4;
color: #333;
margin: 0;
padding: 20px;
}
h1 {
color: #2c3e50;
}
.listview {
list-style: none; /* 移除默认的列表符号 */
padding: 0;
margin: 0;
background-color: #fff;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
.listview li {
border-bottom: 1px solid #e0e0e0; /* 分隔线 */
transition: background-color 0.2s ease;
}
.listview li:last-child {
border-bottom: none; /* 移除最后一项的下边框 */
}
.listview li:active {
background-color: #f0f0f0; /* 点击时的背景色变化 */
}
/* 列表项内部布局 */
.item-content {
display: flex;
align-items: center;
padding: 15px;
}
.item-icon {
width: 50px;
height: 50px;
border-radius: 50%; /* 圆形图标 */
margin-right: 15px;
object-fit: cover; /* 确保图片不变形 */
}
.item-text {
flex: 1; /* 占据剩余所有空间 */
}
.item-title {
font-size: 16px;
font-weight: 600;
margin: 0;
color: #2c3e50;
}
.item-subtitle {
font-size: 14px;
color: #7f8c8d;
margin: 4px 0 0 0;
}
模板 2:使用 jQuery Mobile (快速开发,已过时但仍有项目在使用)
jQuery Mobile 是一个专门为移动设备设计的 UI 框架,它通过添加 data- 属性来快速生成样式丰富的组件。
HTML 结构
jQuery Mobile 的 listview 非常简单,只需要给 <ul> 添加 data-role="listview" 属性即可。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">jQuery Mobile Listview</title>
<link rel="stylesheet" href="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="https://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="https://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body>
<div data-role="page">
<div data-role="header">
<h1>jQuery Mobile 列表</h1>
</div>
<div role="main" class="ui-content">
<ul data-role="listview" data-inset="true">
<li><a href="#"><img src="https://via.placeholder.com/80x80" class="ui-li-thumb"><h2>列表项 1</h2><p>这是一个描述</p></a></li>
<li><a href="#"><img src="https://via.placeholder.com/80x80" class="ui-li-thumb"><h2>列表项 2</h2><p>这是另一个描述</p></a></li>
<li data-role="list-divider">分组标题</li>
<li><a href="#">分组项 1</a></li>
<li><a href="#">分组项 2</a></li>
</ul>
</div>
</div>
</body>
</html>
关键点:

(图片来源网络,侵删)
data-role="listview": 将<ul>转换为列表视图。data-inset="true": 让列表有圆角和内边距,看起来像卡片。data-role="list-divider": 创建一个列表分组标题。ui-li-thumb: jQuery Mobile 识别的 class,用于图片样式。<h2>和<p>在<a>标签内会自动被格式化为标题和描述。
模板 3:使用现代 CSS 框架 (如 Tailwind CSS)
现代前端开发中,使用像 Tailwind CSS 这样的原子化 CSS 框架非常流行,它提供了工具类,让你可以快速组合出想要的样式。
HTML 结构
HTML 结构非常干净,样式都通过 class 来定义。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">Tailwind CSS Listview</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="bg-gray-100 p-4">
<h1 class="text-2xl font-bold text-gray-800 mb-4">Tailwind CSS 列表</h1>
<ul class="bg-white rounded-lg shadow-md divide-y divide-gray-200">
<li>
<a href="#" class="block p-4 hover:bg-gray-50 transition-colors duration-200">
<div class="flex items-center">
<img src="https://via.placeholder.com/50" alt="头像" class="w-12 h-12 rounded-full mr-4 object-cover">
<div class="flex-1">
<h3 class="text-lg font-semibold text-gray-900">列表项标题 1</h3>
<p class="text-sm text-gray-500">这里是副标题或简短描述</p>
</div>
<svg class="w-5 h-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
</svg>
</div>
</a>
</li>
<li>
<a href="#" class="block p-4 hover:bg-gray-50 transition-colors duration-200">
<div class="flex items-center">
<img src="https://via.placeholder.com/50" alt="头像" class="w-12 h-12 rounded-full mr-4 object-cover">
<div class="flex-1">
<h3 class="text-lg font-semibold text-gray-900">列表项标题 2</h3>
<p class="text-sm text-gray-500">这是另一个副标题</p>
</div>
<svg class="w-5 h-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
</svg>
</div>
</a>
</li>
<li>
<a href="#" class="block p-4 hover:bg-gray-50 transition-colors duration-200">
<div class="flex items-center">
<span class="text-2xl mr-4">📁</span>
<div class="flex-1">
<h3 class="text-lg font-semibold text-gray-900">仅包含标题的项</h3>
</div>
<svg class="w-5 h-5 text-gray-400" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7"></path>
</svg>
</div>
</a>
</li>
</ul>
</body>
</html>
关键点:
bg-white,rounded-lg,shadow-md: 组合出卡片背景和阴影。divide-y divide-gray-200: 使用 Tailwind 的divide工具类来创建列表项之间的分隔线,比border更灵活。flex,items-center: 使用 Flexbox 进行布局。hover:bg-gray-50 transition-colors: 实现悬停效果和过渡动画。
总结与对比
| 特性 | 原生 HTML/CSS | jQuery Mobile | Tailwind CSS |
|---|---|---|---|
| 依赖 | 无 | jQuery, jQuery Mobile | Tailwind CSS 框架 |
| 学习曲线 | 需要熟悉 CSS | 低,通过 data- 属性配置 |
低,熟悉工具类即可 |
| 灵活性 | 极高,完全可控 | 低,样式被框架固定 | 高,通过组合工具类实现 |
| 性能 | 最佳 | 较差(需加载JS库) | 良好(最终生成少量CSS) |
| 现代性 | 永不过时 | 已过时,不推荐新项目 | 非常现代,主流选择 |
| 适用场景 | 简单项目、追求极致性能和控制 | 维护旧项目、快速原型 | 所有现代Web项目,特别是SPA |
建议:
- 对于新项目:强烈推荐使用 原生 HTML/CSS 或 Tailwind CSS,Tailwind CSS 能让你以原子化的方式快速构建出高度定制化的
listview,是目前最流行和高效的方式。 - 对于维护旧项目:如果项目已经基于 jQuery Mobile,那么继续使用它是合理的,但新建项目应避免它。
- 对于学习:从 原生 HTML/CSS 开始是最好的,它能让你深刻理解列表视图的布局和样式原理。
