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

news2024/10/7 6:42:30

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.coloradmin.cn/o/1834195.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《汇编语言程序设计》例子之查找最大数

以下是第5章中讲到的 CMOV 的指令的例子&#xff0c;原来的源码是这样的&#xff1a; # cmovtest.s - An example of the CMOV instructions .section .data output:.asciz "The largest value is %d\n" values:.int 105, 235, 61, 315, 134, 221, 53, 145, 117, 5 …

一看就会!Win11文件资源管理器的打开方法!

在Win11电脑操作中&#xff0c;用户可以借助文件资源管理器轻松管理文件或文件夹。但是&#xff0c;许多新手用户不知道要怎么操作才能顺利打开文件资源管理器&#xff1f;接下来小编给大家介绍五种简单快速的打开Win11系统文件资源管理器的方法。 方法 1&#xff1a;WindowsE …

在无人问津时买入,在人声鼎沸时离开

标题今天看到钉大的公众号里面看到的。 在无人问津时买入&#xff0c;在人声鼎沸时离开。 现在应该就是无人问津时。 我从2019年8月开始定投&#xff0c;在2021年1月和2021年7月分别两次达到了收益最高点&#xff0c;之后就一路下跌&#xff0c;到现在已经跌了两年半了。收益…

LDO电容选型指南

1 为什么电容的选择至关重要 电容往往被人们所忽视&#xff0c;在许多工程师的心目中&#xff0c;电容不过是两个导体加上中间的隔离电解质。总而言之&#xff0c;它们属于最低级的电子元件之一。 工程师们通常通过添加一些电容的办法来解决噪声问题。这是因为他们普遍将电容视…

数学学习与研究杂志社《数学学习与研究》编辑部2024年第6期目录

课改前沿 基于核心素养的高中数学课堂教学研究——以“直线与圆、圆与圆的位置关系”为例 张亚红; 2-4 核心素养视角下初中生数学阅读能力的培养策略探究 贾象虎; 5-7 初中数学大单元教学实践策略探索 耿忠义; 8-10《数学学习与研究》投稿&#xff1a;cn7kantougao…

ChatGPT付费创作系统V3.0.2独立版 WEB+H5+小程序端 (H5端界面美化+Pika视频作品广场+SunoAI 文生歌)系统部署教程

播播资源GPT付费体验系统最新版系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff01;无限…

AI视频分析预警系统

AI视频分析预警系统是一个基于深度学习算法和图像处理技术的软硬件一体化人工智能分析预警系统。该系统能够主动识别和分析视频内容&#xff0c;以识别关键事件和可疑活动&#xff0c;并在必要时发出预警。以下是关于AI视频分析预警系统的主要特点和功能&#xff1a; 系统构成 …

Android 大话binder通信 (上)

戳蓝字“牛晓伟”关注我哦&#xff01; 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 本文摘要 用故事的方式把binder通信的整个过程都描述出来&#xff0c;binder通信都经历了哪些节点&#xff0c;在这些节点上的数据有哪些变化&#xff0c;同时还对binder通…

vue3组合式api的正确用法

组合式函数Composables 打开你的vscode, 随便粘贴复制出一段代码&#xff0c;你会看见是这种吧。 在复杂的业务逻辑的压力下&#xff0c;很容易就会写出这种流水账代码&#xff0c;更糟糕的是可能会有类似于使用一个reactive包裹页面中所有数据&#xff0c;然后在按顺序写me…

关于百度seo不得不说的几点

在2023年之前&#xff0c;百度的seo还是很好做的。但现在可以说百度seo已经没啥价值了。不信你搜索几个关键词看看首页的排名状况就知道了。首页位置除了广告基本上都是给你百度自家的产品和一些合作的大平台网站&#xff0c;给独立小站点没有留下一点点空间。 现在做百度seo&…

基于深度学习网络的USB摄像头实时视频采集与手势检测识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 系统架构 4.2 GoogLeNet网络简介 4.3 手势检测 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 训练过程如下&#xff1a; 将摄像头对准手势&#xff0c;然后进行…

Java基础学习-方法

目录 方法基础概念 方法的格式&#xff1a; 案例&#xff1a;最简单方法的定义 案例&#xff1a;带参数的方法调用 案例&#xff1a;求圆的面积 带有返回值的方法&#xff1a; 方法注意点 方法的重载&#xff1a; ​编辑 案例&#xff1a;数组的遍历&#xff1a; 案例…

2024.6.17 作业 xyt

今日作业&#xff1a; 升级优化自己应用程序的登录界面。 要求&#xff1a; 1. qss实现 2. 需要有图层的叠加 &#xff08;QFrame&#xff09; 3. 设置纯净窗口后&#xff0c;有关闭等窗口功能。 4. 如果账号密码正确…

如何使用GPT-4 生成高效实用的PPT

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

【Linux】Jenkins Pipeline流水线详解及基于Jenkins流水线实现自动更新项目(实战)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

传感器在智能家居中的应用

在物联网时代&#xff0c;智能家居成为人们生活中的重要组成部分。而传感器作为实现智能家居的基础设备&#xff0c;起到了关键的作用。不同类型的传感器能够获取环境中的各种参数&#xff0c;并通过物联网技术实现与智能家居系统的连接。例如&#xff0c;温度传感器可以实时监…

华为OD机试 - 火星文计算2(Java 2024 D卷 100分)

华为OD机试 2024D卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;D卷C卷A卷B卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测…

stm32学习-软件I2C读取MPU6050

接线 SDAPB11SCLPB10 I2C 对操作端口的库函数进行封装 void MyI2C_W_SCL(uint8_t BitValue)//写 {GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue);Delay_us(10); }void MyI2C_W_SDA(uint8_t BitValue)//写 {GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValu…

LeetCode 1789, 6, 138

目录 1789. 员工的直属部门题目链接表要求知识点思路代码 6. Z 字形变换题目链接标签思路代码 138. 随机链表的复制题目链接标签思路代码 1789. 员工的直属部门 题目链接 1789. 员工的直属部门 表 表Employee的字段为employee_id&#xff0c;department_id和primary_flag。…

graalvm编译springboot3 native应用

云原生时代容器先行&#xff0c;为了更好的拥抱云原生&#xff0c;spring boot3之后&#xff0c;推出了graalvm编译boot项目&#xff0c;利用jvm的AOT&#xff08; Ahead Of Time &#xff09;运行前编译技术&#xff0c;可以将java源码直接构建成机器码二进制的文件&#xff0…