【MUI】内部CSS隣接セレクタにこれで勝てる
こんにちは、フリーランスエンジニアの太田雅昭です。
CSSの仕様
CSSでは、隣接セレクタが強くなり、単体でのセレクタは負けてしまいます。そのためそういう場合は同じように隣接セレクタを使うか、!importantなどを使ったりして解決します。
MUIの隣接セレクタ
MUIはたとえば以下のような隣接セレクタがあります。
.MuiDialogTitle-root+.css-16wt3be-MuiDialogContent-root {
padding-top: 0;
}
これはダイアログ内にあり、DialogContentの上部パディングです。このセレクタが強いため、通常の追加方法では勝てません。
試しにtheme内で下記のようにしてみます。
export const theme = createTheme({
...
components: {
MuiDialogContent: {
styleOverrides: {
root: {
paddingTop: '1.0rem',
}
}
},
}
});
これはDialogContentの上部パディングを上書きしていますが、反映されません。なぜなら前述の隣接セレクタが勝ってしまうためです。
emotionの&&
この隣接セレクタに勝つために、下記のようにします。
export const theme = createTheme({
...
components: {
MuiDialogContent: {
styleOverrides: {
root: {
'&&': {paddingTop: '1.0rem'}
}
}
},
}
});
emotionの&は親セレクタを表します。つまり&&は親を2世代遡っているため、隣接セレクタ扱いとなります。
このようにすることで、隣接セレクタに勝つことができます。これで常勝街道まっしぐらですね。