table-cell布局

2023-05-16

display:table-cell属性简介

display:table-cell;会使元素表现的类似一个表格中的单元格td,利用这个特性可以实现文字的垂直居中效果。同时它也会破坏一些CSS属性,使用table-cell时最好不要与float以及position: absolute一起使用,设置了table-cell的元素对高度和宽度高度敏感,对margin值无反应,可以响应padding的设置,表现几乎类似一个td元素。

小结:
1. 不要与float:left; position:absolute; 一起使用
2. 可以实现大小不固定元素的垂直居中
3. margin设置无效,响应padding设置
4. 对高度和宽度高度敏感
5. 不要对display:table-cell使用百分比设置宽度和高度

下面介绍几个table-cell的应用

1. 高度不固定内容水平垂直居中

  • 文字水平垂直居中
<style>
.table-wrap{
        display: table-cell;
        height: 200px;
        width: 100px;
        padding: 20px;
        vertical-align: middle;
        text-align: center;
        border: 1px solid red;
        }
</style>
<div  class="table-wrap">
    我是一大推文字,我想要垂直居中,这是省略这是省略这是省略这是省略
</div>

avatar
关键在于设置了display:cell;后,vertical-align:middle使文字内容垂直居中

  • 图片水平垂直居中
<style>
.outer{display: table;width: 100%;}
.table-wrap{
    display: table-cell;
    height: 200px;          
    padding: 20px;
    vertical-align: middle;
    text-align: center;
    border: 1px solid red;
    }
</style>
<div class="outer">
    <div  class="table-wrap">
        <img src="http://jsfiddle.net/img/logo@2x.png" alt="logo" />
    </div>  
</div>  

avatar
中间的图片会随着外层容器的大小而自动水平垂直居中,其实原理和文字水平垂直居中一模一样

2. 元素两端垂直对齐

<style>
    *{margin: 0;padding: 0;}
    .outer{display: table;width: 90%;margin: 10px  auto;
        padding: 10px; border: 1px solid green;}
    .table-left,.table-right{
        display: table-cell;            
        width: 20%;
        border: 1px solid red;
    }
    .table-center{
        height: 100px;
        background-color: green;
    }
</style>
<div class="outer">
    <div class="table-left">
        <p>我是左边</p>
    </div>
    <div  class="table-center">
        我是中间
    </div>
    <div class="table-right">
        <p>我是右边</p>
    </div>
</div>

avatar

其中table-center的顶部没有与左右两侧对齐,原因是teble-left中的<p>有一个margin-top, 而表格布局中默认是文字顶部对齐的,所以table-center会向下移动到首行文字基线对齐,解决办法是为table-center添加与左右两侧中margin-top较大者等值的padding-top即可。

3. 等高布局

<style>
        *{margin: 0;padding: 0;}
        .outer{display: table;width: 90%;margin: 10px  auto;
            padding: 10px; border: 1px solid green;}
        .table-left{
            display: table-cell;            
            width: 150px;
            padding-top: 20px;
            border: 1px solid red;
            vertical-align: top;
            text-align: center;
        }

        .table-right{           
            border: 1px solid yellow;
            background-color: green;
            margin-left: 20px;
            padding: 10px;
        }
    </style>
    <div class="outer">
        <div class="table-left">
            <img src="http://jsfiddle.net/img/logo@2x.png" alt="logo" />
        </div>
        <div class="table-right">
            <span>这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字。。。。。</span>
        </div>
    </div>

avatar
拉伸宽度,会发现左右两侧始终保持高度一致。

4. 均分列表布局

<style>
    *{margin: 0;padding: 0;}
    .table-wrap{
        display: table;
        width: 80%;
        margin: 20px auto;
        border: 1px solid red;
        padding: 20px;
    }
    .table-wrap li{
        display: table-cell;
        padding: 20px;
        border: 1px solid green;
        border-right: none;
        text-align: center;
        vertical-align: middle;
    }
    .table-wrap li:last-child{
        border-right: 1px solid green;
    }
</style>
<ul class="table-wrap">
    <li>001</li>
    <li>002</li>
    <li>003</li>
    <li>004</li>
    <li>005</li>
</ul>

avatar
以前进行类似的布局我都会使用display:inline-block;的方式,需要在ul上设置font-size: 0;来清除每一个小块之间的间隙,还需要为每一个项写一个百分比宽度。使用table-cell后,不需要写百分比宽度,也不需要清除小块间的间隙。而且添加额外项时,会自动平均分配宽度。

5. 两栏自适应布局

即左侧宽度固定,右侧自动分配剩余空间

    <style>
        * {
            box-sizing: border-box;
        }
        .content {
            display: table;
            border: 1px solid #06c;
            padding: 15px 5px;
            max-width: 1000px;
            margin: 10px auto;
            min-width: 320px;
            width: 100%;
        }
        .left-box{
            float: left;            
            background-color: green;
            margin-right: 10px;
            padding-top:5px;            
        }
        .right-box{
            display: table-cell;
            border: 1px solid red;
            padding: 10px;
            vertical-align: top;
        }
    </style>
    <div class="content">
        <div class="left-box">
             <img src="http://jsfiddle.net/img/logo@2x.png" alt="logo" />
        </div>         
        <div class="right-box">
            <span>这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字这是很多文字。。。。。</span>
        </div>
    </div>

avatar
左侧宽度固定,右侧宽度自适应。布局原理也可以用BFC来解释,左侧和右侧都是BFC块,BFC块是不会和float块发生重叠的。

6. 诡异的百分比宽高

使用table-cell有一个让人很抓狂的地方,那就是他的宽高是不能使用百分比设置的,具体的原因我一直没有找到,只能理解为这是这个属性的特性。希望有知道的老铁告知一声。
下面说一说关于百分比宽高的结论:
1. 高度设置百分比无效,只与内容的实际高度有关
2. 宽度设置百分比分两种情况,
* 一种是父容器设置display:table;,这种情况下分两种情况
1. 没有其他元素table-cell的容器会获得它前面的元素在水平方向分配完的全部宽度。
2. 在其前面有其他元素时,其宽度可以按照display:inline-block的元素来计算,也就是宽度会小于等于其百分比计算值的宽度的
* 在父容器未设置table时width的百分比值可以理解为内容区宽度加上border-box左右两边到父容器边框的距离,也就是width的百分比值越小,其所占据的宽度越大
如果你对这个问题比较感兴趣,可以看看这个问答。
真的是匪夷所思啊。

小结:所有的display:table-cell;布局中,vertical-align属性对于文字对齐都是很关键的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

table-cell布局 的相关文章

  • JSF 数据表单元格 - 如果内容太长,则剪切文本并替换为“...”

    如果文本对于单元格来说太长 我想剪掉文本 并在末尾添加三个点 不换行 问题是 我不能只在 XX 符号之后剪切 java 中的内容 因为 i 比 W 占用的空间更少 这反过来又看起来很愚蠢 我怎样才能用CSS java实现这一点 如果可能的话
  • Excel:在单元格单击上运行宏

    当用户单击该行中的另一个单元格时 我使用以下代码将今天的日期插入到单元格中 目前代码是这样设置的 如果用户单击单元格 AQ8 则将日期插入单元格 AS8 Private Sub Worksheet SelectionChange ByVal
  • 在 Google Spreadsheet API 上获取合并单元格宽度

    我正在使用 Google Spreadsheet API 将包含工人轮班的文档转换为事件日历 唯一的问题是班次是由根据天和小时合并的单元格表示的 天和小时作为行 不同的工作时段作为列 当我读取某个已合并并跨越 6 个单元格的单元格时 我无法
  • 从 Google 电子表格单元格调用 Google App 脚本库

    在 Google 电子表格中尝试新的库功能 我已经包含了一个标识符为 Test 的库 并且该库实现了函数 foo 在电子表格单元格中输入 Test foo 会出现错误 未知函数名称 TEST FOO 如果我在电子表格中创建一个函数来包装库函
  • 如何在编辑时获取jqGrid单元格值

    在线编辑时如何获取 jqGrid 单元格值 getcell 和 getRowData 返回单元格内容而不是输入元素的实际值 获取具有给定行 id 和单元格 id 的单元格值的通用函数 在你的js代码中创建函数 function getCel
  • 如何轻松地从表格中添加/删除单元格(移动现有单元格)

    我希望表格自动将单元格对齐为每行两个 这意味着如果添加 删除单元格 单元格将变为每行两个 如果单元格总数为奇数 则最后一行有一个 Example table tr td old1 td td old2 td tr tr td old3 td
  • RowAnimation 对于不同高度的单元格看起来很奇怪

    我在 UITableView 上动画删除和插入时遇到问题 事实是 我现在有不同的单元格高度 有些是 44 0 有些是 135 0 我有 uitableviewstyle 与不同的部分分组 每个部分的第一行是分组行 单击后 我将删除该部分中除
  • 如何将位图图像设置为按钮背景图像

    gridcell Button row findViewById R id calendar day gridcell gridcell setText Day 1 URL url new URL http 172 16 4 29 81 p
  • 设置matplotlib表的行边缘颜色

    I ve a pandas DataFrame使用绘制为表格matplotlib from 这个答案 https stackoverflow com a 39358752 1437877 现在我想设置给定行的底部边缘颜色 我有以下代码 im
  • ClosedXML 添加图像

    我可以使用 OpenXML 将图像添加到 Excel 电子表格中 然而 对于程序的其余部分 我使用 ClosedXML 来添加数据 我可以使用列和行索引在特定单元格添加数据 如果我可以将图像添加到 Excel 它目前似乎是一个单独的层 悬停
  • 有没有办法仅使用 HTML/CSS 来隐藏基于特定值的数据单元格?

    例如我有这样的代码 table caption Test caption tr th Values th td 100 td tr tr th Initial value th td class results td tr table 有没
  • TCPDF:将文本剪切到单元格宽度

    我正在广泛使用 TCPDF 的 Cell 方法生成 PDF 报告 使用 Cell 方法打印的文本超出了方法中指定的宽度 我只想打印适合指定宽度的文本部分 但不要溢出或换行到下一行 我不想要字体拉伸策略 我搜索了很多但找不到解决方案 还有其他
  • 如何使用 VBA 修剪 MS Word 中的表格单元格值

    我有一个 Word 文件中的表格 下面的这个 vba 程序将迭代所有表格单元格 Dim strCellText As String Dim uResp As String Dim Row As Integer Dim Col As Inte
  • 如何根据网格单元值对栅格进行子集化

    我的以下问题基于 jbaums 在这篇文章中提出的解决方案 地理距离的全球栅格 https stackoverflow com questions 35555709 global raster of geographic distances
  • Excel公式查找其他单元格使用的引用

    有没有办法找出Excel中另一个单元格引用的单元格的地址 例如 单元格 C1 包含公式 max A A 并返回值 10 该值实际上引用单元格 A10 我可以在单元格 B 中使用返回 A10 的公式吗 不 我根本不想使用 VBA 假设您的条目
  • HTML - 在表格单元格内启用滚动

    假设我有一个具有固定宽度和高度的表格单元格 并且我的数据超出了单元格的固定尺寸 td width 500 height 300 lots of data that exceeds the dimensions td 我可以在单元格内启用此数
  • 如何去掉 Matlab 单元格中的双引号?

    我在 Matlab 中有一个单元格数组 单元格中的所有元素都表示为 something 我怎样才能创建一个数组 something 这里有两个解决方案 strrep删除所有双引号实例 同时regexprep只删除字符串开头和结尾的双引号 感
  • Google Apps 脚本 - 访问单元格备注和评论

    大家好 感谢您花时间查看我的问题 我是一名九年级老师 正在制作一份定制的成绩表 并且刚刚完成了一个 GUI 可以让家长查看孩子的成绩 然而 在实际的成绩单上 我使用单元格注释 以前是注释 来存储特定于成绩的信息 即吉米遗漏了作业的 b 部分
  • 如何删除Excel 2010单元格中的某些字符

    在 A 列中 我有很多类似这样的名称 约翰 史密斯 我仍然希望它们在 A 中 但 被删除了 If John Smith 位于单元格 A1 中 然后使用以下公式执行您想要的操作 SUBSTITUTE SUBSTITUTE A1 内部 SUBS
  • 检查所选单元格是否在特定范围内

    我正在使用 C 创建 Excel 加载项 如何检查选定的 或代码中范围表示的单元格 是否在特定范围内 例如如何检查单元格 P 5 是否在 A 1 Z 10 范围内 Use Application Intersect 像这样 在VBA中 Su

随机推荐

  • 前端学习笔记-AJAX

    首字母略缩词AJAX xff0c 全名Asynchronous Javascript And XML 卖点当然是第一个词 xff1a Asynchronous xff0c 即异步 xff1b 而最后一个词是XML xff0c 当然要谈到XM
  • 关于flex属性缩写兼容性问题

    我们常希望用属性flex 1来代替flex 1 1 0 xff0c 其三个分量分别为flex grow flex shrink flex basis xff0c 前两者设1表示不侵占剩余空间也不希望被侵占 xff0c flex basis置
  • 英语二写作新增样题分层范文

    Directions Read the following excerpt from an article and write an essay In your essay you should explain whether or to
  • 可观察对象如何与模态框协作

    可观察对象如何与模态框协作 以组件PriceAlertModal为例 xff0c 观察Modal与可观察对象的结合使用 src common reactModules priceAlertModal components priceAler
  • javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building f

    原因 xff1a 这是SSL证书请求问题 原代码 private String postForAPP1 String token throws Exception Map lt String Object gt param 61 new H
  • 181216-向数据库中导入csv文件,日期格式不符的问题

    使用postgreSQL时 xff0c 用 COPY lt table gt FROM 39 lt path gt 39 WITH CSV HEADER 命令 导入带表头的csv原始数据 xff0c 导入成功 xff0c 但查询数据时显示语
  • 190601-PaddlePaddle安装遇到的问题

    今天正准备阅读胡晓曼 xff08 Charlotte77 xff09 老师的 深度学习系列 PaddlePaddle之手写数字识别 xff0c 遇到了点儿麻烦 之前听同学说PaddlePaddle只能安装在专业版windows系统上 xff
  • Microsoft word2013打开报错“内存或磁盘不足”

    这里我遇到的问题是 xff0c word的加载项我问题 xff0c 把word的所有加载项取消解决 文件 gt 选项 gt 加载项 gt 转到 gt 勾掉所有的加载项
  • 运算符(代码及操作)

    运算符基础题 1 1 算术运算符 span class token comment 算术运算符 xff1a 43 xff1a 求和 xff1a 求差 xff1a 求积 xff1a 求商 xff1a 求余数 span span class t
  • 角谷猜想(c++代码)

    include using namespace std int main int n cin gt gt n if 1 lt 61 n amp amp n lt 61 2000000 do if n 2 61 61 1 cout lt
  • SpringBoot应用接口无法访问,但应用看起来正常

    背景 xff1a 应用中有多个实现了CommandLineRunner接口的类 xff0c 其中一个类A单独起了一个线程去执行逻辑 xff0c 另一个类B也实现了CommandLineRunner接口但是没有new新线程的操作 现象 xff
  • ubuntu PATH 出错修复

    我的 ubuntu10 10设置交叉编译环境时 xff0c PATH 设置错误了 xff0c 导致无法正常启动 xff0c 错误情况如下 xff1a PATH xff1a 找不到命令 ubuntu201 span class hljs nu
  • mybatis-plus中使用pagehelper避坑

    1 你的传参对象的分页字段是pageNum和pageSize 今天测试一个接口 xff0c 没有传递分页字段 xff0c 但是后台还是进行了分页查询 这个是因为虽然没有传递分页查询 xff0c 但是后台的参数对象中有pageNum和page
  • 结构体和二进制文件操作

    老师给我们分布里一个作业 xff0c 让我们定义一个怪物的结构体 xff0c 输入你想创建的数字就可以创建出相应个数的怪物 然后再输入每个怪物的信息并保存到一个文本文件里面 xff0c 以供以后读取 这里我定义了 一个结构体 xff0c 还
  • 如何解决苹果账号续费时支付失败的问题

    事件 苹果开发者账号 xff08 公司 xff09 准备到期了 用双币信用卡续费的时候 xff0c 一直提示 你的支付授权失败 请核对你的信息并重试 xff0c 或尝试其他支付方式 请联系你的银行了解更多信息 xff0c 如下图所示 xff
  • java-读取javabean中所有属性和属性的类型

    java读取文件中的属性类型 64 param model 64 return 64 throws Exception public static Map lt String String gt getModelAttriButeType
  • java项目linux jar包部署问题

    1 当我们项目打包成jar包后 xff0c 上传到linux服务器上 xff0c 用 java jar xxxxx jar 启动项目后 xff0c 会发现我们代码中的日志输出会变乱码 xff0c 这时只需要在命令加上如下参数即可 xff1a
  • pip安装到指定路径

    在pycharm的Terminal窗口输入 xff1a pip install numpy target 61 F py Analysis vv Lib site packages numpy xff1a python库的名称 后面 tar
  • PostgreSQL标准建表语句

    建表 CREATE TABLE if not exists public user id character varying 32 NOT NULL DEFAULT sys guid name character varying 100 N
  • table-cell布局

    display table cell属性简介 display xff1a table cell xff1b 会使元素表现的类似一个表格中的单元格td xff0c 利用这个特性可以实现文字的垂直居中效果 同时它也会破坏一些CSS属性 xff0