[英]How can I pass CSS classes to React children and ensure they will override the child’s local class?
我有一個<Parent />
組件,只有一個<Child />
:
<Parent>
<Child />
</Parent>
我想將父類的CSS類傳遞給<Child />
,所以我這樣做:
<Parent>
<Child className={ styles.pill } />
</Parent>
<Child />
有一個className
prop,並使用classnames包應用該類,如下所示:
<div className={ classNames(styles.pill, props.className) } />
但是你看到<Child />
有一個名為styles.pill
的類, styles.pill
具有以下樣式:
.pill {
align-content: stretch;
align-items: center;
color: var(--grey__text--dark);
cursor: pointer;
display: flex;
flex-flow: row nowrap;
justify-content: flex-start;
}
父傳入的類包含以下樣式:
.pill {
align-items: flex-end;
flex-flow: column wrap;
}
使用此設置,我無法保證從父項傳入的樣式將覆蓋<Child />
組件中的樣式,這正是我希望它們執行的操作。 目前你永遠不會知道哪一個會勝過另一個。 對於項目的每個構建來說,它似乎是隨機的。
如何確保從父類傳入的類中的CSS屬性覆蓋Child組件中的任何類似屬性?
這是CSS特異性的問題 ,有很多方法可以確保覆蓋。
多選擇器技巧,為了擴大特異性,你可以通過復制類名來使選擇器大小加倍,在你的情況下, .pill.pill { ...}
將比原來更具體,因此會覆蓋樣式。
使用!important
,你可以指定在父類中, .pill
的聲明最后會包含!important
。
多個不同的選擇器 ,父級將傳遞另外的不同className
,該子組件將解析, .pill.parent-pill {...}
,父級將.parent-pill
類傳遞給子級。
這些只是3種簡單的方式來覆蓋兒童風格還有更多。
您可以使用Object.assign
將一個/多個對象合並到目標對象中,為每個后續對象提供優先級:
const foo = { a: '1', b: '2' } const bar = { a: '3' } console.log(Object.assign(foo, bar));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.