元素高度问题
date
Mar 27, 2023
slug
deepcss-box-height
status
Published
tags
深入解析CSS
summary
Element hight
type
Post
控制溢出行为
当明确设置一个元素的高度时,内容可能会溢出容器。当内容在限定区域放不下,渲染到父 元素外面时,就会发生这种现象。
上图显示内容溢出容器的现象。使用
overflow
控制移除内容的行为- visible ——所有内容可见,即使溢出容器边缘。
- hidden——溢出容器内边距边缘的内容被裁剪,无法看见。
- scroll——容器出现滚动条,用户可以通过滚动查看剩余内容。
- auto——只有内容溢出时容器才会出现滚动条。
我们以创建两个等高的div为例,其 class 分别为 main 和 sidebar
CSS表格布局
用 CSS表格布局替代浮动布局。给容器设置 display: table,给每一列设置 display: table-cell。
默认情况下,显示为 table 的元素宽度不会扩展到 100%,因此需要 明确指定宽度100%
由于外边距不作用于 table-cell 元素,外边距(margin)不再生效。可以用表格元素的 border-spacing 属性来定义单元格的间距。该属性接受两个长度值: 水平间距和垂直间距。在表 格容器外面包一个元素,将其左右外边距设置为−1.5em,从而抵消表 格容器外侧 1.5em 的 border-spacing。
.wrapper {/*添加一个新的包裹元素,设置负外边距*/
margin-left: -1.5em;
margin-right: -1.5em;
}
.container {
display: table;/*让容器布局像表格一样*/
width: 100%;/*让表格填充容器的宽度*/
border-spacing: 1.5em 0;/*单元格之间加上水平的border-spacing*/
}
.main {
display: table-cell;/*让列布局像表格的单元格一样*/
width: 70%;
background-color: #fff;
border-radius: .5em;
}
.sidebar {
display: table-cell;
width: 30%;
/*margin-left: 1.5em;外边距不作用于 table-cell 元素,外边距不再生效*/
padding: 1.5em;
background-color: #fff;
border-radius: .5em;
}
用 HTML 表格实现布局并非明智之举,表格布局用了无语义的 HTML 标签。
Flexbox
Flexbox 不需要一个额外 的 div 包裹元素,它默认会产生等高的元素。
给容器设置 display: flex,它就变成了一个弹性容器(flex container),子元素默认等高。 你可以给子元素设置宽度和外边距,尽管加起来可能超过 100%,Flexbox 也能妥善处理。
使用min-height和max-height
用这两个属性指 定最小或最大值,而不是明确定义高度,这样元素就可以在这些界限内自动决定高度。
min-height
:指定一个最小高度,元素至少等于你指定的高度,如果内容太 多,浏览器就会允许元素自己扩展高度。max-height
:允许元素自然地增高到一个特定界限。如果到达这个界限,元素就不再 增高,内容会溢出。负外边距
如果设置左边或顶部的负 外边距,元素就会相应地向左或向上移动,导致元素与它前面的元素重叠,如果设置右边或者底 部的负外边距,并不会移动元素,而是将它后面的元素拉过来。给元素底部加上负外边距并不等 同于给它下面的元素顶部加上负外边距。