css溢出机制是什么?css溢出的详细介绍(附实例)

本篇文章给大家带来的内容是关于css溢出机制是什么?css溢出的详细介绍(附实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

为什么需要深入学习CSS溢出机制?

在实际开发的过程中,内容溢出是经常见到的。如果不深入了解这个机制,你经常会碰到这样的问题:为什么这个元素没有受到祖先元素的overflow:hidden的影响?这里出现的滚动条是哪个元素的?如果消除这个滚动条?如何在指定的元素上增加滚动功能?
在这篇文章,我们将会从CSS标准出发,讨论CSS溢出机制的细节。

溢出

当一个盒子(block container box)的内容(子元素、孙子元素等后裔)超过盒子本身的大小的时候,就会出现溢出。这个时候CSS属性overflow决定如何处理溢出。这个css属性大家都知道,在这里不讨论了,在这里指出需要注意的几点:

overflow会影响所在元素的所有内容的裁剪、滚动,但是有一种情况例外:”It affects the clipping of all of the element’s content except any descendant elements (and their respective content and descendants) whose containing block is the viewport or an ancestor of the element.” 也就是说,overflow的所在元素必须是内容元素的直接或间接containing block,这时overflow属性才会影响这个内容元素。比如,一般来说,B的overflow会影响C,但是如果C是相对于viewport或者A定位的(比如使用了position:absolute),那么C的显示就不受B的裁剪、滚动的影响。

当需要滚动条的时候,滚动条会放在border与padding之间。父元素产生滚动条以后,它产生的containing block的尺寸会减少,以便给滚动条腾出空间。

立即学习“前端免费学习笔记(深入)”;

在和

上的overflow属性存在冒泡现象: “UAs must apply the ‘overflow’ property set on the root element to the viewport. When the root element is an HTML “HTML” element or an XHTML “html” element, and that element has an HTML “BODY” element or an XHTML “body” element as a child, user agents must instead apply the ‘overflow’ property from the first such child element to the viewport, if the value on the root element is ‘visible’. The ‘visible’ value when used for the viewport must be interpreted as ‘auto’. The element from which the value is propagated must have a used value for ‘overflow’ of ‘visible’. “

可以推断出:

一般来说只有元素才能拥有滚动条(更准确地说,只有产生block container box的元素才能拥有滚动条)。但visual viewport是个例外。它虽然不是一个元素,但是也可以拥有滚动条。如果在和

上都没有设置overflow属性而使用默认值visible(大部分场景都是这样),那么,visual viewport的overflow就是auto:当网页中有内容超出visual viewport时,visual viewport上会出现滚动条。

的最终overflow永远都是visible。也就是说,元素永远不可能拥有滚动条。

如果你想要为

设置非visible的overflow,需要先为设置一个非visible的值来冒泡,从而的overflow不会被冒泡。

小练习

小练习:利用以上原理,使visual viewport和

都拥有横、竖滚动条,总共4个滚动条。不能使用overflow: scroll(这样就太简单了)。
步骤:

使visual viewport和

的最终overflow值都为auto,从而可以出现滚动条。

触发visual viewport和

的溢出。通过【为内容设置一个更大的尺寸】来做到。

代码+注释:

      test      * {      padding: 0;      margin: 0;      box-sizing: border-box;    }    html {      /* 使html的尺寸始终与visual viewport相同(即使你缩放、调整浏览器窗口的大小),从而body可以设置一个比visual viewport还大的尺寸(110%)。      对于默认为block的元素可以省略width: 100%; */      width: 100%;      height: 100%;      /* 非visible的值冒泡到visual viewport上,使visual viewport可以出现滚动条 */      overflow: auto;      border: 15px solid red;    }    body {      /* 使得body可以出现滚动条 */      overflow: auto;      /* body溢出html,从而溢出initial containning block,从而溢出visual viewport,使得visual viewport出现滚动条。      当然,你也可以通过很多其他的方式来触发visual viewport的溢出,比如增大html元素,或者在body中弄一个position: absolute的p */      width: 110%;      height: 110%;      border: 15px solid green;    }    main {      /* main溢出body,使得body出现滚动条 */      width: 110%;      height: 110%;      border: 15px solid blue;    }    

结果:

3297945717-5b9f64e2211db_articlex.png

自己在chrome中打开以上代码,能更加清晰地看出是怎么做到的。

也可以通过absolute的方式来溢出initial containing block:

      test      * {      padding: 0;      margin: 0;      box-sizing: border-box;    }    html {      /* 使html的尺寸始终与visual viewport相同(即使你缩放、调整浏览器窗口的大小),从而body可以设置一个比visual viewport还大的尺寸(110%)。      对于默认为block的元素可以省略width: 100%; */      width: 100%;      height: 100%;      /* 非visible的值冒泡到visual viewport上,使visual viewport可以出现滚动条 */      overflow: auto;      border: 15px solid red;    }    body {      /* 使得body可以出现滚动条 */      overflow: auto;      /* 为body设置一个尺寸,从而main可以设置一个比body还大的尺寸(110%)。      对于默认为block的元素可以省略width: 100%; */      height: 100%;      border: 15px solid green;    }    main {      /* main溢出body,使得body出现滚动条 */      width: 110%;      height: 110%;      border: 15px solid blue;    }    .abs {      /* 通过absolute的方式来溢出initial containing block,从而溢出viewport */      position: absolute;      width: 100px;      height: 100px;      right: -100px;      bottom: -100px;      border: 15px solid blueviolet;    }    

结果:

3520967202-5b9f669ba4779_articlex.png

自己在chrome中打开以上代码,能更加清晰地看出是怎么做到的。

如何看出某个滚动条是属于哪个元素的?

通过Chrome DevTools就可以看出滚动条的所属元素。
前面已经说过,滚动条的位置在元素的border与padding之间。当你使用Chrome DevTools选中某个元素,发现滚动条恰好在高亮区域(border)内部时,滚动条就属于当前元素。

801048111-5b9fb370c26dd_articlex.png

要判断滚动条是否属于visual viewport,首先先将右边、下边的滚动条分别滚动到最下、最右(这一步很重要,它保证没有内容藏在滚动条下面)。然后,Ctrl+Shift+C选择右边或下边的滚动条,如果高亮的区域不包含这个滚动条,就说明这个滚动条不属于任何元素,也就是属于visual viewport。

4216250203-5b9fb8504948c_articlex.png

以上就是css溢出机制是什么?css溢出的详细介绍(附实例)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1611854.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 02:36:09
下一篇 2025年12月24日 02:36:26

相关推荐

  • CSS虚线样式的制作方法及虚线样式的运用实例

    在页面布局时,为了呈现一定的效果,经常需要使用css虚线样式,但是很多人新手对css虚线样式还比较陌生,这篇文章就和大家讲讲,如何使用cssborder属性制作虚线样式,以及css虚线样式的一些运用实例。比如:css虚线边框的运用,css虚线下边框的运用,一条虚线的运用等等。有需要的小伙伴可以参考一…

    2025年12月24日 好文分享
    000
  • CSS怎么实现底部对齐?css实现底部对齐的三种方法

    本篇文章给大家带来的内容是关于css怎么实现底部对齐?css实现底部对齐的三种方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 CSS实现底部对齐效果 因公司业务要求需要实现如下图中红色区域的效果: 效果说明: 1、红色区域数据需要倒排(即从底部开始数,数字为1、2、3、4、5)…

    2025年12月24日
    000
  • 深入理解CSS中 !important 的使用方法

    这篇文章围绕css样式的优先级展开,主要讲了css中!important的使用方法,正在学习这个知识的朋友可以看看,希望对你有帮助! !important为开发者提供了一个增加样式权重的方法。应当注意的是!important是对整条样式的声明,包括这个样式的属性和属性值 a{color:green!…

    好文分享 2025年12月24日
    000
  • css如何设置透明度?设置透明度的两种方法(代码实例)

    在前端页面开发布局的时候,为了给用户呈现不同的效果,经常需要设置透明度,那么css是怎样设置透明度的?本章给大家介绍用css设置透明度的两种方法(代码实例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 推荐手册:css在线手册 一、css rgba()设置颜色透明度 语法: rg…

    好文分享 2025年12月24日
    000
  • CSS如何实现图片等比例缩放不变形(代码实例)

     在工作中经常需要对图片进行缩放,但有些缩放会让图片变形,所以今天就给大家介绍css如何实现图片等比例缩放不变形,正在学习css的小伙伴赶紧过来看看吧! 下面一段代码给大家介绍CSS实现图片等比例缩小不变形 ,具体代码如下所示: @@##@@ img { /*等宽缩小不变形*/ /*width: 1…

    好文分享 2025年12月24日
    000
  • 分享7种实现CSS垂直居中的技巧(附代码)

    网页css的垂直居中需求始终没有停过,而其困难度也始终没有让人轻松过,经过了每位开发先烈的研究后,据说css的垂直居中技巧已达到近十种之多,但始终鲜为人知,部分公司甚至将css的垂直居中技巧当成面试题,其重要性可见一斑,今天就带着大家了解一下css的垂直居中的多种方式吧。 1、Line-height…

    好文分享 2025年12月24日
    000
  • 分享四种方式将CSS样式导入到HTML中

    在进行页面布局时,必然会用到css和html,因为html是页面的主体内容部分,css是页面的表现,通俗的讲,css是给html进行化妆的。那css的样式怎么在html中实现呢?这时候就需要在html中引入css文件,今天就和大家聊聊如何将css导入html中,有需要的可以参考一下。 将CSS导入H…

    2025年12月24日 好文分享
    000
  • css清理浮动有什么作用?清理浮动的方法(介绍)

    在前端开发过程中,我们经常会使用到浮动(float),这个我们即爱又恨的属性。爱,是因为通过浮动,我们能很方便地进行布局; 恨,是因为浮动之后遗留下来太多的问题需要解决。本章给大家介绍css为何要清除浮动,以及如何清除浮动;让大家了解元素进行浮动之后会出现的问题,以及css消除浮动的几种方法。有一定…

    2025年12月24日
    000
  • 在html中引入CSS文件时,link和@import有什么区别?

    之前介绍了如何在html中引入css文件,将css导入html的方式有四种,分别是行内式,嵌入式,外部样式。外部样式又分为import导入式,link链接式。同样是外部样式,那link和@import的区别在哪里?想知道的小伙伴继续往下看吧。 一、引入方式的区别 link链接式: import导入式…

    2025年12月24日
    000
  • 什么是css模块化?css模块化的实现方法

    本篇文章给大家带来的内容是关于什么是css模块化?css模块化的实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 CSS 模块化 CSS(Cascading Style Sheets),从诞生之初就决定了它无法编程,甚至连解释性语言都算不上,只能作为一种简单的层叠样式表,对 …

    好文分享 2025年12月24日
    000
  • css中什么是伪类选择器?伪类选择器的简要介绍

    本章给大家带来css中什么是伪类选择器?伪类选择器的简要介绍。让大家可以了解在css中伪类选择器的作用,css伪类选择器有哪些分类等知识。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。(相关推荐:《css教程》) 一、伪类选择器介绍 伪类选择器(简称:伪类)通过冒号来定义,它定义了元…

    2025年12月24日
    000
  • 关于前端学习之css

     学完CSS+Div的视频,感觉讲的挺清晰的,不看不知道,一看吓一跳,原来CSS可以为网页增色不少呢! 一、概述 1、格式:          二、css 属性 1、文字属性 (1)font-style:italic(斜体)normal(正常); (2)font-weight:bold/bolder…

    2025年12月24日
    000
  • css中background-attachment属性如何使用?(代码实例)

    本章给大家介绍css中background-attachment属性如何使用?(代码实例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 css中background-attachment属性的使用前提是先定义了background-image属性,然后用background-at…

    2025年12月24日
    000
  • CSS中常见的6种文本样式(总结)

    css文本样式是相对于内容进行的样式修饰。由于在层叠关系中,内容要高于背景。所以文本样式相对而言更加重要。有些人对文本和字体样式之间的不同不太了解,简单地讲,文本是内容,而字体则用于显示这个内容。本章将详细介绍css中常见的6种文本样式(总结),让大家可以在平时的网页开发中可以使用。有一定的参考价值…

    2025年12月24日 好文分享
    000
  • CSS如何使用图像拼合技术?

    本章给大家介绍css如何使用图像拼合技术?有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、图像拼合 图像拼合就是单个图像的集合。 有许多图像的网页可能需要很长的时间来加载和生成多个服务器的请求。 使用图像拼合会降低服务器的请求数量,并节省带宽。 立即学习“前端免费学习笔记(深入)…

    2025年12月24日
    000
  • CSS的 Tooltip(提示工具)介绍(详解)

    本章给大家带来css的 tooltip(提示工具)介绍(详解)。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 提示工具在鼠标移动到指定元素后触发,可以在四个方位显示:头部显示、右边显示、左边显示、底部显示。 一、基础提示框(Tooltip) 提示框在鼠标移动到指定元素上显示: /*…

    2025年12月24日
    000
  • CSS中什么是Dimension(尺寸)?(代码实例)

    本章给大家介绍css中什么是dimension(尺寸)?(代码实例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、简介 CSS 尺寸 (Dimension) 属性允许你控制元素的高度和宽度。同样,它允许你增加行间距。 二、Dimension(尺寸)属性值 立即学习“前端免费学…

    2025年12月24日
    000
  • 图文详解CSS中!important 的使用方法

    在工作中经常会遇到因为选择器优先级导致的样式无法呈现,这个时候就要用到一个特殊的css属性,就是!important。!important使属性值有最高优先级,可以用它来设置想要的样式。那接下来就和大家讲讲css中!important 怎么使用,有需要的小伙伴过来看看吧。 一、CSS !import…

    2025年12月24日
    000
  • CSS中Table(表格)样式是如何设置?(代码实例)

    本章给大家介绍css中table(表格)样式是如何设置?(代码实例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、表格边框 border 指定CSS表格边框,使用border属性。 下面的例子指定了一个表格的Th和TD元素的黑色边框: table, th, td{border…

    2025年12月24日
    000
  • CSS什么是id 和 Class选择器?id 和 Class选择器的用法(实例)

    本章给大家介绍css什么是id 和 class选择器?id 和 class选择器的用法(实例)。有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 一、id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML元素以id属性来设置id选择器,CSS 中 …

    2025年12月24日
    000

发表回复

登录后才能评论
关注微信