聊一聊CSS中的死循环

什么是死循环呢??比如一个<div>元素里面有一张vertical-align为bottom同时高度为192像素的图片,此时该<div>高度就是192像素,假设此时,插入一个子元素,高度设为100%,如果此时height:100%可以计算,则子元素应该也是192像素。但是啊但是,我们的父元素height值是auto,岂不是现在高度要从原来的192像素图片再加上插入的子元素变成384像素了,然后height:100%的子元素高度又要变成384像素,父元素高度又双倍……死循环了!!
实际这是错误的,大家不要被误导了!!

例子1:

这里写图片描述但是我们发现父元素的宽度只有图片加文字的距离。。这是为什么呢??

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

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

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

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

例子2:

CSS的padding属性值和margin属性值如果是百分比值,则无论是水平方向还是垂直方向都相对于父元素的宽度计算,这就埋下了一个看似会“死循环”的隐患,我们直接看一个例子
这里写图片描述
这里写图片描述因为在先开始的父元素渲染时,父元素的宽度就被固定为200px不再变化。当渲染到子元素的时候会用固定的200px减去17px的滚动条宽度来作为子元素的宽和高,所以都为183px

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/407740.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vh和Vw的简介和使用

Vw:视区宽度百分值 Vh:视区高度百分值 Vmin:取Vw或Vh中较小的那一个 Vmax:取Vw或Vh中较大的那一个 1.视区:是指浏览器内部的可视区域大小&#xff0c;即window.innerWidth/window.innerHeight大小&#xff0c;不包含任务栏标题栏以及底部工具栏的浏览器区域大小 2.场景之元…

江民杀毒软件KV网络版反病毒整体解决方案──金融行业

江民杀毒软件KV网络版反病毒整体解决方案──金融行业江民杀毒软件KV网络版反病毒整体解决方案──金融行业 金融行业是对信息化要求程度极高的行业。它需要一个高效、安全的网络环境来保证信息处理系统能正常有效运行。但随着信息化的应用面越来越广&#xff0c;信息安全…

2014/5/25 多校

A: 1 #include<iostream>2 #include<stdio.h>3 #include<string.h>4 #include<set>5 #define maxn 58*3000006 using namespace std;7 8 set<int>S;9 int Enum0,score[maxn],son[maxn][26],l[maxn];10 bool flag[maxn];//标记是否打星11 int to…

margin:auto实现绝对定位元素的水平垂直居中

1.绝对定位元素的居中实现的一般方法 兼容性不错的主流用法是&#xff1a; 但&#xff0c;这种方法有一个很明显的不足&#xff0c;就是需要提前知道元素的尺寸。否则margin负值的调整无法精确。此时&#xff0c;往往要借助JS获得。 CSS3的兴起&#xff0c;使得有了更好的…

MCSE2003学习之一

MCSE2003之2276&#xff1a;实现2003网络结构&#xff0c;网络主机TCP/IP协议的结构一&#xff1a;OSI模型计算机网络的形成促使网络协议的成熟。IBM在1974年提出了SNA网络协议二&#xff1a;分层模型的网络体系1&#xff1a;OSI/RM开放系统互联ApplicationPresentationSession…

:after伪类+content内容清除浮动

1.简单说说content内容生成 content内容生成就是通过content属性生成内容 例如下面这个简单的例子&#xff1a; 此段样式的作用是在每个h2标签的前面添加文字“我是额外文字”。 2.:after伪类content 清除浮动的影响 有点经验的同行应该知道&#xff0c;一般不含包裹属性…

Pro*c源程序中使用宿主结构保存查询结果

开发环境&#xff1a;VC6 XP Oracle10 Pro*c源程序如下&#xff1a; /*功能&#xff1a;演示了在pro*c源程序中使用结构体(宿主结构)来保存查询结果使用宿主结构的注意事项1. 结构成员的数据类型、顺序必须与内嵌SQL语句中列的数据类型和顺序匹配2. 宿主结构与PL/SQL的记录类…

Vue基础之Vue实例

构造器&#xff1a; 每个 Vue.js 应用都是通过构造函数 Vue 创建一个 Vue 的根实例 启动的&#xff1a; 在实例化 Vue 时&#xff0c;需要传入一个选项对象&#xff0c;它可以包含数据、模板、挂载元素、方法、生命周期钩子等选项。 可以通过扩展选项来扩展 Vue 构造器函数…

[HTML5]移动Web应用程序开发 HTML5篇 (四) 多媒体API

介绍本系列博客将主要介绍如今大红大紫的移动Web应用程序开发最重要的三个工具&#xff1a;HTML5&#xff0c;JavaScript&#xff0c; CSS3。本篇是HTML5介绍的第三篇&#xff0c;主要介绍HTML5的Canvas API。相关文章&#xff1a;移动Web应用程序开发 HTML5篇 (一) HTML5简介移…

Vue基础之Vue模板语法

插值&#xff1a; 文本&#xff1a; 数据绑定最常见的形式就是使用 “Mustache” 语法&#xff08;双大括号&#xff09;的文本插值&#xff0c;双大括号会将数据解析成纯文本 Mustache 标签将会被替代为对应数据对象上 msg 属性的值。无论何时&#xff0c;绑定的数据对象…

Vue基础之Class和Style绑定

既然v-bind可以动态绑定标签的属性&#xff0c;那么也可以用v-bind来处理class和style&#xff0c;只需要计算出表达式最终的字符串。不过&#xff0c;字符串拼接麻烦又易错。因此&#xff0c;在 v-bind 用于 class 和 style 时&#xff0c; Vue.js 专门增强了它。表达式的结果…

Silverlight学习笔记之使用TranslateTransform控制对象位置

在Canvas中,除了直接使用Canvas.Top与Canvas.Left属性之外,我们可以使用TextBlock.RenderTransform的TranslateTransform的X与Y属性来控制文本显示的位置。代码如下&#xff1a;<TextBlockText"Hello TranslateTransform"Canvas.Left"34" Canvas.Top&qu…

[Pro*c]滚动游标变量的使用

代码&#xff1a;xx.pc /* 功能&#xff1a;演示了Oracle滚动游标变量的使用定义游标时注意事项&#xff1a; 1. DECLARE CURSOR语句必须是使用游标的第一条语句 2. 游标名称是一个标识符&#xff0c;而不是宿主变量&#xff0c;其长度是可以任意的&#xff0c;但只有前31个字…

Vue基础之Vue条件渲染

v-if 在 Vue.js &#xff0c;我们使用 v-if 指令实现的功能 也可以用 v-else 添加一个 “else” 块 template-if 因为 v-if 是一个指令&#xff0c;需要将它添加到一个元素上。但是如果我们想切换多个元素呢&#xff1f;此时我们可以把一个<template>元素当做包装…

pro*C/C++支持c++开发实例

Pro*C/C同时支持C和C&#xff0c;但是当预编译包含C代码的PC源程序时&#xff0c;必须合理地设置相关的预编译选项。 代码&#xff1a;xx.pc /*功能&#xff1a;演示了Pro*C/C源程序生成C源文件说明&#xff1a;Pro*C/C支持C和C。当预编译包含C代码的PC源程序时&#xff0c;必…

用cocos2d-html5做的消除类游戏《英雄爱消除》(1)——系统主菜单

系统主菜单如下图所示&#xff1a; 首先&#xff0c;介绍下这个主菜单&#xff0c;它包含了一个动画logo以及一个按钮选项&#xff0c;动画logo每隔1秒钟切换一张图片&#xff0c;点击相应的按钮选项会切换不同的游戏场景。 下面看下这个界面的源码&#xff1a; /*** Power by …

一些实用却很少用到的css以及标签

1、p:first-letter p标签里的第一个字设置样式 p:first-letter { font-size:200%; color:#8A2BE2; }<p>My best friend is Mickey.</p>2、p:first-line p标签里的设置第一行样式 3、:not&#xff08;p&#xff09; 设置非 p元素的所有元素的背景色 4、<hr>…