Table 布局的妙用 - 多行联动布局

1. 前言

最近产品需求遇到一个布局的问题, 大致是两列, 两行的关系, 左侧的文案区域的高度根据右侧内容的高度自动撑满, 左侧文案的宽度根据左侧单元格的最大宽度来适配, 大致如下:

image.png

我们通过一般用DIV+CSS的方式, 左侧是一个标题, 右侧是动态的, 大致代码如下, 盒子下有两行, 标题栏是不换行的, flex布局, 右侧是自适应的

简写代码如下

  <style>
      .box {
      width: 500px;
      background-color: rgb(249, 232, 245);
      margin: 0 auto;
    }

    .box .row {
      display: flex;
    }

    .box .row .label {
      margin-right: 30px;
      white-space: nowrap;
      width: 100px;
    }
    
    .box .row .content {
      flex: 1;
    }
  </style>
  <body>
    <div class="box">
      <div class="row">
        <div class="label">标题1</div>
        <div class="content">
          内容, 内容是很多的, 超出一行,需要换行显示, 内容, 内容是很多的,
          超出一行,需要换行显示
        </div>
      </div>

      <div class="row">
        <div class="label">标题2</div>
        <div class="content">内容可以很多</div>
      </div>
    </div>
  </body>

但是我们的页面都是多语言的, 这就意味着,标题栏的宽度是不固定的, 如果label中文字很长, 这种布局下就会产生下面的问题。

image.png

而我们如果去掉 .label 的宽度, 又会产生左侧对不齐的问题

image.png

而如果设置固定宽度过大, 又不能很好的适配,文案短的情况, 那么如何能实现这两行的联动呢

image.png

2. 思考

其实用 js 比较容易实现, 取两个标题的最大宽度,设置到较小的那个上去就行了。

但是这个方案的缺点是, 如果后面再增加两列,这要麻烦死, 本着能用 CSS 绝不用 JS 的原则, 我开始冥思苦想, 始终无法兼顾需求

后面我转念一想, Antd 的 Table 表格是怎么实现的表格的宽度变化后, 整列的宽度都变化的。 应该不是 JS 去计算的吧, 于是我想到了 Table 标签可能天然带这个能力。 于是我又学了一下这个千年不用一次的 table 标签, 代码如下

<style>
    table,
    td {
      border: 1px solid #333;
      border: none;
    }

    .content {
      width: 300px;
    }

    .name {
      vertical-align: baseline;
    }
  </style>
  <body>
    <table>
      <tbody>
        <tr>
          <td class="name">The table body</td>
          <td class="content">
            with two columns with two columns with two columns with two columns
            with two columns with two columns
          </td>
        </tr>
        <tr>
          <td class="name">The table body</td>
          <td class="content">
            with two columns with two columns with two columns with two columns
            with two columns
          </td>
        </tr>
      </tbody>
    </table>
  </body>

简单实验一下, 非常好, 正是我们想要的, table 表格调整单元格的列宽, 天然具有调整整列宽度的能力

但是, 我们也不能直接使用 table 标签来写代码呀, 因为我们基本已经不用table元素写网页布局了, 因为table 具有一些问题, 比如,嵌套太多、性能不好、会让文件比较大, 项目中我们可以使用 display:table 来解决

于是我们用 Table 布局的样式来写

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <style>
    .box {
      width: 500px;
      background-color: rgb(249, 232, 245);
      margin: 0 auto;
    }

    .box .row .label {
      margin-right: 30px;
      white-space: nowrap;
    }

    .table {
      display: table;
      border-collapse: collapse;
    }

    .row {
      display: table-row;
      border: 1px solid #ccc;
      border: none;
    }

    .cell {
      display: table-cell;
      border: 1px solid #ccc;
      padding: 5px;
      border: none;
    }
  </style>
  <body>
    <div class="box table">
      <div class="row">
        <div class="label cell">标题1 标题1 标题1</div>
        <div class="content cell">
          内容, 内容是很多的, 超出一行,需要换行显示, 内容, 内容是很多的,
          超出一行,需要换行显示
        </div>
      </div>

      <div class="row">
        <div class="label cell">标题2</div>
        <div class="content cell">内容可以很多</div>
      </div>
    </div>
  </body>
</html>

效果如下:

image.png

这个时候我们就用 纯CSS 实现了,产品的需求, 随着标题的增长减少, 左侧的列宽会自动增加或者减少, 随着右侧的内容的增加减少。 表格的行高会响应的增加减少

3. 总结

我们平常开发习惯了 DIV + CSS 布局,很少会想到使用 table 布局, 很多时候内容的联动,父子节点的联动, 我们可以使用css 属性继承,但是兄弟节点之间的联动, 我们很难通过纯css处理, 经常是通过js 增加计算, 但是table 布局,这种独有的可以让兄弟节点宽高产生联动联系的特性, 还是非常好用的, 对我们页面的布局来说, 帮助很大, 以后在遇到类似的需求, 可以想一下 用 table 能不能实现

附送250套精选项目源码

源码截图

 源码获取:关注公众号「码农园区」,回复 【源码】,即可获取全套源码下载链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/720597.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

短剧APP开发,探索短剧市场的新机遇

近几年&#xff0c;短剧市场得到了繁荣发展&#xff0c;随着短剧的快速发展&#xff0c;短剧APP也得到发展&#xff0c;受到了越来越多用户的喜欢。通过短剧APP&#xff0c;为大众带来多样、高质量的短剧内容。对于影视创作者来说&#xff0c;短剧APP在线观看系统的开发也将成为…

Tuple 元组

文章目录 一、什么是元组 &#xff1f;二、元组的具体操作2.1 创建元组2.1.1 tuple() 创建元组函数和 list() 创建列表函数总结 2.2 元组的元素访问操作2.3 元组的元素计数操作2.4 zip 对象 一、什么是元组 &#xff1f; 列表属于可变序列,可以任意修改列表中的元素。 元组的…

5G+北斗高精度定位终端技术,赋能千行百业应用

5G北斗高精度定位终端技术的融合&#xff0c;正以前所未有的精准度和实时性&#xff0c;为千行百业带来革命性的变革。从智慧城市的精细化管理&#xff0c;到智能交通的实时调度&#xff0c;再到精准农业的播种与收割&#xff0c;这一技术正不断拓宽其应用领域&#xff0c;为各…

【Linux】自定义shell(命令行解释器)

原理&#xff1a; shell是命令行解释器&#xff0c;当有命令需要执行时&#xff0c;shell创建子进程&#xff0c;让子进程执行命令&#xff0c;而shell只需等待子进程退出即可。 其中我们使用了下面这几个函数&#xff1a; 获取命令行&#xff08;fgets函数&#xff09;。解析…

C++ 66 之 类模版

#include <iostream> #include <string> using namespace std;// 习惯性 < >中 类模板用class 普通的函数模板就用typename // template<class NAMETYPE, class AGETYPE> template<class NAMETYPE, class AGETYPE int> // 可以设置默认的类型值…

Beyond Compare 文件对比工具下载2024最新版-Beyond Compare详细安装步骤

Beyond Compare是一款不可多得的专业级的文件夹和文件对比工具。使用它可以很方便地对比出两个文件夹或者文件的不同之处&#xff0c;相差的每一个字节用颜色加以表示&#xff0c;查看方便&#xff0c;支持多种规则对比。是程序工程师以及上班族必备的有效辅助工具 安 装 包 获…

并发编程理论基础——解决死锁【等待-通知机制优化循环等待】(五)

在破坏占用且等待条件时&#xff0c;如果使用while死循环 在并发量不大的情况下循环几十上百次也就好了如果while中执行方法时间比较长&#xff0c;或者并发量大时&#xff0c;可能要循环上万次才能获取到锁&#xff0c;非常消耗CPU 相较于使用while死循环&#xff0c;更好的方…

位图法-有效的数独

有效的数独&#xff0c;主要是判断每行每列每宫有无重复元素。 每行每列用二重循环&#xff0c;每宫比较复杂&#xff0c;需要考虑每一宫的坐标与二重循环ij对应关系 行i&#xff0c;每一宫3行&#xff0c;3列 x3*(i/3)j/3 y3*(i%3)j%3

超简洁的待办事项自托管便签todo

什么是todo todo 是一个自托管的 todo web 应用程序&#xff0c;可让您以简单且最少的方式跟踪您的 todo。 搭建 使用Docker命令行方式进行搭建 docker run -d -p 8000:8000 -v todo_db:/usr/local/go/src/todo/todo.db prologic/todo Docker-compose.yml version: 3 ​ se…

全球首个开源类Sora模型大升级,16秒720p画质电影感爆棚!代码和权重全面开源!

目录 01 视频界开源战士 02 深度解码技术 03 打破闭环&#xff0c;开源赋能 潞晨Open-Sora团队刚刚在720p高清文生视频质量和生成时长上实现了突破性进展&#xff01; 全新升级的Open-Sora不仅支持无缝生成任意风格的高质量短片&#xff0c;更令人惊喜的是&#xff0c;团队选…

BC153 [NOIP2010]数字统计

数字统计 一.题目描述二.输入描述&#xff1a;三.输出描述&#xff1a;四.数字范围五.题目思路六.代码实现 一.题目描述 请统计某个给定范围[L, R]的所有整数中&#xff0c;数字2出现的次数。 比如给定范围[2, 22]&#xff0c;数字2在数2中出现了1次&#xff0c;在数12中出现1次…

VM4.3 二次开发04 方案输出结果设置

方案输出结果设置&#xff0c;这个设置是为了在二次开发的上位机软件中显示我们想要的数据&#xff0c;和在二开中如何获取这些结果。 打开方案点下如中的图标。 打开如下图。 再点点红色圈出来的图标&#xff0c;打开参数设置界面。 输出设置可以要输出的数据和参数名称。点上…

基于YOLOv10深度学习的高密度人脸智能检测与统计系统【python源码+Pyqt5界面+数据集+训练代码】深度学习实战、目标检测

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

Java23种设计模式(二)

1、单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有…

Linux系统之mtr命令的基本使用

Linux系统之mtr命令的基本使用 一、mtr命令介绍二、mtr命令使用帮助2.1 mtr命令的帮助信息2.2 mtr帮助信息解释 三、安装mtr工具四、mtr命令的基本使用4.1 直接使用4.2 设定ping次数4.3 禁用DNS解析4.4 显示IP地址4.5 调整间隔 五、总结 一、mtr命令介绍 mtr命令是一个网络诊断…

Hype4.0 for Mac软件下载-Hype for Mac HTML5 创作工具下载附加详细安装步骤

Hype 4 Pro Mac正式版是款功能实用的动画创作工具。Hype 4 Pro Mac最新版可以帮您轻松创建令人惊叹的动画和交互式网页内容。并且Hype 4 Pro Mac还可被设计师用来创建动画&#xff0c;为网页、信息图形、演示文稿、数字杂志、广告、iBooks、教育内容、应用程序原型、作品集、动…

46. 【Java教程】Optional 类

上一小节&#xff0c;我们接触到了Optional类&#xff0c;但没有详细展开介绍&#xff0c;Optional类也是 Java 8 新加入的类。本小节我们就来学习一下这个类&#xff0c;你将了解到Optional类的解决了什么问题&#xff0c;如何创建Optioanl类的对象&#xff0c;它又有哪些常用…

【MySQL进阶之路 | 高级篇】SQL执行过程

1. 客户端与服务器的连接 运行中的服务器程序与客户端程序本质上都是计算机的一个进程&#xff0c;所以客户端进程向服务器端进程发送请求并得到相应过程的本质就是一个进程间通信的过程. 我们可以使用TCP/IP网络通信协议&#xff0c;命名管道和共享内存等方式&#xff0c;实…

2024/6/18 英语每日一段

While refusing to attribute various problems to specific labs in order to protect the investigators’ sources, the Gladstone AI team told The Washington Times that it found various assessments of security issues were “totally untethered to reality” about…

【STM32】GPIO简介

1.GPIO简介 GPIO是通用输入输出端口的简称&#xff0c;简单来说就是STM32可控制的引脚&#xff0c;STM32芯片的GPIO引脚与外部设备连接起来&#xff0c;从而实现与外部通讯、控制以及数据采集的功能。 STM32芯片的GPIO被分成很多组&#xff0c;每组有16个引脚。 最基本的输出…