`
549265480
  • 浏览: 29706 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类

【正视CSS 06】构建我们自己的世界观!

 
阅读更多

前言

我们很小的时候什么都不知道,于是什么都会是别人对我们解释,也许是父母,也许是师长,但是随着年龄的增大,我们会逐步形成自己的世界观,并且当我们有小孩时候,他会问我们很多问题,我们会为他解答,那么我们的答案有何而来呢?

我们的答案来自我们自己的世界,来自我们自己形成的世界观!

我们初学CSS时候什么也不知道,于是我们从书上、博客上获取了很多知识,那么我们是不是也应该形成自己的世界观呢?我们碰到的问题是不是都可以用我们形成的世界观解释呢?

以上是我最近思考的问题,我觉得我们有必要形成自己的世界观了,形成世界观才是长大的标志,我形成的世界观可以不坚固,可以很小但是他必须存在,你们的也必须存在。

我们需要捍卫我们的世界观,我们需要建造我们的世界观,当我们的世界足够大,足够发达的时候,我们就会被称为高手啦,哇哈哈!!!

师尊,我们的页面是哪里来的?

在我们的浏览器中输入了一个url后,我们的服务器便会返回一堆字符串给我们,这个字符串就是传说中html。

从得到html字节开始,dom树便开始勾践了,遇到以下情况时候dom树的构建会被暂时阻塞:

① 网络卡

② 有未加载的脚本

③ 样式还未加载结束就遇到script

dom树是基础,dom树构建结束以后便根据样式与dom构建我们的渲染树了,这个时候样式文件便会阻塞我们的页面渲染。

PS:有些网页会把CSS写在页面里,而不是外部文件是为了避免页面闪烁,或者出现裸奔的局面。

当样式表加载结束后,渲染树也被构建好了,我们的页面就基本成型了。

渲染树一旦构建完成后,若是js脚本操作dom,就很可能引起页面回流,过多的回流是前端性能的杀手。

浏览器下载的顺序是由上到下的,渲染顺序也是由上到下的,下载样式表与渲染树形成是同步完成的

在渲染到页面某一部分时,上面的所有部分已经下载完成,并且渲染结束(一旦有js引起改变,边可能引起之前元素发生回流)

若是浏览器中有多个样式表,在所有样式表下载结束后浏览器又会将所有的样式表放到一起重新解析,会对之前的所有元素重新渲染,所以样式表过多也不是太好的。

PS:我们在做页面时候要注意页面的大小开始不宜过大,这样可以渲染的很快,以延迟加载的方式进行。

以上的逻辑可以分割如下:

① 构建dom树

② 构建render树

PS:渲染树,写英文为了防止以后被问到不知道是什么,包含颜色和属性的矩形块。

③ 布局render树,确定每个节点在屏幕上的确切坐标,然后开始绘制。

师尊,我们的页面如何布局呢?

以上为浏览器干的事情,他干完了就形成了我们所看到的页面,我们不需要过于关注,但是我们需要关注他的布局。

当渲染树被创建并添加到树中,他并没有位置和大小,计算他位置与大小的过程便是layout或者reflow。

每个渲染对象都有一个layout或者reflow方法,每个渲染对象须有布局的children的layout方法。

每个小变化都可能导致重新布局,浏览器使用一个dirty bit系统,一个渲染对象发生变化就会标记他以及他的children胃dirty,就会重新布局之,若是仅仅是其children有问题的话,就只会搞他的children。

全局回流(reflow)是需要避免的,因为其很耗性能,窗口改变会引起全局回流是可以理解的,但是改变整个浏览器字体大小的事情我们要少做。

渲染一个对象时候,这个元素的尺寸(高度不定)由其parent决定,他又会决定其children对象,children积累高度与margin、padding便为自己的尺寸,总之这个过程中浏览器很忙。

浏览器在渲染页面的时候很忙,所以你一个不小心哪里不如他意了他就会使坏的,所以不要一来就认为浏览器有bug,他忙自然关注不了太多。

PS:元素绘制的过程就是讲元素压入堆栈的过程,一个渲染对象的堆栈顺序为:背景色->背景图->border->children->outline。所以我们在写css时候规则可言参照之

CSS规定所有元素都应该具有盒模型(内容区、padding、border、margin),但是不同元素又有差异:

块级元素——块级盒模型

行内元素——生成一个或者多个inline boxes ,inline boxes组成line boxes确定其行高

none——不生成盒模型

师尊,什么是盒模型?

盒模型对我们后面的布局至关重要

浏览器要定位元素就必须知道其定位与尺寸,浏览器有三种方式布局:

① normal 根据自身和模型大小布局

② float 开始与普通流类似,然后脱离文档尽可能靠左或者靠右

③ absolute 与dom无关,根据top等决定位置,盒模型决定尺寸

以上三种无论如何都应该有其支点,这个支点就是传说中的containing block(包含快),也就是元素所处容器,再简单点就是依赖于其parent了(这块可能有误)

前面我们说过,每个元素皆遵循盒模型定理,所以各个元素可以简单看做一个个盒子,小盒子摆放依赖于大盒子。

① static/relative元素包含快为其父元素的内容区(出去padding部分)

② absolute包含快为最近定位元素(absolute/relative)

③ fixed为根元素(html)

④ float包含快为最近的块级元素

师尊,BFC/IFC又是什么?

而在盒子们布局时候为了减除彼此间的影响,便出现了block formatting context(块级上下文)这种布局特性,我理解为隔开盒子的隔板。

以下行为会产生bfc:

① float不为none

② overflow不为visible

③ display为table-cell,table-caption,inline-block中的任何一个

④ position不为relative和static时

在IE7以下没有BFC的概念,其为了解决的这个问题便提出了haslayout,两者之间可以画等号,但是haslayout bug较多,所以IE7以下有很多bug。

相邻的块级元素之间会发生margin collapse现象,便是外边距叠加行为。

这个原因便是相邻且在同一bfc时垂直外边距叠加行为。

垂直外边距便会叠加要解决的话,

有两种方案(不让其相邻,处在不同的bfc)可以为外部设置padding属性将彼此隔开,当然也可以使用overflow触发器bfc导致其处在不同的bfc,便不会造成叠加

师尊,块级元素又是什么?

有了以上知识后,我们再来看看块级元素

块级元素会独占一行,在normal中,其排布由其盒模型确定

PS:IE6盒模型解析有误,需要向下兼容需要处理

块级元素为布局大户,他与position的配合便是布局的瑞士军刀。

我这里对absolute布局的块级元素有两种理解:

1 absolute破坏了元素的高宽,并且将其剥离正常文档流,而形成了一个会飞的inline-block元素,其初始原点(top/left)与文档流中正常元素一致,但不会影响其它元素

2 absolute拥有了自己的bfc环境,自成一格与主流bfc分割开后,大小由盒模型确定,位置由top等确定

因为页面上可能出现多个absolute,所以彼此间的显示可能出现遮盖的现象,所以我们有了z-index遮盖家伙帮我们干事。

PS:我猜测,要让元素靠近我们其实是让其bfc靠近我们,而ie7以下不存在bfc,取而代之的是haslayout,所以在ie7以下便会有这样那样的bug,并且元素需要依赖其父元素的z-index,事实上便是子元素的haslayout需要依赖父元素的haslayout,他这样的真相便是,标准浏览器的bfc是各自独立的,ie7/6的haslayout是依赖于父元素的(猜测,欢迎拍砖)

行内元素

对于行内元素来说,每个字会形成一个匿名inline boxes,每个行内元素也会有一个inline boxes,一行的inline boxes便会形成一个line boxes,行框决定着这行的高度。

但是,我们这里的inline boxes干了什么事呢?

既然有块级格式上下文,便会有inline formatting contexts(行内格式化上下文)

ifc中,inline boxes都是水平排列的,起点是其containing block的头部,

PS:这块我有所欠缺,后面再补上

inline boxes会撑开line boxes,line boxes才给予了我们一行的高度,所以文字撑不开高度,是inline boxes撑开的高度,最后便是line-height决定高度(若是块级元素的高度未设定)。

float

我们知道float也会创建独立的bfc,这里我对他的理解也形成了两种:

1 float这家伙破坏了元素的高度,将之变为会左右移动的inline-block,虽然高度不存在了,但是宽度还在,所以其它文本会围绕之,块级元素(边框等)却会覆盖之。

2 float拥有了自己的bfc了,所以脱离了文档流,其margin属性与其它元素无关了(该理念还无法成型,暂时依赖第一个吧)

你的世界观形成了吗?

至此,我们便了解了css中的很多东西了,我们以此形成了世界观,于是我们今后需要在此世界中找到所有我们需要的答案,若是找不到就说明这个世界还不够发达,需要你在建,我们需要维护他,不让他崩毁,但他若是真的崩毁了也不要紧,因为你在形成的世界会无比的辉煌!!!

好了我们以此世界观来解释我们遇到的一些问题:

兼容性问题?

其实我们说的兼容性问题主要是IE7以下有问题,IE7以下因为不存在BFC而替用了haslayout,所以会有很多bug,针对bug,

高手会避免haslayout产生问题,而一般人会选择使用hack技术

为什么会高度坍塌?

因为float破坏了元素的inline boxes,而我们的inline boxes撑开了我们的块级元素,所以不动态指定高度的话,其实不会具有高度的。

如何解决高度坍塌,其原理是什么?

clear:我这里猜测清除浮动强制修复了行内元素的inline boxes,所以元素又能撑开块级元素了(但是我不能证明自己)

overflow:overflow触发了元素的bfc,让元素具有独立的bfc,所以其元素不用坍塌了!以上就是坑爹的!因为我自欺欺人都不行,何况忽悠你们,所以我们这里换个说法,这里我想换个思路,我们知道bfc其实就是格式化上下文,说白了他会包裹着我们的元素(我们在IE7中有时候用a标签模拟按钮,但是没戏,触发layout后便可以了,应该就是这个原理),若是我们来看看触发了bfc的元素,他本来都没了高度,但是我要包括你,我们不能包裹没有的东西吧,所以浏览器又被迫恢复了其inline boxes。

PS:我第一是确实一时间找不到还有什么问题可以让我自说自答了,二来是怕真的出现问题答不起,我好不容易搭建起了的世界就给崩毁了就太伤心啦,所以我暂时不在问自己问题了。

为什么我在js操作dom的时候风扇会不停的转?

因为操作dom后可能引起大量回流reflow,所以页面又要重新布局,这个过程很耗资源的。

为什么我们要指定图片的容器宽度

因为图片加载后,若是宽度不固定,会撑开他所在页面,以下部分会发生下层现象,也是一种reflow,(dom构建结束后才加载图片)

结语

我形成了自己的CSS时间观了,虽然他还很脆弱,但是我会慢慢建设他,让我的CSS世界坚固而美丽。

各位,若是你们觉得有什么不足以及错误,请提出哦。

分享到:
评论

相关推荐

    世界观方法论汇总.pdf

    【世界观与方法论汇总】 世界观是对世界的本质和根本看法,方法论则是依据世界观...以上这些世界观和方法论为我们提供了理解和解决问题的理论基础,帮助我们在面对复杂的世界时,能够做出更为科学和理性的判断与行动。

    正视自己,改变自己 (2).ppt

    标题为“正视自己,改变自己 (2).ppt”的文档,深入探讨了这一主题,并指出了一系列实现个人成长的方法和要点。在自我认知与自我提升的道路上,每一步都显得至关重要。 首先,自我认知是个人成长的基石。苏格拉底的...

    高考政治热点专题世界观、方法论对照表.pdf

    1. **世界是物质的**:这一世界观强调世界的本质是物质,指导我们在实践中要尊重自然规律,承认自然界的存在是人类活动的基础。 2. **物质决定意识**:这一观点认为客观存在决定了我们的思想和观念,因此,我们行动...

    人教版初中道德与法治《正视发展挑战》说课稿.pdf

    人教版初中道德与法治《正视发展挑战》说课稿.pdf

    哲学世界观方法论汇总.doc

    哲学世界观方法论是哲学的基本原理和思维方式,它们为我们理解和改造世界提供了根本的指导原则。以下是对这些原理的详细解析: 1. **辩证唯物论**: - **物质决定意识原理**:强调物质世界是现实的基础,意识是...

    小学三年级主题班会正视自己改变自己PPT教案.pptx

    为此,特设计了一份题为“正视自己 改变自己”的主题班会PPT教案,旨在引导孩子们建立正确自我认知,养成良好的学习习惯,塑造更加完善的自我。 教案的主要内容是围绕“认识自己”这一主题展开,这包括了自我认知的...

    2015届高考语文人生哲理篇写作素材正视自己

    在人生的旅途中,正视自己,意味着对自己的认知不仅仅停留在表象的层面,而是一种深入骨髓...每个人的生命中,都潜藏着无限的可能,只要我们愿意正视自己,相信自己的价值,那么每个人都能在自己的人生舞台上绽放光彩。

    6.1正视发展挑战(PPT36页).ppt

    6.1正视发展挑战(PPT36页).ppt

    如何树立正确的人生观.pptx

    - 世界观决定人生观,一个特定的世界观会引导形成相应的人生观,而人生观也会反过来影响世界观的形成和发展。具有积极人生观的人会积极接受和塑造正确的世界观。 2. **科学认识人的本质**: - 人的本质属性在于...

    《做自己论坛》观后感精选.doc

    通过《做自己论坛》的观后感,我们可以看到,做自己并不是一件孤立无援的事情,而是一种与个人成长、生活选择和价值追求紧密相连的过程。在这个过程中,我们需要勇敢地面对自己的不完美,积极地寻找属于自己的生活...

    基于新课程改革背景下构建高中化学高效课堂的策略研究.pdf

    【基于新课程改革背景下构建高中化学高效课堂的策略研究】 新课程改革的实施对高中化学教育提出了新的挑战和要求。高效课堂是指在限定时间内,通过有效的教学策略,充分调动学生学习的积极性,确保教学目标得以高效...

    调整心态__正视自己__停止抱怨__做生活的强者.pptx

    调整心态__正视自己__停止抱怨__做生活的强者.pptx

    正视自我评价和他人评价的差异.doc

    自我评价通常基于个人的内心感受、价值观和能力的认知,而他人评价则是外部世界对我们行为和特质的反馈。两者之间的不一致可能会导致个人在社会适应上的困扰,就像案例中的小张所经历的那样。 小张对自己持有高评价...

    九年级道德与法治6.1《正视发展挑战》教学设计.pdf

    九年级道德与法治6.1《正视发展挑战》教学设计.pdf

    湖南省张家界市慈利县赵家岗土家族乡七年级政治上册 3.1.1 正视亲子矛盾导学案 湘教版.doc

    从子女的角度来看,随着年龄的增长和思想的成熟,他们开始形成独立的世界观和价值观,对事物的看法和父母存在差异。同时,青少年期的个体通常更希望得到同龄人的认同,而父母可能因为缺乏共同语言而显得落伍。从父母...

    61正视发展挑战PPT.doc

    【标题】:“61正视发展挑战PPT.doc”是一个文档,通常用于呈现关于面对和解决发展中遇到问题的讨论或教学材料。这个标题暗示了内容可能涵盖了如何识别、理解和克服在个人、组织或社会层面的发展过程中所遇到的障碍...

    “互联网 教育”理念下中学生心理健康教育模式构建.pdf

    同时,线上课程还应具有良好的宣传和推广机制,帮助学生认识到心理健康的重要性,使其能够正视并改善自身的心理问题。 其次,建设线上心理健康咨询系统是满足学生个性化心理健康需求的重要措施。由于部分学生可能...

    七年级政治上册《正视自我,成就自我》课件1 教科版.ppt

    黄美廉博士的故事是正视自我、成就自我的生动体现,她没有沉溺于生理上的局限,而是选择关注自己所拥有的能力,这种积极向上的生活态度对于青少年来说具有极大的启发意义。 课程通过接力赛活动,让学生们写下自己的...

    《做自己论坛》观后感参考.doc

    在参加《做自己论坛》的过程中...通过这次论坛的启发和思考,我更加坚信,我们每个人都有无限的可能,只要我们敢于做自己,敢于追求自己的梦想,我们就能在这个多彩的世界里,找到属于自己的位置,活出一个精彩的人生。

    基于大数据的企业集团财务共享服务的构建探析.pdf

    在大数据时代背景下,企业集团财务共享服务的构建是一个复杂的课题。...企业必须正视构建过程中的各种挑战,通过合理的方法和技术手段,才能实现高效、安全的财务共享服务,从而增强企业的竞争力和适应性。

Global site tag (gtag.js) - Google Analytics