概述

之前工作中碰到了一个垂直居中问题,最后通过查资料利用table-cell解决。于是打算总结一下有关table-cell的应用,记录下来,供以后开发时参考,相信对其他人也有用。

参考资料:我所知道的几种display:table-cell的应用

一行或多行文字垂直居中

比如有这样一个需求:框内的文字水平居中,垂直居中,并且当文字很多时,自动变成多行,并且变成多行后仍然是水平居中,垂直居中的。

一般情况下,我们可以用以下代码来实现:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
div {
display: table-cell;
width: 200px;
height: 100px;
font-size: 30px;
border:4px solid #beceeb; text-align: center;
vertical-align: middle;
}
span {
display: inline-block;
vertical-align: middle;
}
</style>
</head>
<body>
<div>
<span>我的字很少</span>
</div>
<div>
<span>我是很多行很多字</span>
</div>
</body>
</html>

但是如果我们需要父容器是块级元素,或者父容器浮动,那么用上面的办法就不行了,这个时候可以用display: table来实现,比如下面的代码:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
div {
display: table;
width: 200px;
height: 100px;
font-size: 30px;
border:4px solid #beceeb; text-align: center;
vertical-align: middle;
float: left;
}
span {
display: table-cell;
vertical-align: middle;
}
</style>
</head>
<body>
<div>
<span>我的字很少</span>
</div>
<div>
<span>我是很多行很多字</span>
</div>
</body>
</html>

另外需要注意的是,如果里面的文字是一串很长的单词,那么有可能会超出父容器的宽度,这个时候需要添加word-break: break-all;来实现了。

左边宽度固定,右边宽度自适应

有这样一个需求:父元素宽度不定,它有2个子元素,子元素在同一行,左边的子元素宽度固定,右边的子元素宽度自适应。

这里左边的子元素肯定会用浮动,如果右边的元素设置display: block;的话,右边的子元素会包括左边的子元素。但是如果设置display: table-cell的话,就不会了,如下面的代码所示:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
.box{width:60%; margin:60px auto 0; padding:20px; background:#f5f5f5;overflow: hidden;}
.girl-img {float:left; width: 100px;}
.content{display: table-cell;}
</style>
</head>
<body>
<div class="box f9 fix">
<a href="#prettyGirl" class="girl-img"><img border="0" src="https://image.zhangxinxu.com/image/study/s/s128/mm2.jpg" /></a>
<div class="content">
<p><a href="#prettyGirl">大美女一枚</a> 来自上海</p>
<p class="mt5">签名:想找个保鲜盒把你给我的那些感动都装起来。当你让我伤心的时候就拿出来回味一下。</p>
<p class="mt5">微博:坐在办公室,只听轰隆隆几声巨响,晴天也能打雷吗?原来街对面的芭莎咖啡厅被炸成了两截。这定点爆破也太失败了,也不清下场,把路过的汽车震得灰头土脸,愣在路中央不知如何是好。其次,房子只炸了一半,另一半屹立不倒,是乍药太水还是房子质量太好?</p>
</div>
</div>
</body>
</html>

值得一提的是,bootstrap里面的输入框组input-group就用到了这种布局。

其它

table-cell还可以实现很多其它布局,但是那些布局不用table-cell一样也可以实现,所以我这里就不一一列出来了。

display: table-cell的实用应用的更多相关文章

  1. [转]基于display:table的CSS布局

    当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:table.table-row和table-cell,它也是最后一款支持这些属性值的主流浏览器.它标志着复杂CSS ...

  2. display:table的几个妙用:垂直居中、浮动……

    一.为什么不用table系表格元素? 目前,在大多数开发环境中,已经基本不用table元素来做网页布局了,取而代之的是div+css,那么为什么不用table系表格元素呢? 1.用DIV+CSS编写出 ...

  3. css Table布局:基于display:table的CSS布局

    两种类型的表格布局 你有两种方式使用表格布局 -HTML Table(<table>标签)和CSS Table(display:table 等相关属性). HTML Table是指使用原生 ...

  4. display:table

    display:table的CSS声明能够让一个HTML元素和它的子节点像table元素一样.使用基于表格的CSS布局,使我们能够轻松定义一个单元格的边界.背景等样式,而不会产生因为使用了table那 ...

  5. display:table的用法

    目前,在大多数开发环境中,已经基本不用table元素来做网页布局了,取而代之的是div+css,那么为什么不用table系表格元素呢? 1.用DIV+CSS编写出来的文件k数比用table写出来的要小 ...

  6. 使用display:table来解决一些问题

    一直有,多栏的需求,当然用table布局,很快就做完了.不怎么喜欢用table,刚开始使用display:table,但是有一条老是不能达到我的效果,那就是有一行不固定宽度的时候,就不知道怎么处理,今 ...

  7. 垂直居中display:table;

    父级元素 display:table: 子元素 display:table-cell:vertical-align:middle:

  8. CSS display:table属性用法- 轻松实现了三栏等高布局

    display:table:此元素会作为块级表格来显示(类似 <table>); display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以 ...

  9. display:table 水平居中

    <div style="width:auto; margin:auto;display:table"> <div style="width: 100px ...

  10. display:table表格合并单元格

    直接上代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEn ...

随机推荐

  1. 201771010134杨其菊《面向对象程序设计(java)》第十三周学习总结

    第十三周学习总结 第一部分:理论知识 第11章 事件处理(事件处理基础; 动作; 鼠标事件;AWT事件继承层次) 1. 事件源(event source):能够产生事件的对象都可 以成为事件源,如文本 ...

  2. Json列表数据查找更新

    /* 从Json数组按某个字段中查找记录 IN array 数据列表 fieldName 字段名称 fieldValue 字段值 OUT 查找到的数据列表 */ var SearchRecordsFr ...

  3. span的title标签中的换行

    var strs = data.flowSummary;  strs=strs.replace(/燮r燮n/g," "); js的全局替换用/要替换的字符串/g span的titl ...

  4. 1. String可调用方法

    class str(basestring): """ str(object='') -> string Return a nice string represent ...

  5. Google资深工程师深度讲解Go语言完整教程

    资源获取链接点击这里 欢迎大家来到深度讲解Go语言的课堂.本课程将从基本语法讲起,逐渐深入,帮助同学深度理解Go语言面向接口,函数式编程,错误处理,测试,并行计算等元素,并带领大家实现一个分布式爬虫的 ...

  6. JS生成URL二维码

    需求:项目中需要在UI界面有一个二维码,扫码后可以跳转到二维码包含的URL. 解决方案:在前端用js生成一个包含URL等信息的二维码. 实现: 方案一. <!DOCTYPE HTML PUBLI ...

  7. cookie设置和清除,解决跨目录读取不到cookie值

    cookies.setCookie("UserType", result.UserType, null, '/'); cookies.deleteCookie("User ...

  8. CSS绝对定位的原点:是在border上、padding上还是在content上?

    用了那么久的绝对定位,却一直没在意一个问题,就是绝对定位的原点,究竟是在盒模型的哪一处.今天想到这个问题,直接搜索没有找到标准文档,也没有搜索到相关的问题,于是决定自己动手实现一下看看,并把这个结果发 ...

  9. SQL: Cannot create JDBC driver of class '' for connect URL

    使用数据库数据源的web 项目,发布后,访问数据库500报错: 浏览器端: 控制台: 数据库连接池在不启动Tomcat的情况下,测试类通过,没有问题. 一旦在服务器发布,就会出现问题,考虑是Tomca ...

  10. C语言错题集

    1.输入两个int型数a.b,求a/b的商c,不必考虑b为0的情况,输出c(保留两位小数) include<stdio.h> int main() { int a,b; float c; ...