webkit内核源代码导读5: CSS如何作用到Render树上

本文探讨了WebKit内核中CSS如何与Render树结合,重点关注RenderStyle和StyleResolver。StyleResolver从CSS中生成RenderStyle,并通过styleForElement进行元素的选择和匹配。RuleSet代表CSS规则,其来源包括默认和作者定义。Element的RuleSet来源于内联CSS,而AuthorStyle来源于style元素和link元素引入的CSS。当CSS或页面状态改变时,Document会触发更新流程。
摘要由CSDN通过智能技术生成

本章的目的,主要说明CSS相关的类和关系,还不能做到对其过程和原理的探究。后期我们慢慢会涉及。


CSS的主要作用,是修饰DOM的外观和排版的,它必须和Render--DOM的渲染对象结合起来。

在Render中,有一个重要的对象,是RenderStyle。这个RenderStyle是从CSS中创建出来的。


RenderStyle和StyleResolver

RenderStyle保存了Render树绘制所需要的全部信息。至于Render树如何使用Render,这里我们不仔细探索,我想重点探索一下StyleResolver。


StyleResolver将CSS的内容转换为RenderStyle,有几个函数是重点关注的:

    PassRefPtr<RenderStyle> styleForElement(Element*, RenderStyle* parentStyle = 0, StyleSharingBehavior = AllowStyleSharing,
        RuleMatchingBehavior = MatchAllRules, RenderRegion* regionForStyling = 0); 
     ......

    PassRefPtr<RenderStyle> pseudoStyleForElement(PseudoId, Element*, RenderStyle* parentStyle);

    PassRefPtr<RenderStyle> styleForPage(int pageIndex);
    PassRefPtr<RenderStyle> defaultStyleForElement();
    PassRefPtr<RenderStyle> styleForText(Text*);

    static PassRefPtr<RenderStyle> styleForDocument(Document*, CSSFontSelector* = 0); 
这里面几个 styleForXXX函数,是产生RenderStyle的重要地方。


StyleResolver的关系

StyleResolver是Document的子对象。Document负责创建它,别的数据想要使用StyleResolver,需要调用 document()->styleResolver();<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值