์ด ๊ธ์ ํ๋ก ํธ์๋ ์ง๋ฌด ๋ฉด์ ์ง๋ฌธ๊ณผ ๊ด๋ จ๋ Github ์ ์ฅ์ front-end-interview-handbook ๋ฒ์ญ๋ณธ์ผ๋ก, ์ ์ฅ์์ Translations ํด๋์ ๋ด์ฉ๊ณผ ๋์ผํฉ๋๋ค.
ํ๋ก ํธ์๋ ๋ฉด์ ์ง๋ฌธ - CSS ์ง๋ฌธ์ ๋ํ ํด์ค์
๋๋ค.
Pull Request๋ฅผ ํตํ ์ ์, ์์ ์์ฒญ ํ์ํฉ๋๋ค.
Resetting
๊ณผ Normalizing
CSS์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์? ๋น์ ์ ๋ฌด์์ ์ ํํ ๊ฒ์ด๋ฉฐ, ๊ทธ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?float
๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค๋ช
ํ์ธ์.z-index
์ ์คํ ์ปจํ
์คํธ(stacking context)๊ฐ ์ด๋ป๊ฒ ํ์ฑ๋๋์ง ์ค๋ช
ํ์ธ์.๋ธ๋ผ์ฐ์ ๋ CSS ๊ท์น์ ํน์ ์ฑ์ ๋ฐ๋ผ ์์์ ํ์ํ ์คํ์ผ์ ๊ฒฐ์ ํฉ๋๋ค. ๋ธ๋ผ์ฐ์ ๋ ์ด๋ฏธ ํน์ ์์์ ์ผ์นํ๋ ๊ท์น์ ๊ฒฐ์ ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ผ์นํ๋ ๊ท์น๋ค ๊ฐ์ด๋ฐ, ๋ค๊ฐ์ ์ผํ๋ก ๊ตฌ๋ถ๋ ๊ฐ a, b, c, d
๋ ๋ค์์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ๊ท์น์ ๋ํด ๊ณ์ฐ๋ฉ๋๋ค.
a
๋ ์ธ๋ผ์ธ ์คํ์ผ์ด ์ฌ์ฉ๋๊ณ ์๋์ง ์ฌ๋ถ์
๋๋ค. ์์ฑ์ ์ ์ธ์ด ์์์ ์ธ๋ผ์ธ ์คํ์ผ์ด๋ฉด a
๋ 1์ด๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด 0์
๋๋ค.b
๋ ID ์
๋ ํฐ์ ์์
๋๋ค.c
๋ ํด๋์ค, ์์ฑ, ๊ฐ์ ํด๋์ค ์ ํ์์ ์์
๋๋ค.d
๋ ํ๊ทธ, ๊ฐ์ ์์ ์ ํ์์ ์์
๋๋ค.๊ฒฐ๊ณผ์ ์ธ ํน์ ์ฑ์ ์ ์๊ฐ ์๋๋ผ, ์ปฌ๋ผ๋ง๋ค ๋น๊ตํ ์ ์๋ ๊ฐ๋ค์ ํ๋ ฌ์
๋๋ค. ์ ํ์๋ฅผ ๋น๊ตํ์ฌ ๊ฐ์ฅ ๋์ ํน์ ์ฑ์ ๊ฐ๋ ํญ๋ชฉ์ ๊ฒฐ์ ํ ๋, ์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ ์์ผ๋ก ๊ฐ ์ด์ ๊ฐ์ฅ ๋์ ๊ฐ์ ๋น๊ตํฉ๋๋ค. ๋ฐ๋ผ์ b
์ด์ ๊ฐ์ c
์ d
์ด์ ์๋ ๊ฐ์ ๋ฌด์ํฉ๋๋ค. ๋ฐ๋ผ์ 0,1,0,0
์ ํน์ ์ฑ์ 0,0,10,10
์ค ํ๋๋ณด๋ค ํฝ๋๋ค.
๋๋ฑํ ํน์ ์ฑ์ ๊ฒฝ์ฐ: ๊ฐ์ฅ ๋ง์ง๋ง ๊ท์น์ด ์ค์ํ ๊ท์น์ ๋๋ค. ์คํ์ผ์ํธ์ ๋์ผํ ๊ท์น์ ๋ ๋ฒ ์์ฑํ ๊ฒฝ์ฐ(๋ด๋ถ๋ ์ธ๋ถ์ ๊ด๊ณ์์ด) ์คํ์ผ์ํธ์ ํ์ ๊ท์น์ด ์คํ์ผ๋ ์์์ ๋ ๊ฐ๊น์ฐ๋ฏ๋ก ๋ ๊ตฌ์ฒด์ ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
์ ๋ผ๋ฉด, ํ์ํ๋ค๋ฉด ์ฝ๊ฒ ์ฌ์ ์ํ ์ ์๋๋ก ๋ฎ์ ํน์ ์ฑ ๊ท์น๋ค์ ์์ฑํ ๊ฒ์
๋๋ค. CSS UI ์ปดํฌ๋ํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๊ฐ !important
๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ํน์ ์ฑ์ ๋์ด๊ธฐ ์ํด ์ง๋์น๊ฒ ๋ณต์กํ CSS ๊ท์น์ ์ฌ์ฉํ์ง ์๊ณ ๋ ์ด๋ฅผ ์ฌ์ ์ํ ์ ์๋๋ก ํน์ ์ฑ์ ๋ฎ๊ฒ ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
Resetting
๊ณผ Normalizing
CSS์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์? ๋น์ ์ ๋ฌด์์ ์ ํํ ๊ฒ์ด๋ฉฐ, ๊ทธ ์ด์ ๋ ๋ฌด์์ธ๊ฐ์?Resetting - Resetting์ ์์์ ๋ชจ๋ ๊ธฐ๋ณธ ๋ธ๋ผ์ฐ์ ์คํ์ผ์ ์ ๊ฑฐํ๊ธฐ ์ํ ๊ฒ์
๋๋ค. ์: margin
, padding
, font-size
๋ ๊ฐ์ ๊ฐ์ผ๋ก ์ฌ์ค์ ๋ฉ๋๋ค. ์ผ๋ฐ์ ์ธ ํ์ดํฌ๊ทธ๋ํผ ์์์ ๋ํ ์คํ์ผ์ ์ฌ ์ ์ธํด์ผํฉ๋๋ค.
Normalizing - Normalizing๋ "๋ชจ๋ ์คํ์ผ์ ์ ๊ฑฐ"ํ๋ ๊ฒ์ด ์๋๋ผ ์ ์ฉํ ๊ธฐ๋ณธ ์คํ์ผ์ ๋ณด์กดํฉ๋๋ค. ๋ํ ์ผ๋ฐ์ ์ธ ๋ธ๋ผ์ฐ์ ์ข ์์ฑ์ ๋ํ ๋ฒ๊ทธ๋ฅผ ์์ ํฉ๋๋ค.
ํ์๋ ์ ๋ง์ ์คํ์ผ๋ง์ ๋ง์ด ํด์ผ ํ๊ณ ๋ณด์กดํ ๊ธฐ๋ณธ ์คํ์ผ์ด ํ์ํ์ง ์๋๋ก ๋งค์ฐ ์ปค์คํฐ๋ง์ด์ง๋์๊ฑฐ๋ ์์ ๋ก์ด ์ฌ์ดํธ ๋์์ธํด์ผํ ๋ ๋ฆฌ์ ์ ์ ํํฉ๋๋ค.
float
๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ค๋ช
ํ์ธ์.Float๋ CSS ์์น์ง์ ์์ฑ์
๋๋ค. Float๋ ์์๋ ํ์ด์ง์ ํ๋ฆ์ ์ผ๋ถ๊ฐ ๋๋ฉฐ, ํ์ด์ง์ ํ๋ฆ์์ ์ ๊ฑฐ๋๋ position: absolute
์์์ ๋ฌ๋ฆฌ ๋ค๋ฅธ ์์(์: ํ๋กํ
์์ ์ฃผ์๋ก ํ๋ฅด๋ ํ
์คํธ)์ ์์น์ ์ํฅ์ ์ค๋๋ค.
CSS clear
์์ฑ์ float ์์์ left
/right
/both
์ ์์นํ๋๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
๋ถ๋ชจ ์์์ float ์์๋ง ์์ผ๋ฉด, ๊ทธ ๋์ด๋ ๋ฌดํจ๊ฐ ๋ฉ๋๋ค. ์ปจํ ์ด๋์ float ์์ ๋ค์์ ์์ง๋ง ์ปจํ ์ด๋๊ฐ ๋ซํ๊ธฐ ์ ์ float๋ฅผ clearํ๋ฉด ํด๊ฒฐํ ์ ์์ต๋๋ค.
.clearfix
๋ ์๋ฆฌํ CSS ๊ฐ์ ์ ํ์ (:after
)๋ฅผ ์ฌ์ฉํ์ฌ float๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์์ ํด๋์ค์ overflow ๋ฅผ ์ค์ ํ๋ ๋์ ์ถ๊ฐ ํด๋์ค clearfix
๋ฅผ ์ ์ฉํฉ๋๋ค. ๊ทธ ๋ค์ ์๋ CSS๋ฅผ ์ ์ฉํ์ธ์:
.clearfix:after {
content: ' ';
visibility: hidden;
display: block;
height: 0;
clear: both;
}
๋์ , ๋ถ๋ชจ ์์์ overflow: auto
๋ overflow: hidden
์์ฑ์ ์ฃผ๋ฉด, ์์ ์์ ๋ด๋ถ์ ์๋ก์ด ๋ธ๋ก ํฌ๋งท ์ปจํ
์คํธ์ ์ค์ ํ๊ณ ์์์ ํฌํจํ๋๋ก ํ์ฅํฉ๋๋ค.
z-index
์ ์คํ ์ปจํ
์คํธ(stacking context)๊ฐ ์ด๋ป๊ฒ ํ์ฑ๋๋์ง ์ค๋ช
ํ์ธ์.CSS์ z-index
์์ฑ์ ๊ฒน์น๋ ์์์ ์์ ์์๋ฅผ ์ ์ดํฉ๋๋ค. z-index
๋ position
์ static
์ด ์๋ ๊ฐ์ ๊ฐ๋ ์์์๋ง ์ํฅ์ ์ค๋๋ค.
z-index
๊ฐ์ด ์์ผ๋ฉด DOM์ ๋ํ๋๋ ์์๋๋ก ์์๊ฐ ์์ด๊ฒ ๋ฉ๋๋ค(๋์ผํ ๊ณ์ธต์์ ๊ฐ์ฅ ์๋์ ๊ฒ์ด ๋งจ ์์ ๋ณด์ฌ์ง๋๋ค). ์ ์ ์ด์ง ์์(non-static) ์์น์ง์ ์์(๋ฐ ํด๋น ํ์ ์์)๋ HTML ๋ ์ด์ด ๊ตฌ์กฐ์ ์๊ด์์ด ๊ธฐ๋ณธ ์ ์ ์์น๋ก ํญ์ ์์ ์์ ๋ํ๋ฉ๋๋ค.
์คํ ์ปจํ
์คํธ(stacking context)๋ ๋ ์ด์ด๋ค์ ํฌํจํ๋ ์์์
๋๋ค. ์ง์ญ ์คํ ์ปจํ
์คํธ ๋ด์์, ์์์ z-index
๊ฐ์ ๋ฌธ์ ๋ฃจํธ๊ฐ ์๋ ํด๋น ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ค์ ๋ฉ๋๋ค. ํด๋น ์ปจํ
์คํธ ์ธ๋ถ ๋ ์ด์ด(์: ์ง์ญ ์คํ ์ปจํ
์คํธ์ ํ์ ์์)๋ ๊ทธ ์ฌ์ด์ ๋ ์ด์ด์ ์ฌ ์ ์์ต๋๋ค. ์์ B๊ฐ ์์ A์ ์๋จ์ ์์นํ๋ ๊ฒฝ์ฐ, ์์ A์ ํ์ ์์ C๋, ์์ C๊ฐ ์์ B๋ณด๋ค z-index
๊ฐ ๋ ๋์ ๊ฒฝ์ฐ์๋ ์์ B ๋ณด๋ค ์์ ์ฌ ์ ์์ต๋๋ค.
๊ฐ๊ฐ์ ์คํ ์ปจํ
์คํธ๋ ์์ฒด์ ์ผ๋ก ํฌํจ๋์ด ์์ต๋๋ค - ์์์ ๋ด์ฉ์ด ์์ธ ํ์๋ ์ ์ฒด ์์๋ฅผ ์คํ ์ปจํ
์คํธ์ ์์ธ ์์๋ก ๊ณ ๋ คํฉ๋๋ค. ๋ค์ ๋ช๋ช CSS ์์ฑ, opacity
๊ฐ 1๋ณด๋ค ์๊ฑฐ๋, filter
๊ฐ none
์ด ์ด๊ฑฐ๋, transform
์ด none
์ด ์๋ ๊ฒ๋ค์ด ์๋ก์ด ์คํ ์ปจํ
์คํธ๋ฅผ ํธ๋ฆฌ๊ฑฐํฉ๋๋ค.
BFC(Block Formatting Context)๋ ๋ธ๋ก ๋ฐ์ค๊ฐ ๋ฐฐ์น๋ ์น ํ์ด์ง์ ์๊ฐ์ CSS ๋ ๋๋ง์ ์ผ๋ถ์
๋๋ค. float, absolute๋ก ๋ฐฐ์น๋ ์์, inline-blocks
, table-cells
, table-caption
๊ทธ๋ฆฌ๊ณ visible
(๊ทธ ๊ฐ์ด viewport์ ์ ํ๋์์ ๋๋ ์ ์ธ)์ด ์๋ overflow
๊ฐ ์๋ ์์๋ค์ด ์๋ก์ด Block Formatting Context๋ฅผ ๋ง๋ญ๋๋ค.
BFC๋ ๋ค์ ์กฐ๊ฑด ์ค ํ๋ ์ด์์ ์ถฉ์กฑ์ํค๋ HTML ๋ฐ์ค์ ๋๋ค:
float
์ ๊ฐ์ด none
์ด ์๋.position
์ ๊ฐ์ด static
๋ ์๋๊ณ relative
๋ ์๋.display
์ ๊ฐ์ด table-cell
, table-caption
, inline-block
, flex
, inline-flex
์.overflow
์ ๊ฐ์ด visible
์ด ์๋.BFC์์ ๊ฐ ๋ฐ์ค์ ์ผ์ชฝ ๋ฐ๊นฅ ๋ชจ์๋ฆฌ๋ ํฌํจํ๋ ๋ธ๋ก์ ์ผ์ชฝ ๋ชจ์๋ฆฌ์ ๋ฟ์ต๋๋ค(right-to-left ํฌ๋งท์์๋, ์ค๋ฅธ์ชฝ ๋ชจ์๋ฆฌ์ ๋ฟ์).
BFC collapse์์ ์ธ์ ํ ๋ธ๋ก ๋ ๋ฒจ ๋ฐ์ค ์ฌ์ด์ ์์ง ๋ง์ง. collapsing margins์ ๋ํด ์์ธํ ์ฝ์ด๋ณด์ธ์.
div
๋ฐฉ๋ฒ - <div style="clear:both;"></div>
.clearfix
ํด๋์ค๋ฅผ ์ฐธ์กฐํ์ธ์.overflow: auto
๋๋ overflow: hidden
๋ฐฉ๋ฒ - ๋ถ๋ชจ๋ ์๋ก์ด Block Formatting Context๋ฅผ ์ค์ ํ๊ณ , ํ์ฅ๋ ์์์ ํฌํจํ๋๋กํฉ๋๋ค.๋๊ท๋ชจ์ ํ๋ก์ ํธ์์๋ ์ ์ฉํ๊ฒ .clearfix
ํด๋์ค๋ฅผ ๋ง๋ค์ด ํ์ํ ๊ณณ์์ ์ฌ์ฉํฉ๋๋ค. ์์์ด ๋ถ๋ชจ๋ณด๋ค ํฌ๊ธฐ๊ฐ ๊ฒฝ์ฐ overflow: hidden
์ ์์์ ๋ชจ๋ ๋ณด์ฌ์ค ์ ์์ต๋๋ค.
CSS ์คํ๋ผ์ดํธ๋ ์ฌ๋ฌ ์ด๋ฏธ์ง๋ฅผ ํ๋์ ํฐ ์ด๋ฏธ์ง๋ก ๊ฒฐํฉํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์์ด์ฝ์ ์ฌ์ฉ๋๋ ๊ธฐ์ (Gmail์์ ์ฌ์ฉ)์ ๋๋ค. ๊ตฌํ ๋ฐฉ๋ฒ:
background-image
, background-position
, background-size
์์ฑ์ด ์ ์๋ ํด๋น CSS ํด๋์ค๋ฅผ ๊ฐ์ต๋๋ค.์ฅ์ :
:hover
์ ์ํ์์๋ง ๋ํ๋๋ ์ด๋ฏธ์ง๊ฐ ํ์ํ ๋, ๋ค์ด๋ก๋๋์ง ์๋ ์ด๋ฏธ์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ค์ด๋ก๋ํ์ฌ ๊น๋ฐ์์ด ๋ณด์ด์ง ์์ต๋๋ค.autoprefixer
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒค๋ ํ๋ฆฌํฝ์ค๋ฅผ ์ฝ๋์ ์๋์ผ๋ก ์ถ๊ฐํฉ๋๋ค.์ด๋ฌํ ๊ธฐ์ ์ Accessibility(a11y)์ ๊ด๋ จ์ด ์์ต๋๋ค.
visibility: hidden
. ํ์ง๋ง, ์์๋ ์ฌ์ ํ ํ์ด์ง์ ํ๋ฆ์ ์ฌ์ ํ ๊ณต๊ฐ์ ์ฐจ์งํ๊ฒ ๋ฉ๋๋ค.width: 0; height: 0
. ์์๊ฐ ํ๋ฉด์ ์ด๋ค ๊ณต๊ฐ๋ ์ฐจ์งํ์ง ์๋๋ก ํฉ๋๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ณด์ด์ง ์๊ฒ ๋ฉ๋๋ค.position: absolute; left: -99999px
. ํ๋ฉด ์ธ๋ถ์ ๋ฐฐ์นํฉ๋๋ค.text-indent: -9999px
. ์ด๊ฒ์ block
์ธ ์์ ๋ด์ ํ
์คํธ์์๋ง ์๋ํฉ๋๋ค.WAI-ARIA๊ฐ ์ด์์ ์ธ ํด๊ฒฐ์ฑ
์ด๋ผ ํ๋๋ผ๋ ์ ๋ absolute
์์น์ง์ ์ ๊ทผ๋ฐฉ๋ฒ์ ํํ ๊ฒ์
๋๋ค. ๋๋ถ๋ถ์ ์์์ ์๋ํ๋ฉฐ ๊ฐ๋จํ ๊ธฐ์ ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.