๐ override ์ฐ์ ์์๋ฅผ ์ ์ผ ๋๊ฒ ์ค์ ํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ
styled-components๋ฅผ ์ฌ์ฉํด ๊ธฐ์กด style์ overrideํ๋ ๊ฒฝ์ฐ ์ฐ์ ์์๊ฐ ์ ๋๋ก ์ ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค. ์ด๋ฒ์ ๋ง์ฃผํ ์ด์๋ headlessUI ํจํค์ง์ Dialog ์ปดํฌ๋ํธ์ custom style์ overrideํ๋ ค๋๋ฐ ์๋๋๋ก ์ ์ฉ๋์ง ์๋ ์ด์์๋ค.
๋ถ์ง๋ฐํ ๊ฒ์ํด๋ณด๋ styled-component issues - #2620์ ๋์ ๋น์ทํ ๋ฌธ์ ๋ฅผ ๊ฒช๊ณ ์๋ ๊ธ์ ์ฐพ์ ์ ์์๋ค.
์์ธ์ React์ createPortal์ด์๋๋ฐ, portal์ ํน์ฑ์ portal์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ํด๋น element์ DOM์ด ํ์ฌ ์์น๊ฐ ์๋ ๋ค๋ฅธ ์์น๋ก ๋ณ๊ฒฝ๋๋๋ฐ, styled component๊ฐ ๋ฐ๋ DOM์ ์์น๋ฅผ ์ ์ ์๊ธฐ ๋๋ฌธ์ด์๋ค.
์ด๋ฐ ๊ฒฝ์ฐ styled-component์ override๋ฅผ ํ ์ ์๋? ๊ทธ๊ฑด ์๋๋ค. styled-component์์ override๋ฅผ ์ฌ์ฉํ ๋ ์ฐ์ ์์๋ฅผ ์ ์ผ ๋๊ฒ ์ค์ ํ ์ ์๋ ๋ฐฉ๋ฒ์ด 2๊ฐ์ง๊ฐ ์๋๋ฐ, ์ฒซ ๋ฒ์งธ๋ !important
์ด๊ณ , ๋ ๋ฒ์งธ๋ &&&
๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
!important
๋ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ ์๋์น ์์ ๋ถ์์ฉ์ ๋ง์ด ์ผ์ผํฌ ๊ฐ๋ฅ์ฑ์ด ์์ด ์ฌ์ฉ์ ํ์ง ์๋ ํธ์ธ๋ฐ, ๊ตฌ์ฒด์ ์ธ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ํน์ด์ฑ์ ๊ด๊ณ์์ด ํด๋น ์์ฑ์ ๋ํ ๋ค๋ฅธ ๋ชจ๋ ์คํ์ผ ์ ์ธ์ ์ฌ์ ์ํ๊ธฐ ๋๋ฌธ์ ์๊ธฐ์น ์์ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ๋ค.
- ์ฌ๋ฌ๊ฐ์
!important
๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ์ ์ง๋ณด์์ ๋๋ฒ๊น ์ ์ด๋ ต๊ฒ ๋ง๋ ๋ค. !important
์ ์ฌ์ฉํ์ฌ ์ ์ธํ Style์ ๋ค๋ฅธ element์ ์ฌ์ฌ์ฉํ๊ธฐ ์ด๋ ต๋ค.- ์ฌ๋ฌ ๊ฐ๋ฐ์์ ํ์ ํ๋ ๊ฒฝ์ฐ ์๋์น ์์ ๋ฒ๊ทธ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํด๊ฒฐํ๋๋ฐ, ์ฌ๊ธฐ์ &
์ hash๋ก ๋ณ๊ฒฝ๋ ํด๋์ค๋ก ๋์ฒด๋๋ค. ๋ฐ๋ผ์ &
๋ฅผ 3๋ฒ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ๋๋ค.
const MyStyledComponent = styled(AlreadyStyledComponent)`
&&& {
color: palevioletred;
font-weight: bold;
}
`
// injected CSS then looks like this
.MyStyledComponent-asdf123.MyStyledComponent-asdf123.MyStyledComponent-asdf123 {
color: palevioletred;
font-weight: bold;
}
์ ์์ ์ฒ๋ผ ์ ์ธํ์ฌ ์ด์๋ฅผ ํด๊ฒฐํ๋ค.
const Modal = styled(Dialog)`
&&& {
padding: 30px;
}
`
๋๊ธ