多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > 綜合技術 > chromium CSS淺析(一) 默認htmlCss的形成邏輯(chromium39)

chromium CSS淺析(一) 默認htmlCss的形成邏輯(chromium39)

來源:程序員人生   發(fā)布時間:2015-03-26 09:37:26 閱讀次數(shù):4056次

閱讀器在將資源加載下來以后,則開始將資源進行解析和渲染。對chromium來說,它對網頁有個默許的CSS,或說缺省CSS。

1. 缺省樣式表的構成

這些CSS有哪幾個呢?我們來看看blink中文件:CSSDefaultStyleSheets.h

    在這個文件中定義了幾個成員變量:


OwnPtrWillBeMember<RuleSet> m_defaultStyle; OwnPtrWillBeMember<RuleSet> m_defaultViewportStyle; OwnPtrWillBeMember<RuleSet> m_defaultQuirksStyle; OwnPtrWillBeMember<RuleSet> m_defaultPrintStyle; OwnPtrWillBeMember<RuleSet> m_defaultViewSourceStyle; OwnPtrWillBeMember<RuleSet> m_defaultXHTMLMobileProfileStyle; OwnPtrWillBeMember<RuleSet> m_defaultTransitionStyle; RefPtrWillBeMember<StyleSheetContents> m_defaultStyleSheet; RefPtrWillBeMember<StyleSheetContents> m_viewportStyleSheet; RefPtrWillBeMember<StyleSheetContents> m_quirksStyleSheet; RefPtrWillBeMember<StyleSheetContents> m_svgStyleSheet; RefPtrWillBeMember<StyleSheetContents> m_mathmlStyleSheet; RefPtrWillBeMember<StyleSheetContents> m_mediaControlsStyleSheet; RefPtrWillBeMember<StyleSheetContents> m_fullscreenStyleSheet;

從名字中,我們也大體也能知道其是作用于甚么場景或功能的。

這里,我們來看看m_defaultStyleSheet,這個樣式表關系著全部網頁的顯示風格。

1. 我們來看看這個變量的初始化。

在類CSSDefaultStyleSheets的構造函數(shù)中,有代碼段:

String defaultRules = String(htmlCss, sizeof(htmlCss)) + RenderTheme::theme().extraDefaultStyleSheet(); m_defaultStyleSheet = parseUASheet(defaultRules); m_defaultStyle->addRulesFromSheet(defaultStyleSheet(), screenEval());
2. 我們來分析下上面代碼段中defaultRules的構成。

    其由兩部份構成:String(htmlCss, sizeof(htmlCss))  和 RenderTheme::theme().extraDefaultStyleSheet()
3. 我們先來看看第1部份:String(htmlCss, sizeof(htmlCss))
    這里有個變量是htmlCss,這個變量定義在文件:UserAgentStyleSheets.h

    這個文件是在out目錄下,編譯進程中構成的。

    我們接著看看這個文件的構成。

   先看看文件:core_generated.gyp

   其中有代碼段:

  

{ 'action_name': 'UserAgentStyleSheets', 'variables': { 'scripts': [ '../build/scripts/make-file-arrays.py', ], 'stylesheets': [ 'css/html.css', 'css/quirks.css', 'css/view-source.css', 'css/themeChromium.css', 'css/themeChromiumAndroid.css', 'css/themeChromiumLinux.css', 'css/themeChromiumSkia.css', 'css/themeInputMultipleFields.css', 'css/themeMac.css', 'css/themeWin.css', 'css/themeWinQuirks.css', 'css/svg.css', 'css/navigationTransitions.css', 'css/mathml.css', 'css/mediaControls.css', 'css/mediaControlsAndroid.css', 'css/fullscreen.css', 'css/xhtmlmp.css', 'css/viewportAndroid.css', ], }, 'inputs': [ '<@(scripts)', '<@(stylesheets)' ], 'outputs': [ '<(blink_core_output_dir)/UserAgentStyleSheets.h', '<(blink_core_output_dir)/UserAgentStyleSheetsData.cpp', ], 'action': [ 'python', '<@(scripts)', '--namespace', 'blink', '--out-h=<(blink_core_output_dir)/UserAgentStyleSheets.h', '--out-cpp=<(blink_core_output_dir)/UserAgentStyleSheetsData.cpp', '<@(stylesheets)', ], },

     通過這段python代碼我們知道,UserAgentStyleSheetsData.cpp和其頭文件是通過該段編譯腳本構成。我們要找的htmlCSS與這里面的文件:html.css有關系。其他的css與其他的樣式表有關。

    感興趣的同學可以看看html.css內容。

  4. 我們來看看第2部份:RenderTheme::theme().extraDefaultStyleSheet()

      這個方法在文件RenderTheme.cpp中:

   

String RenderTheme::extraDefaultStyleSheet() { StringBuilder runtimeCSS; if (RuntimeEnabledFeatures::dialogElementEnabled()) { runtimeCSS.appendLiteral("dialog:not([open]) { display: none; }"); runtimeCSS.appendLiteral("dialog { position: absolute; left: 0; right: 0; width: -webkit-fit-content; height: -webkit-fit-content; margin: auto; border: solid; padding: 1em; background: white; color: black;}"); runtimeCSS.appendLiteral("dialog::backdrop { position: fixed; top: 0; right: 0; bottom: 0; left: 0; background: rgba(0,0,0,0.1); }"); } if (RuntimeEnabledFeatures::contextMenuEnabled()) { runtimeCSS.appendLiteral("menu[type="popup" i] { display: none; }"); } return runtimeCSS.toString(); }

  這個缺省樣式表,這里介紹了它的組成,有興趣的同學可以繼續(xù)研究下。通過缺省樣式表的更改,可以做好多事。

   接下來我們來看看這個缺省樣式表的創(chuàng)建邏輯。

2. 缺省樣式表的創(chuàng)建邏輯

    我們從DocumentLoader::finishedLoading方法來看起。

     方法DocumentLoader::finishedLoading,會調用同文件中方法:DocumentLoader::endWriting

從該方法開始的調用堆棧以下:

 

W/WebKit ( 8157): DocumentLoader::endWriting W/WebKit ( 8157): DocumentWriter::end() W/WebKit ( 8157): HTMLDocumentParser::finish() W/WebKit ( 8157): HTMLDocumentParser::attemptToEnd() W/WebKit ( 8157): HTMLDocumentParser::prepareToStopParsing()
從prepareToStopParsing方法開始的調用邏輯以下:


W/WebKit ( 8157): HTMLDocumentParser::prepareToStopParsing() W/WebKit ( 8157): HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd() W/WebKit ( 8157): HTMLDocumentParser::end() W/WebKit ( 8157): HTMLTreeBuilder::finished() W/WebKit ( 8157): HTMLConstructionSite::finishedParsing() W/WebKit ( 8157): Document::finishedParsing() W/WebKit ( 8157): FrameLoader::finishedParsing() W/WebKit ( 8157): Document::explicitClose() W/WebKit ( 8157): FrameLoader::checkCompleted() W/WebKit ( 8157): FrameLoader::completed() W/WebKit ( 8157): FrameView::maintainScrollPositionAtAnchor W/WebKit ( 8157): FrameLoader::checkLoadComplete() W/WebKit ( 8157): FrameLoader::checkLoadCompleteForThisFrame() W/WebKit ( 8157): updateRenderTreeIfNeeded() W/WebKit ( 8157): Document::updateRenderTree W/WebKit ( 8157): Document::updateStyle W/WebKit ( 8157): Document::ensureStyleResolver() W/WebKit ( 8157): StyleResolver& ensureResolver() W/WebKit ( 8157): StyleEngine::createResolver() W/WebKit ( 8157): StyleEngine::appendActiveAuthorStyleSheets() W/WebKit ( 8157): StyleResolver::finishAppendAuthorStyleSheets() W/WebKit ( 8157): StyleResolver::collectFeatures() W/WebKit ( 8157): CSSDefaultStyleSheets::instance() W/WebKit ( 8157): CSSDefaultStyleSheets::CSSDefaultStyleSheets()



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产高清免费不卡观看 | 国产亚洲综合精品一区二区三区 | 羞羞网站 | 国产成人免费不卡在线观看 | 国产在线观看福利片 | 欧美一级做一级做片性十三 | 亚洲在线播放 | jlzzjlzz欧美大全 | 欧美人与动人物a级网站 | 亚洲精品一二三 | 久久视频精品53在线观看 | 中国特黄特级真人毛片 | 香蕉超级碰碰碰97视频在线观看 | 久久永久视频 | 亚洲日比视频 | 美国美女一级毛片免费全 | 午夜免费啪视频观看网站 | 激情视频在线观看 | 精品视频一区二区三区 | 久草在线观看首页 | 日本在线色| 久久久最新精品 | 毛片一级做a爰片性色 | 免费国产成高清人在线视频 | 好好的日视频www | 青青草原国产在线视频 | 欧美一级毛片美99毛片 | 欧美一区二区三区在线观看 | 国产精品亚洲精品一区二区三区 | 欧美一级毛片日本 | 精品久久一区二区三区 | 波多野结衣xxxx性精品 | 国产欧洲亚洲 | 亚洲在线免费 | 高清一级做a爱免费视 | 欧美x性| 色黄在线| 亚洲日本高清 | 亚洲天堂视频在线观看免费 | 91一区二区三区四区五区 | 周妍希国产福利在线观看 |