1、table的一些特性与表现形式

虽然table布局因为它的一些非语义化、布局代码冗余,以及不好维护改版等缺点被赶出了布局界。但是在css不给力时期,table布局也曾风靡一时,就算现在看来table的一些布局的特性也是非常给力的,而幸好css也吸取了table布局一些好的特性为己用。让我们可以使用更少、更语义化的标签来模拟table布局,可以跳过table布局的缺点又实现我们想要的效果,所以我们首先需要了解table的一些特性以及对应的css属性。

我们在不居中使用到的也就是table、tr、td的一些特性,所以我们只需要了解这三个标签的特性就足够了。

table标签(display:table)

table可设置宽高、margin、border、padding等属性。属性值的单位可以使用px,百分比值。

table的宽度默认由内容的宽高撑开,如果table设置了宽度,宽度默认被它里面的td平均分,如果给某一个td设置宽度,那么table剩余的宽度会被其他的td平均分(有点类似flex布局)

给table设置的高度起到的作用只是min-height的作用,当内容的高度高于设置的高度时,table的高度会被撑高。

tr标签(display:table-row)

给tr设置高度只起到min-height的作用,默认会平分table的高度。

tr中的td默认高度会继承tr的高度,若给任一td设置了高度,其他td的高度也同样变高。适合多列等高布局

设置宽度、margin、都不起作用

td标签(display:table-cell)

td默认继承table的高度,且平分table的宽度

若table(display:table)不存在,给td设置的宽高不能用百分比只能用准确的数值

给td设置vertical-align: middle; td元素里面(除float、position:absolute)所有的块级、非块级元素都会相对于td垂直居中

给td设置text-align: center; td元素里面所有非block元素(除float、position:absolute)都会相对于td水平居中,虽然block元素不居中,但其中的文字或inline元素会水平居中

了解了table的一些属性,当我们遇到一些水平垂直居中的布局时,就会变得so easy了。

2、图片定高不定高水平垂直居中

图片本身就是inline-block元素,那么我们只要给它的父级元素加个display:table-cell就好

3、多行定高不定高定宽不定宽水平垂直居中

我们平时常见的就是单行水平垂直居中,其实就是简单的text-align:center; 然后再是line-height:xx 就搞定了。但是多行的就相对于复杂点。但是使用了table-cell之后,就变得很简单了

4、左右浮动元素垂直居中

由于display:table-cell对浮动元素是不起作用的,当我们需要两个元素一个左浮动一个右浮动,并且这连个元素还居中的时候。上面的方法就不起作用了。那我们可以换个法子,既然display:table-cell;的垂直居中不能直接对浮动元素起作用,那就来个间接的嘛。给两个浮动的元素外面一个display:inline-block;的元素,并且清除浮动。然后让display:table-cell的垂直居中对inline-block元素起作用就好了。

如果你的需求还需要在两个浮动的元素中再添加水平垂直居中的话,那么同样的道理,只需要在这两个元素中构造符合table-cell布局的结构就好了。

5、一行多列水平垂直居中

经常会有这样的需求,一列里面可能会有1、2、3个子元素,不管几个都是要居中的。有了table-cell就可以轻松解决了。

实现原理也基本是把外层box设置为display:table-cell;然后设置居中。里面的元素item设置成inline或者line-block;就可以了,不管里面的item的个数多少,都会居中的,包括item是图片也会这样。

6、多列等高布局

有这样的需求,一行有三个item,三个item的高度不定,但是这一行的三个item最终的高度以最高的那个为准。按照以前的做法要不就是砍掉需求,必须定高。实在不行就是等加载完之后用js计算三个item的高度,然后把最高的高度给其他item设置高度。这样有点恶心,并且会出现抖动。有了table-cell之后,这个就不成问题了,因为在一个tr中,里面的td必须是等高的,而不管里面内容的高度。

认证看代码你会发现跟我们平时的定高布局布局不一样,每行外面必须得有一个ul来保证里面item的等高,并且里面还需要使用多余的li来控制间距。这样做的原因是因为tr里面的元素不会自动换行,所以必须手动换行,给外面加个ul,(说好的tr呢?)是这样的,被设置为display:table-cell的元素会跟相邻的兄弟元素共同生成一个虚拟的table、tr把自己包起来,谁叫td只能包在table里面呢。但是你直接写td标签是不会产生这样的效果的。而使用多余的li来控制间距是因为table-cell元素不认识margin,所以只能这样做了。

7、左边定宽右边自适应

8、左边右边定宽中间自适应三列布局

总结:

使用table-cell还可以实现很多的布局,需要自己去发挥想象。总结下来也就需要记住几点,设置了display:table-cell的元素具有以下特性。

text-align、vertical-align等对齐属性起作用,margin不起作用。宽高百分比值不起作用。

会生成虚拟的table、tr把自己包裹住,如果有相邻的兄弟元素也被设置了table-cell,则会跟兄弟元素一起生成虚拟的table、tr把自己包裹住,并一行等高显示

多个table-cell元素会占满被设置了display: table的元素的宽度,如果一个元素被设置了宽度,那么其他剩余的table-cell元素会占满剩下的宽度。当然,如果只有一个table-cell元素,就算设置了宽度也会占满table元素的宽度。

对设置了float、absolute的元素不起作用。且IE6、7不支持

这就是所谓的table布局大法。

display: inline-block

inline-block元素把自己变成特殊的inline元素,对于相邻的元素来说表现出inline的特点,允许空格。对于内部元素来说表现出block元素的特点,可以设置高度和宽度。

空格是两个标签中存在换行符or制表符or空格符(其实就是缩进)的原因生产的,只需要给设置了inline-block属性的父元素设置font-size:0,就可以使标签中的空格失去宽度。

html表格左右布局,css table布局大法,解决你大部分居中、多列等高、左右布局的问题...相关推荐

  1. css table布局大法,解决你大部分居中、多列等高、左右布局的问题

    看了这篇文章,你可以了解到以下布局方法: table-cell 定高水平垂直居中 不定高水平垂直居中 单行定高水平垂直居中 单行不定高水平垂直居中 多行定高水平垂直居中 多行不定高水平垂直居中 多列等 ...

  2. 两列布局、三列适应布局、两列等高适应布局。

    一. 两列布局:左侧定宽.右侧自适应. 四种方法 :flex .position.float和负外边距.外边距 1. 使用flex. <!DOCTYPE html> <html> ...

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

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

  4. html表格自动分列,[css]display: table-cell,用div做分列布局

    table-cell我们却能用得到,而且是用它来干一件很重要的事情--多列布局. 多列布局在css中有多重要就不用我说了吧,传统模式下大家都使用float来解决这一问题,但是float写出来的东西代码 ...

  5. div+css布局与table布局比较

    div+css布局与table布局比较 一.背景介绍 table布局是网页早期布局实现的主要手段,当时的网页构成,相对也比较简单,多是以文本 以及静态图片等组成的,类似于报纸的形式,分区分块显示,ta ...

  6. 微信小程序之获取后台动态数据表格布局display:table

    微信小程序之获取后台动态数据表格布局display:table 猿来独往 2018-09-02 本文没有采用flex布局和grid布局来设置表格的,而是通过 display: table;来设置. 一 ...

  7. css布局:table布局、两栏布局、三栏布局

    一.最初的布局--table 最初的时候,网页简单到可能只有文字和链接.这时候,大家最常用的就是table.因为table可以展示出多个块的排布.这种布局现在应该不常用了,因为在形色单一时,使用起来方 ...

  8. 浅谈CSS table布局的属性

    CSS布局有很多种方法,比较常用的有浮动.定位.flex布局等,这些布局各有各的利弊,各有各的使用场景.除了这几种常见的布局外,曾经在CSS布局界还有一种table布局,虽然因为它的一些非语义化.布局 ...

  9. css box 等高布局,css实现等高布局有哪些方式

    什么是等高布局? 指在同一个父容器中,子元素高度相等的布局. 从等高布局实现方式来说分为两类: 1.伪等高 子元素高度差依然存在,只是视觉上给人感觉就是等高. 2.真等高 子元素高度相等. 伪等高实现 ...

最新文章

  1. transformer详解 大牛 wmathor
  2. mysql将字符串字段转为数字排序或比大小
  3. TLS回调函数(1)
  4. React Native使用指南-原生模块
  5. linux内核网络钩子函数使用,Linux内核IOCTL网络控制框架实现实例分析
  6. MySQL5.6优化了Order by排序limit
  7. 给mysql 授权 命令_mysql中授权命令grant用法详解:
  8. 华三 h3c STP生成树保护配置
  9. e3mall商城的归纳总结10之freemarker的使用和sso单点登录系统的简介
  10. HTML+CSS+JS制作一个迅雷看看电影网页设计实例 ,排版整洁,内容丰富,主题鲜明,简单的网页制作期末作业
  11. CRM项目半途而废 “烂摊子”该如何收拾?
  12. 2022江苏省职业院校技能大赛(中职)网络搭建与应用赛项
  13. 年末总结_聊一聊数据库行业的“继往开来”
  14. Linux性能检查命令总结
  15. 零基础入门python好学么
  16. 微信小程序开发13 云开发:云原生一体化应用开发平台
  17. Mac Redis开机自启动
  18. 对“佩戴低度数近视镜可延缓近视发展?”的一些疑问
  19. Ubuntu查找软件源
  20. B/S架构与C/S架构

热门文章

  1. [Shader]NGUI与灰化
  2. 流行和声(7)min7b5/半减七和弦
  3. Matlab蒙特卡罗模拟
  4. 网易AI平台开放多项技术,助力网易七鱼智能客服升级
  5. 2021-02-22
  6. java证书cert_java – 使用带有证书路径(cert chain)的bouncy...
  7. mysql已启动但无法连接_MySQL无法正常启动,Navicat连接出错,解决2003问题
  8. 2020美赛赛后感想总结
  9. 模拟外线O口呼入时,看不到来电显示号码?
  10. uni-app 188修复弹框问题