display:table、box和width百分比来均分盒子的比较

box

box适合均分内部子盒子没有边框的父盒子,否则内部盒子的边框重叠问题不太好处理,另外如果自盒子间有margin值,中间的margin会是两侧的double,这时可通过nth-child(index)来进行个别调整。

box-flex是对除开子盒子内容区、定宽子盒子之外的剩余部分进行划分,而不是把父盒子的整个宽度进行划分,因此就会造成所有子盒子都设置为box-flex:1,但因为子盒子内容多少不一而造成不能均分。

box的特点

1.当父元素设置为display:box后,内部的自盒子无论是否是内联元素,默认的排列方向都是横向排布。

2.内部块级子盒子的宽度由内容决定,不再占满整行,即便是按纵向排布。

3.只有内部盒子中存在块级元素时,父盒子上应用box的相关属性才有用,如果内部盒子全是内联元素将不起作用。子盒子的属性box-flex只对块级子盒子起作用。

总结box的应用:

1.实现内部盒子的横向布局:box-orient:horizontal

2.内部子盒子的居中对齐:box-align:center;box-pack:center

两端对齐:box-pack:justify

3.子盒子按某种比例划分父盒子(剩余部分)宽度:box-flex:num;(仍可设置width)

设置width:百分比

设置子盒子的宽度为百分比通常需要知道父盒子的宽度、除掉子盒子宽度后的区域的宽度,例如margin、border值等,需要精确的计算,这种方式不太方便。通常需要先将子盒子float以实现横向布局,在使用百分比。或者是父元素宽度不知道,但是子盒子间没有边距需要考虑也可以直接使用这种方式均分。

display:table

可以把除了margin等宽度以外的剩余部分按照100%来划分,这样就不用精确的计算了,父盒子的宽度也不必知道;此外利用border-spacing还可以避免设置margin后double的问题,border-collapse:collapse也能避免边框重叠问题。

但要注意一点的是,table不再是块级元素,不是占满整行,宽度和高度都由内容撑开(但是是可以设置width和height的)。可设置其宽度为100%。

对table-cell应用margin值无效。table-cell同样会被其他一些CSS属性破坏,例如float, position:absolute,所以,在使用display:table-cell与float:left或是position:absolute 属性尽量不用同用。

table-cell可以单独使用,table和table-cell可以两个搭配使用,可以没有table-row。

总结table应用:

1.将内部盒子设置为table-cell,可实现横向排布

2.为内部盒子设置width可实现均分,自适应布局

3.border-collapse可避免border重叠问题

4.border-spacing可避免设置margin值来分离内部盒子造成的边距double问题。

5.table-cell激活了vertical-align属性,可用于垂直居中内部元素

6.实现等高布局

局限:IE8+及现代浏览器支持

我所知道的几种display:table-cell的应用

横向布局

1.display:inline-block

2.浮动

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2025-01-02 15:51:40

display:table、box和width百分比来均分盒子的比较的相关文章

display:table

display:table的CSS声明能够让一个HTML元素和它的子节点像table元素一样.使用基于表格的CSS布局,使我们能够轻松定义一个单元格的边界.背景等样式,而不会产生因为使用了table那样的制表标签所导致的语义化问题. 以下是display:的相关属性值: table (类似 <table>)此元素会作为块级表格来显示,表格前后带有换行符. inline-table (类似 <table>)此元素会作为内联表格来显示,表格前后没有换行符. table-row-grou

区别CSS中display:box;inline;none以及HTML中 &lt;frame&gt; 标签&lt;table&gt; 标签的 frame 属性

区别display:box:display:inline:display:none三者的不同 display:block的特点是: block是Display默认的值.总是在新行上开始:该对象随后的内容自动换行;行高以及顶和底边距都可控制:宽度缺省是它的容器的100%,除非设定一个宽度:<div>, <p>, <h1>, <form>, <ul> 和 <li>是块元素的例子,意思是他们默认显示方式是block: display:inl

css Table布局-display:table

使用表格布局一直是一个敏感的主题.一般情况下,Web开发人员考虑基于表格布局是禁忌.尽管反对的理由看起来证据很充分,但是大多数开发者除了谴责基于表格的布局,都无法提供完善的使用场景."表格不好." 从早期反对HTML Table(<table>标签)开始这种势头就非常强劲.几代开发者被成功洗脑,根深蒂固的认为:任何使用表格都是邪恶的. 诚然,我也是避免使用表格布局的开发者之一,即使是显示表格数据. 我甚至曾经斥责我的下属开发者同事,当他们使用 display:table 用

使用display:table 做多菜單切換

</pre><p>做成這種效果<img src="" alt="" /></p><p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhIAAAA/CAYAAAC1kCF+AAAIjklEQVR4Ae2cz4oUPRDAez9GvIs32cuuh30NH2KvwvcGXgWFAgWvvsEH3n0GX8OLXvaueFrEw3

display: table; 100%的宽度

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> * { margin: 0; padding: 0; } .box1 { display: table; } .box2 { display: table-cell; border: 1px solid #000; } .box3 { width: 1

基于CSS属性display:table的表格布局的使用

项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的table表格,没有单元格的属性和样式,经过一番思考,曲折现实了单元格的合并,即采用正行嵌套一个单独的display:table的DIV,然后在嵌套的表格DIV内部通过控制行列数和行列的高度,实现单元格合并.个人建议全新实现使用<table> HTML标签即可 一.CSS display属性的表格布局相关属性的解释: table    此元素会作为块级表格来显示(类

display:table表格合并单元格

直接上代码: <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="/commons/include/html_doctype.html" %> <html> <head> <title>补贴项目属性管理</t

基于display:table的CSS布局

当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:table.table-row和table-cell,它也是最后一款支持这些属性值的主流浏览器.它标志着复杂CSS布局技术的结束,同时也给了HTML表格布局致命一击.最终,使用CSS布局来制作出类似于table布局的栅格将会变得十分迅速和简单.网页元素应用上那些与表格相关的display属性值后,能够模仿出与表格相同的特性.我将会在该文中给大家演示这种方法给CSS布局带来的巨大影响. 使用CSS表格 CSS表格

使用display:table进行垂直居中

这个问题,属于常识性的吧,可以了解了解.demo如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>table-cell垂直居中</title> <style type="text/css"> *{margin:0;padding:0;border:0;} body,h