首页 > 其他分享 >WebKit网页布局实现(0):基本概念及标准篇

WebKit网页布局实现(0):基本概念及标准篇

时间:2023-04-09 18:34:33浏览次数:49  
标签:布局 网页 level 元素 WebKit inline 基本概念 block 页面

作为一个广受好评的浏览器引擎,其网页布局的质量(包括速度、效率、符合标准度等)往往是其关键,那么WebKit究竟是如何布局网页上的所有元素(包括滚动条、文字、图片、按钮、下拉框等)呢?其主要数据结构及流程都包括哪些呢?其布局的基本概念及标准都有哪些呢?下面分别介绍WebKit对其实现及运用。我们首先从关于布局的基本概念及标准的认识开始。

CSS布局相关标准介绍

其实我们对要素的布局都有不同程度的了解如我们使用Office时经常使用对一段文字的居中、靠左等操作,复杂一点有设置编号及文字与图片的环绕对应关系等,其实布局的关键在于确定页面元素的显示位置及大小,而页面中主要包括有文字、图片、按钮等页面元素,为了有效的组织布局这些页面元素,一些专家学者经过多年的摸索,总结并设计了布局这些元素所涉及的一些规则及标准,这就是CSS标准。

这里安利一下:

  1. css过去及未来展望—分析css演进及排版布局的考量

  2. css布局优化:布局计算限制— contain/will-change/合成层

Visual formatting model details对其主要规则进行过具体描述,通过下面相关总结和汇总希望能对其主要要点有一定的认识与理解。

要在一块指定的画布(或窗口)上布局一些要素,往往需要按从上到下或从左到右(或从右到左)的规则来布局这些元素,而有些元素则可以包含其他元素,当作布局容器来使用。其中浏览网页的原生窗口就可看作一个布局容器的根。

布局页面的基本概念

由于页面内容的大小可能超过原生窗口提供的显示区域的大小,CSS中称页面上当前显示出来的区域为ViewPort,这个ViewPort相对页面的原始位置可通过滚动条来调整;
CSS标准中定义了html中的一些标签所对应的元素可当成容器使用的,以建立坐标定位所包含的元素,如:

  • p、div 等,CSS中称这样的元素为block-level元素,相邻的block-level元素往往从上到下垂直排列

    • block-level元素所包含的元素往往要么全为block-level元素要么全为inline-level元素,在一定条件下布局时可能会产生匿名block-level元素;

    • CSS中将布局block-level元素的过程称为block-flow

  • i、a、b、span等标签及text node对应的元素则缺省为inline-level元素,inline-level元素不能用来定位其他元素,但可以包含其他同为inline-level元素,相邻的inline-level元素,往往按照从左到右或从右到左的水平方向排列

    • CSS将布局inline-level相关元素的过程称为line-flow

  • frame、image、object、embed、form等对应的元素称为replaced元素,它表示这些元素的内部布局不由CSS来定义,而由浏览器来实现,而这些元素从外部来看相当于block-level元素,但可通过设置display:inline将其从外部看设为inline-level元素;

不同的html标签元素可以通过display:inline、display:block、display:inline-block等方式来调整其缺省block-level或inline-level属性;

  • 每一个元素必须对应一个布局容器称之为Containing Block,只有block-level元素可以成为Containing Block

  • 一个Containing Block元素究竟包含哪些子元素或者某一元素的Containing Block元素究竟是谁,由其自身position属性及其在文档层次结构中所处的位置所确定,下一节会描述相关内容;
    每一个元素至少包含一个Box模型即由margin、border、padding、content width/height等属性所能描述的矩形区域;而这块区域相对于布局容器的坐标top、left,往往由布局容器按照block-flow、inline-flow等规则布局该元素时确定

如何确定页面元素显示位置

一个html标签元素的position属性可以设置为static、relative、fixed、absolute、inherit等,所有元素缺省为static,其Containing Block布局容器元素为最近的祖先block-level元素,其属性left、top、right、bottom不起作用

  • position属性为relative的元素同static属性元素一样,但其left、top等属性可以有效,其坐标相对于布局容器而言;

  • position属性为absolute的元素的布局容器元素是最近的除了其属性不为static的祖先block-level元素

  • position属性为fiexed的元素的布局容器元素是往往是根布局容器,但其定位坐标需要根据ViewPort的位置作相应调整

一旦确定了其Containing Block布局容器,同时结合其自身的block-level或inline-level特性,布局时根据block flow和inline flow规则就可确定其起始位置,其中inline-level元素可在其布局容器提供的区域内自动换行;而block-level元素可在其布局容器提供的区域内自动换一个段落。

另外float属性为left或right元素较为特殊,则不遵守上面的规则,该元素让在其高度范围内的其他元素始终在其左边或右边。

如何确定页面元素大小

对于有定义其宽高的页面元素,则按照其定义的宽高来确定其大小,而对于象text node这样的inline-level则需要结合其字体大小及文字的多少等来确定其对应的宽高;如果页面元素所确定的宽高超过了布局容器Containing Block所能提供的宽高,同时其overflow属性为visible或auto,则会提供滚动条来保证可以显示其所有内容。

除非定义了页面元素的宽高,一般说来页面元素的宽高是在布局的时候通过相关计算得出来的。

如何理解z-index的使用

页面元素z-index属性的出现,引入了页面元素三维布局的思路,提出分层的概念,具有同一z-index属性的所有元素按照上面提到的二维布局方式(确定其位置及大小)来布局,而不同z-index所代表的层的元素有可能被其他层的元素所覆盖。每一个页面元素只能处在一个z-index所对应的层中,所有元素缺省z-index为0。


参考资源
CSS Wiki
CSS Specification
CSS basic box model
Visual formatting model details

 

转载来源:

http://ourpgh.blogspot.com/2008/11/webkit.html

 


转载本站文章《WebKit网页布局实现(0):基本概念及标准篇》,
请注明出处:https://www.zhoulujun.cn/html/webfront/browser/webkit/2021_0422_8633.html

标签:布局,网页,level,元素,WebKit,inline,基本概念,block,页面
From: https://www.cnblogs.com/zhoulujun/p/17300753.html

相关文章

  • WebKit三件套(1):WebKit之WebCore篇
    导语:Chrome浏览器的代码量其实是非常庞大的,要想对其有深入的理解,仅仅编译编译调试调试,是很难深入下去的。让我们还是从其主要部分如多进程管理通信、WebKit、V8、Skia、WinHttp、Sanbox等着手分析其主要流程及数据结构,或许能达到事半功倍的效果,而WebKit是其中非常重要的一部分,是C......
  • 电影网页设计模板代码 大学生电影网站设计与制作
    作品介绍大学生电影网站设计与制作html网页成品采用DIVCSS布局制作,主题为我的喜欢的电影榜单,作品包括1个首页和6个电影介绍子页面,共7个页面。整体设置了网页背景图片,首页顶部使用CSS3制作了LOGO鼠标经过放大效果,下方为6部电影封面图,点击可以进入电影介绍的子页面。每个电影子页面......
  • 【调试】kprobes(一)基本概念
    简介开发人员在内核或者模块的调试过程中,往往会需要要知道其中的一些函数有无被调用、何时被调用、执行是否正确以及函数的入参和返回值是什么等等。比较简单的做法是在内核代码对应的函数中添加日志打印信息,但这种方式往往需要重新编译内核或模块,重新启动设备之类的,操作较为复......
  • PHP代码实现网页缓存
    PHP程序在抵抗大流量访问的时候动态网站往往都是难以招架,所以要引入缓存机制,一般情况下有两种类型缓存:一、文件缓存二、数据查询结果缓存,使用内存来实现高速缓存本例主要使用文件缓存,主要原理使用缓存函数来存储网页显示结果,如果在规定时间里再次调用则可以加载缓存文件。类代码://......
  • 网页调用打印机(Lodop)使用记录
    最近项目中有打印标签的需要,使用Lodop实现。Lodop官网地址:https://www.lodop.net/index.html这是一个收费控件,在打印时会出现试用字符,但是可以通过一定方式避免。项目中需要打印的机器都是windows,因此安装CLodop即可。安装之后在web页面上就可以引入对应js:<!--需要安装CLod......
  • 集合的基本概念
    一、集合的概念1、集合和元素的概念康托尔定义:人们无意中或思想中将一些确定的、彼此完全不同的客体的总和,这些客体叫做集合中的元素。        互不相同的、确定的对象的全体称为集合,简称集。这些对象作为集合的成员,称为集合的元素。常用大写字母表示集合,用小写......
  • 微信公众号开发--获取网页授权并自定义菜单点击获得openid跳转
    之前做了个自定义菜单的click事件,但是订阅号升级为服务号,相应的有了网页的基础授权(需要认证的服务号)其中使用到了自定义菜单接口:http://mp.weixin.qq.com/wiki/13/43de8269be54a0a6f64413e4dfa94f39.html网页授权获取用户基本信息接口:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0......
  • 网页一键分享按钮HTML代码
    在网页中加入以下代码可以实现网页的一键分享:<!DOCTYPEhtml><html><head><METAhttp-equiv="content-type"content="text/html;charset="UTF-8"><title>Inserttitlehere</title></head><body><divclass......
  • C++ MFC中嵌入web网页控件(WebBrowser、WebView2、CEF3)
    1、简介WebBrowser控件最常见的用途之一是向应用程序添加Internet浏览功能。使用IWebBrowser2接口,可以浏览到本地文件系统、网络或万维网上的任何位置。可以使用IWebBrowser2::Navigate方法告知控件要浏览到哪个位置。第一个参数是包含位置名称的字符串。要浏览到本地文件系......
  • k8s入门篇-Kubernetes的基本概念和术语
    1.k8s基本概念概述Kubernetes中的大部分概念如Node、Pod、ReplicationController、Service等都可以被看作一种资源对象,几乎所有资源对象都可以通过Kubernetes提供的kubectl工具(或者API编程调用)执行增、删、改、查等操作并将其保存在etcd中持久化存储。从这个角度来看,Kubernetes......