摘要:樣式不會被上層的組件介入影響,更不會被內(nèi)層組件影響。這對保護樣式不受未知的,不可控的外界因素所干擾非常有用。形式上感覺就是這個自定義的變量稱為一個新的屬性,可以被賦值正如我們小標題上的稱呼自定義屬性。
前言
已經(jīng)好久沒有更新Polymer專欄,之前幾個月由于受到工作上的突然變故,導致學習和撰寫無法順利開展,好在目前各方面都已經(jīng)暫時穩(wěn)定下來,期間有不少對Polymer感興趣的壇友通過評論或者私信的形式向我表達了不要斷更的期望,我在這里也想對他們說聲謝謝。
今天我們繼續(xù)Polymer的樣式篇,剛剛在新機器下部署好了Polymer的開發(fā)環(huán)境,發(fā)現(xiàn)時隔2個月Polymer已然悄悄升級到了1.3版本(雖然我還沒去了解新版本的變更),這也說明了Google對這個框架的重視程度,給我們學習Polymer的朋友們打了一針強心劑。(建議大家在閱讀本文前執(zhí)行bower update命令來更新Polymer到最新版)
正題 跨作用域的樣式 背景對于Webcomponent而言,Shadow Dom 帶來了很多作用域以及樣式封裝之類的好處,使得組件在CSS影響范圍上變得更加安全和簡單。樣式不會被上層的組件介入影響,更不會被內(nèi)層組件影響。
這對保護樣式不受未知的,不可控的外界因素所干擾非常有用。但是當你想要刻意去修改一個自定義組件的樣式時該怎么辦?我們經(jīng)常要面臨這個問題,比如在某個固定的主題(theme)下做一些針對某些組件的特殊的樣式修改。舉個例子,“custom-checkbox”組件使用 .checked這個class,而另外一個component也碰巧使用了.checked 這個class的時候Polymer提供的Shadow Style功能就很好的解決了同名class相互影響,相互污染的問題。
為了解決污染的問題傳統(tǒng)的做法往往是,給css定義加上很多前綴,之前加上很多dom層級的定義(類似于namespace)來區(qū)分重名的class,而有了Shadow Style之后,媽媽就再也不擔心class重名了。
自定義CSS屬性(或者稱為變量更加合適)我們先來看一段代碼,定義一個component
{{title}}
我們可以看到span上的className為title,而titile的定義里出現(xiàn)了奇怪的東西var (xxxxxx)
.title{ color: var(--my-toolbar-title-color); }
我們望文生義一下,從字面上理解這個color應該是個動態(tài)的值,具體顏色一定是由外部使用這個component的父component來決定的,而--my-toolbar-title-color應該就是一個變量名,存放外部傳入的具體顏色值。
接下去我們再定義一個父component來使用這個my-toolbar
運行結(jié)果一目了然,my-toolbar這個component中定義的css變量可以被外部使用它的my-element這個父component賦值。形式上感覺就是--my-toolbar-title-color這個自定義的變量稱為一個新的css屬性,可以被賦值(正如我們小標題上的稱呼—— 自定義css屬性)。
當然你也可以給var --my-toobar-title-color一個默認的初始值,以防外界沒有給它賦值,如
color: var(--my-toolbar-title-color, blue);
這種自定義css屬性,對于擴展我們傳統(tǒng)的樣式十分有幫助,尤其是切換不同配色的主題時,目前Firefox已經(jīng)原生支持這種寫法,chrome和safari也已經(jīng)宣稱要支持這一特性,鼓掌!
自定義CSS代碼塊了解過sass的朋友應該對@mixin不陌生,polymer也提供了整塊整塊定義css樣式的功能,先看代碼,我們對之前的my-toolbar的代碼稍作改動,使用@apply來聲明了2個變量接收mixin的樣式塊。
{{title}}
之后對my-element也做一下修改
運行結(jié)果
我們可以看到@apply和之前的var作用其實是類似的,只不過@apply定義的變量接收的是由多條style規(guī)則組成的塊。
好了,夜已深,可能講完整個style章節(jié)需要總共4-5個小節(jié),今天第2小節(jié)就講到到這里吧,我盡量抽時間寫完。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/78757.html
摘要:為嘛會這樣呢,動態(tài)添加就不需要手動刷新,而動態(tài)設置自定義屬性就需要我猜測可能的原因是如果用戶同時設置多個自定義屬性,比如這樣如果讓自動去刷新視圖可能就要執(zhí)行次,用戶手動自己在最后一次性刷新的話能提升一定的性能。 一些和自定義css屬性有關(guān)的API上篇中我們介紹了如何自定義css變量,從而在外部定義一些具體的值,由外部component傳入子component后動態(tài)的改變,子compon...
摘要:好久沒有更新了,今天更一篇樣式篇。使用的是規(guī)則來限定每個自定義組件的樣式范圍即每個組件都可以定義自己內(nèi)部獨立的樣式,而不受外界全局樣式的干擾。現(xiàn)在覺得的寫法有些冗長,會在后續(xù)版本中加以改進,我們也拭目以待 好久沒有更新了,今天更一篇樣式篇。 Polyermer使用的是Shadow DOM styling規(guī)則來限定每個自定義組件的樣式范圍(即每個組件都可以定義自己內(nèi)部獨立的樣式,而不受外...
摘要:組件也一樣,從被創(chuàng)建,被解析,被賦初始化值,被添加到舞臺,被繪制,被布局,使用過程中被修改了值,被重繪,被重新布局,最終被父組件移除結(jié)束慘淡的一身等等,都可以稱為組件的生命周期。 這篇來談談polymer最核心的一塊,也可以說是web components技術(shù)最最核心的一塊內(nèi)容 生命周期,大家在學習一些框架的時候最好都去了解一下它們的生命周期。 什么是生命周期 什么是生命周期?故名思議...
摘要:所以又以一個庫的身份出現(xiàn)在世人面前,它現(xiàn)階段要做的就是使用的規(guī)范來進行開發(fā),并且提供了一套底層實現(xiàn)來填補了各大瀏覽器暫不支持的,我們稱為填充物也就是要干的事情。 書接上回上一篇我們介紹了神馬是Polymer,這一篇我們來做些正式編碼前的準備工作,順便也扯一扯Polymer的真面目 如何安裝Polymer 有兩種方式:第一種是bower安裝,不要問我bower是什么,不會bower的話,...
摘要:我們修改下例子定義借口,構(gòu)造時將重新賦值測試一下這種構(gòu)造函數(shù)傳參的方式只適用于,的創(chuàng)建方式,而且它種方式不支持,原因你自己拍腦袋想想就懂了。 之前一篇算是帶大家大致領(lǐng)略了一下Polymer的風采。這篇我們稍微深入一丟丟,講下組件的注冊和創(chuàng)建。 創(chuàng)建自定義組件的幾種方式 這里我們使用Polymer函數(shù)注冊了一個自定義組件my-element // register an element ...
閱讀 2899·2021-09-22 15:20
閱讀 2969·2021-09-22 15:19
閱讀 3471·2021-09-22 15:15
閱讀 2409·2021-09-08 09:35
閱讀 2386·2019-08-30 15:44
閱讀 3015·2019-08-30 10:50
閱讀 3747·2019-08-29 16:25
閱讀 1598·2019-08-26 13:55