返回顶部
首页 > 资讯 > 前端开发 > VUE >CSS中的死循环是什么
  • 846
分享到

CSS中的死循环是什么

2024-04-02 19:04:59 846人浏览 独家记忆
摘要

今天小编给大家分享一下CSS中的死循环是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

今天小编给大家分享一下CSS中的死循环是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

一、从为何height:100%无效的回答说起

大家应该都知道,如果元素没有格式化的高度值,子元素的height百分比高度是不起作用的,常见的就是height:100%无效,而宽度就没有此问题,所以,新人经常会提出的一个问题是:“为何我的div设置了height:100%却没有效果?”

不知道大家有没有思考过这样一个问题。

然后,有同行就提出了这么一个看似很合理的解释,就是,“假如父元素height:auto且没有其他格式化高度,子元素支持height:100%,则很可能会出现高度死循环”。

什么意思呢?

例如:一个<div>元素里面有一张vertical-alignbottom同时高度为192像素的图片,此时,该<div>高度就是192像素,假设此时,插入一个子元素,高度设为100%,如果此时height:100%可以计算,则子元素应该也是192像素。但是啊但是,我们的父元素height值是auto,岂不是现在高度要从原来的192像素变成384像素,然后height:100%的子元素高度又要变成384像素,父元素高度又双倍&hellip;&hellip;死循环了!

实际上,这种解释是错误的,大家千万别被误导。

证据就是宽度也存在类似场景,但并没有死循环。例如下面这个例子,父元素采用“最大宽度”,然后有个inline-block子元素宽度100%:

<div class="box">
  <img src="1.jpg">
  <span class="text">红色背景是父级</span>
</div>
.box {
  display: inline-block;
  white-space: nowrap;
  background-color: #cd0000;
}
.text {
  display: inline-block;
  width: 100%;
  background-color: #34538b;
  color: #fff;
}

如果按照上面“高度死循环”的解释,这里也应该“宽度死循环”,因为后面的inline-block元素按照我们的理解应该会让父元素的宽度进一步变大。但是,实际上,并没有,宽度范围可能超出你的预期:

CSS中的死循环是什么

父元素的宽度就是图片加文字内容的宽度之和。

眼见为实,您可以狠狠地点击这里:宽度死循环不存在demo

二、为什么不会死循环

这需要了解浏览器渲染的基本原理。首先,先下载文档内容,加载头部的样式资源(如果有),然后按照从上而下,自外而内的顺序渲染DOM内容。套用本例就是,先渲染父元素,后渲染子元素,是有个先后顺序的。因此当渲染到父元素的时候,子元素的width:100%并没有渲染,所以,宽度就是图片加文字内容的宽度;等渲染到文字这个子元素的时候,父元素宽度已经固定,此时的width:100%就是已经固定好的父元素的宽度,宽度不够怎么办?溢出就好了,overflow属性就是为此而生的。

同样的道理,如果height支持任意元素100%,也是不会死循环的,和宽度类似,静态渲染,一次到位。

这就引申出另外一个问题,父选择器,大家有没有想过如果CSS支持了父选择器,会有什么后果?

后果之一,就是原先的一次渲染被破坏,子元素能够影响父元素的渲染,于是乎,“死循环”开始了,页面渲染会出现各种各样的死循环,现有的很多CSS规则会被颠覆,无限宽度反复渲染等问题就会出现。这就是为什么父选择器呼声那么高,却迟迟不支持的原因。

其实,在CSS中,不会死循环的例子还有很多,我再举一个很有意思的!

三、CSS padding百分比、滚动条与“死循环”

CSS的padding属性值如果是百分比值,则无论是水平方向还是垂直方向都相对于宽度计算,这就埋下了一个看似会“死循环”的隐患,我们直接看一个例子。

一个div有如下CSS:

.box {
  width: 200px;
  height: 199px;
  overflow: auto;
}
.child {
  padding: 50%;
}

容器200px199px,子元素padding:50%,则此时,子元素的宽高应该都是200px,但是,如果高度是200px,父元素就会出现滚动条,因为父元素高度199px不足200px,但是,父元素出现滚动条,父元素的content box的宽度就要减去滚动条的宽度,例如window 7下都是17像素,此时,子元素自然宽高也要随之降低,应该是183px,但是,变成183px后高度又小于了父元素的199px,滚动条又会消失,子元素宽度又回到200px,于是,一个看上去的死循环开始了&hellip;&hellip;

但是,实际上,最终渲染是一次性的,如果父子元素分别给个背景色,则结果如下:
CSS中的死循环是什么

大家就见到了上图所示的“神奇的”一幕,也就是padding:50%元素的宽度居然不是父元素的content box宽度。

CSS中的死循环是什么

结果,父元素宽度还是原来的200px,但是,子元素却是183px,右侧和下方都留了看上去不能理解的空白间距。

眼见为实,您可以狠狠地点击这里:CSS padding百分比值“死循环”不存在demo

这就是CSS的一次渲染机制造成的效果。

这个例子也进一步证明了:CSS中,如果单纯是静态渲染,是没有死循环这种说说法的!

再如我们CSS :hover某元素,让其到远离鼠标的地方,按照道理,远离了,应该不执行:hover渲染要回到原地,实际上,远离了就远离,不会不断执行渲染的。

四、CSS中的无限循环

实际上,CSS中是有与“死循环”相关的关键字的,叫做infinite,英菲尼迪,无限的意思,出现在css3 animation中,可以让动画无限循环,但是,“无限循环”并不等同于“死循环”。

以上就是“CSS中的死循环是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网VUE频道。

--结束END--

本文标题: CSS中的死循环是什么

本文链接: https://lsjlt.com/news/93194.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • CSS中的死循环是什么
    今天小编给大家分享一下CSS中的死循环是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。...
    99+
    2024-04-02
  • web前端中死循环指的是什么
    这篇文章主要介绍了web前端中死循环指的是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇web前端中死循环指的是什么文章都会有所收获,下面我们一起来看看吧。死循环是指无法靠自身的控制终止的循环,是单一程序在...
    99+
    2023-07-05
  • Java中的HashMap为什么会产生死循环
    目录前置知识死循环执行步骤1死循环执行步骤2死循环执行步骤3解决方案总结前言: HashMap 死循环是一个比较常见、比较经典的问题,在日常的面试中出现的频率比较高,所以接下来咱们通...
    99+
    2024-04-02
  • node.js中的事件循环是什么
    这篇文章主要介绍“node.js中的事件循环是什么”,在日常操作中,相信很多人在node.js中的事件循环是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”node.js中...
    99+
    2024-04-02
  • python中for循环指的是什么
    这篇文章将为大家详细讲解有关python中for循环指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫...
    99+
    2023-06-14
  • vue computed多次访问会有死循环原理是什么
    今天小编给大家分享一下vue computed多次访问会有死循环原理是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。如下...
    99+
    2023-07-05
  • sql中foreach循环卡死怎么解决
    在SQL中并没有类似于编程语言中的foreach循环语法。通常在SQL中会使用游标(cursor)来实现类似于遍历数据的功能。如果你...
    99+
    2024-04-18
    sql
  • html中什么是do while循环
    这篇文章将为大家详细讲解有关html中什么是do while循环,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。     do/while循环 &n...
    99+
    2024-04-02
  • python中什么是循环引用
    这篇文章将为大家详细讲解有关python中什么是循环引用,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python的数据类型有哪些python的数据类型:1. 数字类型,包括int(整型)、...
    99+
    2023-06-14
  • Python3中while循环的格式是什么
    这篇“Python3中while循环的格式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这...
    99+
    2024-04-02
  • php中while循环的作用是什么
    php中while循环的作用是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合...
    99+
    2023-06-14
  • php中foreach循环的原理是什么
    这篇文章将为大家详细讲解有关php中foreach循环的原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环...
    99+
    2023-06-14
  • oracle中for循环的用法是什么
    在Oracle中,可以使用以下两种方式进行循环: 使用FOR循环:FOR循环是一种循环语句,通过指定循环变量的初始值、结束值和步...
    99+
    2024-04-09
    oracle
  • java中for循环的作用是什么
    在 Java 中,for 循环用于重复执行特定的代码块,其作用包括: 迭代数组或集合:通过 for 循环可以遍历数组、集合或其他可...
    99+
    2024-03-13
    java
  • 301跳转死循环怎么办
    301跳转死循环的示例分析:nginx配置代码如下:server{listen 80;server yisu.com;proxy_set_header Host $host;proxy_set_header X-Real-IP $remot...
    99+
    2024-04-02
  • php中for循环中作用是什么
    这篇文章给大家介绍php中for循环中作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主流与非主流的数据库。4、面向对象编程:P...
    99+
    2023-06-14
  • Python的循环基础是什么
    本篇文章为大家展示了Python的循环基础是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、概述Python中的循环语句有 for 和 while。Python循环语句的控制结构图如下所示:二...
    99+
    2023-06-02
  • Node的事件循环是什么
    这篇文章主要介绍“Node的事件循环是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node的事件循环是什么”文章能帮助大家解决问题。一、什么是事件循环一句话:事件循环是Nodejs处理异步操作...
    99+
    2023-07-05
  • Node.js中事件循环的概念是什么
    这篇文章主要讲解了“Node.js中事件循环的概念是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Node.js中事件循环的概念是什么”吧!什么是事件循...
    99+
    2024-04-02
  • Node.js中事件循环的机制是什么
    本篇内容介绍了“Node.js中事件循环的机制是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!先看一个demo:setTimeout((...
    99+
    2023-06-17
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作