×

CSS overflow 属性

深入解析 overflow 属性及处理技巧

元智汇电子 元智汇电子 发表于2023-12-01 13:20:18 浏览408 评论0

抢沙发发表评论

📔序言

在Web开发中,熟练掌握CSS布局对于提高页面开发速度至关重要。随着Web技术的日新月异,实现各种布局的方式变得愈发多样。利用碎片时间,我花费了半个月的时间整理了一个系列,该系列文章总结了CSS中各种布局、实现方式以及一些常用技巧,希望通过这个系列为大家带来新的CSS布局认知。


📔深入理解 overflow 属性

🧪概述

overflow 属性用于在一个元素太大而无法适应父级容器大小时定义处理方式。这个属性有四个常用的值:

  • visible:默认值。内容不会被修剪,可以呈现在元素框之外。

  • hidden:如果内容超出父级容器,超出部分将被隐藏。

  • scroll:无论是否超出容器,都会出现一个滚动条。

  • auto:如果没有超出容器,将会正常显示;如果超出,将会出现一个滚动条。

示例代码

<!DOCTYPE html><html lang="en">    <head>        <meta charset="UTF-8" />        <meta http-equiv="X-UA-Compatible" content="IE=edge" />        <meta name="viewport" content="width=device-width, initial-scale=1.0" />        <title>深入理解 overflow 属性</title>        <style>            .main {                width: 1200px;                display: flex;                justify-content: space-between;                margin: 0 auto;            }            .container {                height: 210px;                width: 260px;                background-color: #70a1ff;            }            img {                width: 300px;                opacity: 0.7;            }            .visible {                /* 超出部分溢出显示 */                overflow: visible;            }            .hidden {                /* 超出部分被隐藏 */                overflow: hidden;            }            .scroll {                /* 水平垂直都出现滚动条,可以滚动显示*/                overflow: scroll;            }            .auto {                /* 超出部门出现滚动条,未超出部门可以正常显示 */                overflow: auto;            }        </style>    </head>    <body>        <div class="main">            <div class="container visible"><img src="../image/img.jpg" /></div>            <div class="container hidden"><img src="../image/img.jpg" /></div>            <div class="container scroll"><img src="../image/img.jpg" /></div>            <div class="container auto"><img src="../image/img.jpg" /></div>        </div>    </body></html>

执行效果如下所示:

image.png

通过深入理解 overflow 属性,我们能更好地处理元素溢出的情况,为页面布局提供更灵活的解决方案。


🍚overflow-x 与 overflow-y:细致处理溢出

overflow-x 与 overflow-y 是用于分别设置水平和垂直方向上溢出内容的属性。这两者的巧妙运用可以提供更精准的溢出处理方式。

需要注意的是,如果 overflow-x 与 overflow-y 的值相同,那么效果等同于仅使用 overflow;但是,如果 overflow-x 与 overflow-y 的值不相同,且其中一个属性的值为 visible,另一个为非 visible 的值,第一个被赋予 visible 的值会自动变为 auto。

🍉使用 overflow 的前提条件

为了让 overflow 属性生效,容器必须满足以下条件:

  • display 的值非 inline。

  • 具有尺寸限制(width / height / max-width / max-height / absolute 拉伸)。

  • 对于一些特殊元素,例如单元格 td 等,还需要父容器的 table 设置为 table-layout: fixed 才能发挥效果。

通过巧妙地运用 overflow-x 与 overflow-y,我们可以更精准地控制元素在水平和垂直方向上的溢出,为页面布局提供更灵活的选择。


🍚overflow 与滚动条

🍉滚动条显现的条件

滚动条的出现主要取决于以下两种情况:

  1. 使用 overflow 属性引起的滚动条:

    指定容器的 overflow 属性为 auto 或 scroll 时,当内容超出容器的尺寸限制,相应的滚动条就会出现。这不仅适用于自定义容器,也包括 HTML 元素本身自带的滚动条,例如 <html> 和 <textarea>。

    值得注意的是,默认情况下,滚动条来自 <html> 元素而不是 <body> 元素。同时,滚动条的存在会占用容器的可用宽度或高度。

  2. HTML 元素自带的滚动条:

    一些 HTML 元素,如 <html> 和 <textarea>,在内容超出尺寸时会自动显示滚动条。这是浏览器提供的默认行为,无需额外设置 overflow 属性。

获取滚动条高度的 JavaScript 代码示例如下:

let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

通过深入理解这两种情况,我们能够更好地处理页面滚动时的相关逻辑。


🍚定制 Webkit 内核浏览器的滚动条样式

Webkit 内核浏览器(如Chrome、Safari等)允许开发者通过以下属性自定义滚动条的样式:

  • ::-webkit-scrollbar — 整个滚动条.

  • ::-webkit-scrollbar-button — 滚动条上的按钮 (上下箭头).

  • ::-webkit-scrollbar-thumb — 滚动条上的滚动滑块.

  • ::-webkit-scrollbar-track — 滚动条轨道.

  • ::-webkit-scrollbar-track-piece — 滚动条没有滑块的轨道部分.

以下是一个自定义滚动条样式的示例代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8" />    <meta http-equiv="X-UA-Compatible" content="IE=edge" />    <meta name="viewport" content="width=device-width, initial-scale=1.0" />    <title>自定义滚动条</title>    <style>        body {            height: 1000px;        }        /* 整个滚动条 */        ::-webkit-scrollbar {            width: 12px;        }        /* 滚动条轨道 */        ::-webkit-scrollbar-track {            background-color: #ff7875;        }        /* 滚动条上的滚动滑块 */        ::-webkit-scrollbar-thumb {            background-color: #ffc069;            border-radius: 6px;        }    </style></head><body></body></html>

image.png

通过上述 CSS 样式,你可以定制整个滚动条、滚动条轨道和滚动滑块的外观。这种自定义能够为你的网页增色不少,使滚动体验更加独特。


🍚块格式化上下文(BFC)及其布局规则

块格式化上下文,英文缩写 BFC(Block Formatting Contexts),是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个独立的容器。

🍉BFC 布局规则

  • 内部的元素会在垂直方向,从顶部开始一个接一个地放置。

  • 元素垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻元素的 margin 会发生叠加。

  • 元素都是从最左边开始的,每个元素的 margin box 的左边,与包含块 border box 的左边(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。

  • BFC 的区域不会与 float box 叠加。

  • BFC 就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。

  • 计算 BFC 的高度时,浮动元素也参与计算。当 BFC 内部有浮动时,为了不影响外部元素的布局,BFC 计算高度时会包括浮动元素的高度。

🍉创建 BFC

下列方式会创建块格式化上下文:

  • 根元素(<html>)

  • 浮动元素(元素的 float 不是 none)

  • 绝对定位元素(元素的 position 为 absolute 或 fixed)

  • 行内块元素(元素的 display 为 inline-block)

  • 表格单元格(元素的 display 为 table-cell,HTML 表格单元格默认为该值)

  • 表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)

  • overflow 计算值不为 visible 的块元素

  • display 值为 flow-root 的元素

  • 弹性元素(display 为 flex 或 inline-flex 元素的直接子元素)

  • 网格元素(display 为 grid 或 inline-grid 元素的直接子元素)

通过理解 BFC 的概念和规则,可以更好地掌握页面布局,确保元素的渲染与定位符合预期。


🍚依赖于 overflow 的 CSS 属性

依赖于 overflow 的 CSS 属性是指在不将 overflow 属性值设置为 visible 时,相关属性才能发挥作用。其中,主要有两个属性:

🍉1. resize 属性

resize 属性用于设定一个元素是否可调整大小,具有以下几个取值:

  • none: 默认值,元素不能被用户缩放。

  • both: 允许用户在水平和垂直方向上调整元素的大小。

  • horizontal: 允许用户在水平方向上调整元素的大小。

  • vertical: 允许用户在垂直方向上调整元素的大小。

🍉2. text-overflow 属性

text-overflow 属性用于指定当文本溢出时的操作,具有以下几个取值:

  • clip: 默认值,在内容区域的极限处截断文本。

  • ellipsis: 用 ... 来表示被截断的文本。

  • <string>: 该字符串内容将会被添加在内容区域中,如果空间太小,该字符串也会被截断。

这些属性的生效与否取决于是否设置了容器的 overflow 属性,如果 overflow 的值为 visible,则这些属性可能不会按预期工作。通过合理使用这些属性,可以增强用户界面的交互性和美观性。


群贤毕至

访客