亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

所有 CSS 規則都允許用于所有 HTML 元素嗎?它們都可以繼承嗎?

所有 CSS 規則都允許用于所有 HTML 元素嗎?它們都可以繼承嗎?

12345678_0001 2023-10-10 16:51:04
鑒于某些 CSS 規則是針對特定 HTML 元素量身定制的(一些示例 - object-fitfor <img>、<video>等;stroke以及fill針對各種 SVG 元素的其他 SVG 規則),并且在用于其他元素時不太有意義:將任何有效的CSS 規則應用于任何 HTML 元素是否合法?任何規則都可以繼承嗎?繼承的值是什么,特別是當它是從使用特定屬性沒有意義的元素繼承的情況下?我的具體問題是這樣的。我正在開發一個帶有模塊化 CSS 的按鈕組件。在這個按鈕內,我可能有一個用于顯示圖標的 SVG 元素。我希望能夠從組件外部將某些樣式應用于圖標(即描邊和填充),同時保留適當的封裝(因此深度選擇器是禁忌)。為了解決這個問題,我將 SVG 設置為從按鈕繼承描邊和填充。如果我現在將這些屬性應用到按鈕,圖標就會繼承它們,并且我會得到所需的結果!然而,這讓我想知道我所做的是否有效以及其他瀏覽器是否會有相同的行為。這似乎是常識,但要找到明確的答案卻出人意料地困難。如果有人可以向我指出規范的摘錄,甚至可能是一些支持表,我會很高興!考慮到我編寫代碼的方式,顯示 100% 準確的示例有點太多了,但基本上我是在問這是否有效:.icon {  stroke: inherit;  fill: inherit;}.button {  stroke: #FFF;  fill: #999;}<button class="button">  <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">    <g stroke-width="2" transform="translate(1 1)">      <path d="M14 2L2 14"/>      <circle cx="8" cy="8" r="8"/>    </g>  </svg>  <span>My button</span></button>
查看完整描述

2 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

將任何有效的 CSS 規則應用于任何 HTML 元素仍然合法嗎?

是的,但如果它不受支持或不適用于此類元素,您的瀏覽器可能會忽略它。

而且,任何規則都可以繼承嗎?

是的,但您應該注意,繼承會考慮計算值,這可能會產生影響:

繼承 CSS 關鍵字使指定它的元素從其父元素獲取屬性的計算值。它可以應用于任何CSS屬性,包括所有的CSS簡寫。

我沒有與 SVG 相關的簡單示例,但這是另一個示例:

.box {

? display:inline-block;

? float:left;

? width:200px;

? height:200px;

? border:1px solid red;

}


.box > div {

? display:inherit;

? border:1px solid green;

}

<div class="box">

? <div>text</div>

</div>

注意內部 div 的displayequal toblock和 notinline-block因為 float 會強制顯示的計算值被 block for.box


為了避免處理繼承問題,您可以考慮適合您情況的 CSS 變量:


.icon {

? stroke: var(--s);

? fill: var(--f);

}


.button {

? --s: #FFF;

? --f: #999;

}

<button class="button">

? <svg class="icon" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 18 18">

? ? <g stroke-width="2" transform="translate(1 1)">

? ? ? <path d="M14 2L2 14"/>

? ? ? <circle cx="8" cy="8" r="8"/>

? ? </g>

? </svg>

? <span>My button</span>

</button>


查看完整回答
反對 回復 2023-10-10
?
守著星空守著你

TA貢獻1799條經驗 獲得超8個贊

相同的級聯和繼承規范指出:

即使屬性不適用(如“適用于”行所定義),計算值也存在。但是,某些屬性可能會根據屬性是否適用于元素來更改確定計算值的方式。

因此,每個元素的每個屬性都會有一個計算值,但可能不使用它(所謂的使用值,即計算值之后的下一步,是無)。計算出的值將被繼承。

這對于我的 SVG 按鈕示例意味著什么:

  1. 我絕對被允許設置stroke和。它在渲染自身時會忽略此屬性,但如果需要,會將其傳遞給其子級。fill<button>

  2. 默認情況下,子 SVG 將繼承這些屬性(我什至不需要明確指定)。

  3. stroke和 的計算值fill沒有任何警告,因此我可以期望繼承正確的顏色(確實如此!)。


查看完整回答
反對 回復 2023-10-10
  • 2 回答
  • 0 關注
  • 123 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號