首页 > web前端 > css教程 > 正文

CSS技巧分享:纯CSS实现表格响应式布局

青灯夜游
发布: 2022-09-09 10:36:36
转载
2238人浏览过

如何利用纯css实现表格响应式布局?下面本篇文章就来给大家分享超 nice 的表格响应式布局小技巧,希望对大家有所帮助!

CSS技巧分享:纯CSS实现表格响应式布局

今天,遇到了一个很有意思的问题,一名群友问我,仅仅使用 CSS,能否实现这样一种响应式的布局效果:

简单解析一下效果:

立即学习前端免费学习笔记(深入)”;

  • 在屏幕视口较为宽时,表现为一个整体 Table 的样式

  • 而当屏幕视口宽度较小时,原 Table 的每一行数据单独拆分为一个 Table 进行展示

很有意思的一个响应式布局,让信息在小屏幕下得到了一种不错的展示。

那么,仅仅使用 CSS 的话,能否实现这样一个布局呢?答案是可以的。【推荐学习:css视频教程

首先,肯定会用到媒体查询,这个不难看出。另外,我们观察下拆分后的每一组数据:

都会存在一组原本整体一个 Table 时的表头信息,主要的难点就是在这里,我们如何在拆分成一个一个的子 Table 展示时,同时展示这些表头信息?

基本结构的实现

首先,我们先实现常规宽屏下的 HTML 及对应的 CSS。

比较简单,这里没有什么特殊之处,使用 <table> 标签或者使用 div、ul 等标签进行模拟一个表格都可以。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">&lt;table&gt; &lt;caption&gt;Lorem ipsum !&lt;/caption&gt; &lt;thead&gt; &lt;tr&gt; &lt;th&gt;Account&lt;/th&gt; &lt;th&gt;Due Date&lt;/th&gt; &lt;th&gt;Amount&lt;/th&gt; &lt;th&quot;&gt;Period&lt;/th&gt; &lt;/tr&gt; &lt;/thead&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td data-label=&quot;Account&quot;&gt;Visa - 3412&lt;/td&gt; &lt;td data-label=&quot;Due Date&quot;&gt;04/01/2016&lt;/td&gt; &lt;td data-label=&quot;Amount&quot;&gt;$1,190&lt;/td&gt; &lt;td data-label=&quot;Period&quot;&gt;03/01/2016 - 03/31/2016&lt;/td&gt; &lt;/tr&gt; // ... 重复多组 &lt;/tbody&gt; &lt;/table&gt;</pre>

登录后复制
</div><p>得到这样一个简单的 Table:</p> <p><img src="https://img.php.cn/upload/article/000/000/024/cc35c8abe4f601f6e51378f694df082b-2.png" alt="" loading="lazy"></p> <h2 id="使用媒体查询将单个-table-拆分成多个"><strong>使用媒体查询将单个 Table 拆分成多个</strong></h2> <p>下一步也很简单,设定合适的阈值(视实际业务情况而定),使用媒体查询将单个 Table 拆分成多个子 Table。</p> <div class="aritcle_card"> <a class="aritcle_card_img" href="/ai/1474"> <img src="https://img.php.cn/upload/ai_manual/001/431/639/68b6ca9287d13570.png" alt="Quicktools Background Remover"> </a> <div class="aritcle_card_info"> <a href="/ai/1474">Quicktools Background Remover</a> <p>Picsart推出的图片背景移除工具</p> <div class=""> <img src="/static/images/card_xiazai.png" alt="Quicktools Background Remover"> <span>31</span> </div> </div> <a href="/ai/1474" class="aritcle_card_btn"> <span>查看详情</span> <img src="/static/images/cardxiayige-3.png" alt="Quicktools Background Remover"> </a> </div> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">@media screen and (max-width: 600px) { table { border: 0; } table thead { display: none; } table tr { display: block; margin-bottom: 10px; } table td { border-bottom: 1px solid #ddd; display: block; } }</pre>
登录后复制
</div><p>这里做的事情也非常简单:</p> <ul style="list-style-type: disc;"> <li><p>利用媒体查询,设定屏幕宽度小于 <code>600px
的样式

  • 去掉原本表格的 <thead> 表头,直接隐藏即可<li><p>将原本的一行 <code><tr>,设置为 <code>display: block, 并且设置一个下边距,使之每一个分开

  • 将原本的一行内的 <td>,设置为 <code>display: block,这样,它们就会竖向排列,使每一个 <tr> 形成新的一个子 table<p>好,这样,再屏幕宽度小于 <code>600px 时,我们就得到了这样一个 Table:

    借助伪元素及其特性,实现表头信息展示

    下面一步,也就是最为关键的一步,我们如何在子 table 的每一行,也就是 <td> 内,再展示原本的表头信息呢?<p>这里其实也非常简单,只是简单的运用了伪元素,极其可以读取 HTML 标签属性的小特性实现。</p> <p>我们只需要简单改造一下代码,给每个 <code><td> 的 HTML,带上与之对应的表头列描述信息:<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">&lt;table&gt; // 上方信息保持一致 &lt;tbody&gt; &lt;tr&gt; &lt;td data-label=&quot;Account&quot;&gt;Visa - 3412&lt;/td&gt; &lt;td data-label=&quot;Due Date&quot;&gt;04/01/2016&lt;/td&gt; &lt;td data-label=&quot;Amount&quot;&gt;$1,190&lt;/td&gt; &lt;td data-label=&quot;Period&quot;&gt;03/01/2016 - 03/31/2016&lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td scope=&quot;row&quot; data-label=&quot;Account&quot;&gt;Visa - 6076&lt;/td&gt; &lt;td data-label=&quot;Due Date&quot;&gt;03/01/2016&lt;/td&gt; &lt;td data-label=&quot;Amount&quot;&gt;$2,443&lt;/td&gt; &lt;td data-label=&quot;Period&quot;&gt;02/01/2016 - 02/29/2016&lt;/td&gt; &lt;/tr&gt; // ... 每个 tr 进行同样的处理 &lt;/tbody&gt; &lt;/table&gt;</pre>

    登录后复制
    </div><p>接着,借助 td 的伪元素,实现表头信息的展示即可:</p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">@media screen and (max-width: 600px) { // ... 保持一致 table td { position: relative; display: block; text-align: right; } table td::before { position: absolute; left: 10px; right: 0; content: attr(data-label); } }</pre>
    登录后复制
    </div><p>这里,我们核心的知识点就是利用了元素的伪元素可以在 <code>content
    属性里,读取其 HTML 元素内的属性内容,并进行展示的知识点。

    • 假设一个 HTML 标签定义为: <div data-msg="ABC"> <li><p>那么该 div 对应的伪类如果设置了 <code>content: attr(data-msg) ,就可以读取到 data-msg 的值,相当于 content:"ABC"

    • 这样,我们在小屏幕下,就得到了这样一种效果:

      完整的效果,即如题图所示:

      完整的 DEMO,你可以戳这里:CodePen Demo -- Simple Responsive Table in CSS

      原文地址:https://www.cnblogs.com/coco1s/p/16422777.html

      作者:ChokCoco

      (学习视频分享:web前端

  • 以上就是CSS技巧分享:纯CSS实现表格响应式布局的详细内容,更多请关注php中文网其它相关文章!

    最佳 Windows 性能的顶级免费优化软件
    最佳 Windows 性能的顶级免费优化软件

    每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

    下载
    来源:博客园网
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    最新问题
    热门推荐
    开源免费商场系统广告
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号