只用HTML和CSS实现换一换效果

结合刚刚做的百度热搜「换一换」案例,讲解纯 HTML + CSS 分页的经典实现方式。

一、核心思想

分页本质上就是:

text 复制代码
点击页码
    ↓
切换状态
    ↓
显示对应内容
    ↓
隐藏其它内容

代码实际上利用了:

html 复制代码
<input type="radio">

的 checked 状态来记录当前页。


二、HTML结构

1. 隐藏的radio

html 复制代码
<input type="radio" name="page" id="p1" checked>
<input type="radio" name="page" id="p2">
<input type="radio" name="page" id="p3">

作用:

text 复制代码
记录当前页

p1 → 第一页
p2 → 第二页
p3 → 第三页

因为:

html 复制代码
name="page"

相同,

所以:

text 复制代码
一次只能选中一个

2. 内容区

html 复制代码
<div id="p1-content" class="page">
    第一页内容
</div>

<div id="p2-content" class="page">
    第二页内容
</div>

<div id="p3-content" class="page">
    第三页内容
</div>

3. 页码按钮

html 复制代码
<label for="p1">1</label>
<label for="p2">2</label>
<label for="p3">3</label>

点击:

html 复制代码
<label for="p2">

相当于点击:

html 复制代码
<input id="p2">

于是:

text 复制代码
p2变成checked

三、CSS控制显示

先隐藏所有页:

css 复制代码
.page {
    display: none;
}

当第一页被选中:

css 复制代码
#p1:checked ~ #p1-content {
    display: block;
}

意思:

text 复制代码
如果p1被选中

显示p1-content

第二页:

css 复制代码
#p2:checked ~ #p2-content {
    display: block;
}

第三页:

css 复制代码
#p3:checked ~ #p3-content {
    display: block;
}

四、流程图

text 复制代码
点击label
      │
      ▼
对应radio被选中
      │
      ▼
checked状态改变
      │
      ▼
CSS选择器生效

#p2:checked~#p2-content

      │
      ▼
显示第二页
      │
      ▼
其它页面继续隐藏

五、热搜案例里的实现

实际上就是:

text 复制代码
第一页热搜
第二页热搜
第三页热搜
第四页热搜
第五页热搜

隐藏全部:

css 复制代码
.hot>.hot-list {
    display: none;
}

第一页:

css 复制代码
#hp1:checked~#hp1-content {
    display: flex;
}

第二页:

css 复制代码
#hp2:checked~#hp2-content {
    display: flex;
}

依此类推。


六、换一换为什么能翻页

例如:

html 复制代码
<label for="hp2" class="hs1">
    换一换
</label>

点击:

text 复制代码
hs1
   ↓
hp2被选中
   ↓
hp2 checked
   ↓
显示第二页

第二页的按钮:

html 复制代码
<label for="hp3" class="hs2">
    换一换
</label>

点击:

text 复制代码
hp3 checked
   ↓
显示第三页

形成循环:

text 复制代码
hp1 → hp2 → hp3 → hp4 → hp5 → hp1

七、优缺点

优点

不需要 JavaScript

text 复制代码
HTML
+
CSS
即可实现分页

简单、性能高。


缺点

页数固定:

text 复制代码
只能提前写好

第一页
第二页
第三页
...

如果数据动态变化:

text 复制代码
数据库
接口返回

就必须用 JavaScript。


八、总结:

纯 HTML + CSS 分页的本质是:利用 radio 的 checked 状态保存当前页,再通过 :checked + 兄弟选择器(~) 控制对应内容的显示与隐藏,而页码按钮通常使用 label for="id" 来切换不同的 radio。

相关推荐
EatFan1 分钟前
React 项目踩坑实录:useEffect 闭包陷阱、Context 性能陷阱与 React 18 升级避坑排查手册
前端·javascript·react.js·react·react hooks·useeffect·闭包陷阱
风骏时光牛马35 分钟前
企业业务运营信息数据库
前端
IT_陈寒1 小时前
Vue的数组更新把我坑惨了
前端·人工智能·后端
于航1 小时前
分层上下文压缩,幻觉检测,错误累积概要
前端
数据掘金1 小时前
鸿蒙统计的权限弹窗怎么适配?
前端
数据掘金1 小时前
鸿蒙统计的多设备协同数据怎么打通?
前端
尘中远1 小时前
Qwt7的曲线渲染平滑实现:高斯卷积、Savitzky-Golay 回归与特征保护
前端
Fly2 小时前
我来提需求,你带着 Codex 做项目:AI 全栈课程开始实战了
前端
集智飞行3 小时前
解决mavros2 ros2版本cpu占用高的问题
java·服务器·前端
HSunR4 小时前
ruoyi 若依 自定义注解 参数校验
java·前端·数据库