๋ฌธ์ ๋ชฉ๋ก์ผ๋ก ๋์๊ฐ๊ธฐ
๐ก์ง์์๋ต์ https://github.com/pul8219/TIL
Issues
ํญ์ ์๋ง์ step ์ด์์์ ๋จ๊ฒจ์ฃผ์ธ์. โก๏ธ Issueํญ์ผ๋ก ์ด๋
- ์์ฑ์: Wol-dan (@pul8219)
- ์คํฐ๋ ์ฃผ์ : FrontEnd ๋ฉด์ ์คํฐ๋ https://gitlab.com/siots-study/topics/-/wikis/%EC%8B%AC%ED%99%941
- ๊ณต๋ถ ๋ฒ์: STEP 37 ์ฝ๋์คํผ์ธ 76 CSS Rendering - 1ํ์ฐจ 2/2
- ๊ธฐํ: 05/15(ํ ) ~ 05/18(ํ)
left | right | none | inherit
- NEW BFC: ์๋ก์ด BFC๋ฅผ ํ์ฑํ๋ค.
- FLOAT OVER NORMAL FLOW: NORMAL FLOW ์์ ๊ทธ๋ ค์ง๋ค.
- TEXT, INLINE GUARD
LINE BOX
- FLOAT๋ BFC, IFC๋ฑ์ ๊ณต์์ผ๋ก ๊ทธ๋ ค์ง์ง ์๊ณ ,
LINE BOX
๋ผ๋ ๊ณต์์ผ๋ก ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๋ค. (์ฐธ๊ณ - ์ ๋ฒ ์๊ฐ์ ๋ฐฐ์ ๋ฏNORMAL FLOW
๋ BFC, IFC, relative position ์๋ฆฌ๋ก ๊ทธ๋ ค์ง๋ค.)
- FLOAT๋ BFC, IFC๋ฑ์ ๊ณต์์ผ๋ก ๊ทธ๋ ค์ง์ง ์๊ณ ,
<div style="width:500px">
<div style="height:50px;background:red"></div>
<div
style="width:200px;height:150px;float:left;background:rgba(0,255,0,0.5)"
></div>
<div style="height:50px;background:skyblue"></div>
</div>
- BFC๊ฐ ์์๋๊ณ ๋นจ๊ฐ ๋ฐ์ค๊ฐ ๊ทธ๋ ค์ง๋ค.
- FLOAT ์์๋ฅผ ๋ง๋๋ฉด ์๋ก์ด BFC ์์ญ์ด ์์ฑ๋๋ค.
skyblue
์ ๋ฐ์ค๋ ๋ฐ๋ก ์์์ ๋ง๋ค์ด์ง BFC ์์ญ ์์์ NORMAL FLOW๋ก ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๋ค.- FLOAT ์์์ธ ์ด๋ก์๋ฐ์ค๋ ๊ฐ์ฅ ๋ฐ๊นฅ์ ๋ ์๋ค.
- FLOAT ์์๋ก ์ธํด ๋ง๋ค์ด์ง ์๋ก์ด BFC์ ํฌ๊ธฐ๋
FLOAT ์์ญ ์ ์ฒด + INLINE ์์ญ ์ ์ฒด
๊ฐ ์ฐจ์งํ๋ ๊ณต๊ฐ์ด๋ค.(?) - FLOAT๋ ์ถ๊ฐ์ ์ธ BFC ์์ญ์ ๋ง๋๋ ์ญํ ์ ํ๋ค.
- BFC, IFC ์์ญ์ด ๋ง์์ง ์๋ก GEOMETRY ๊ณ์ฐ์ด ๋ณต์กํด์ง๋ค.
FLOAT๋ INLINE์์์ ๋ํด์ (๋ชป ๊ทธ๋ ค์ง๊ฒ ํ๋) ๊ฐ๋๋ก ๋์ํ๋ค.
<div style="width:500px">
<div style="height:50px;background:red"></div>
<div
style="width:200px;height:150px;float:left;background:rgba(0,255,0,0.5)"
></div>
HELLO
<div style="height:50px;background:skyblue">WORLD</div>
!!
</div>
HELLO
์ด๋ก์ ๋ฐ์ค ๋ค์ ๊ทธ๋ ค์ ธ์ผํ ๊ฒ์ผ๋ก ๊ธฐ๋๋๊ฒ ์ง๋ง ์๋๋ค.- FLOAT ์์๊ฐ INLINE์์์ GUARD์ญํ ์ ํ๊ธฐ ๋๋ฌธ์
HELLO
๋ FLOAT ๋ฐ๊นฅ์ ๊ทธ๋ ค์ง๋ค. - FLOAT ์์๋ INLINE์์์๋ง ๊ฐ๋๋ก ์๋ํ๋ค.
- BLOCK์์์๋ ๊ฐ๋๋ก ์๋ํ์ง ์๋๋ค. ๋ฐ๋ผ์ skyblue์ ๋ฐ์ค๋ ๊ทธ๋๋ก ๊ทธ๋ ค์ง๋ค.
- ๋ํ DOM์ ํฌํจ๊ด๊ณ์ ๊ด๊ณ์์ด INLINE์์๋ ๊ฐ๋๋๋ค. ๋ฐ๋ผ์
WORLD
๋ผ๋ ๋จ์ด๋ DOM๊ตฌ์กฐ์ skyblue์ ๋ฐ์ค ์์ ์์ง๋ง, FLOAT ๋ฐ๊นฅ์ ๊ทธ๋ ค์ง๊ฒ๋๋ค.
FLOAT๊ฐ ์ง์ฅ์ด๋ผ๊ณ ๋๋ผ๋ ์ด์ ๋ LINE BOX์ ๋ํ ์ ํํ ์ดํด๊ฐ ์์ด์์ด๋ค.
<head>
<style>
.left {
float: left;
background: rgba(0, 255, 0, 0.5);
}
.right {
float: right;
background: rgba(255, 0, 0, 0.5);
}
</style>
</head>
<body>
<div style="width:500px">
<div class="left" style="width:200px;height:150px">1</div>
<div class="right" style="width:50px;height:150px">2</div>
<div class="right" style="width:50px;height:100px">3</div>
<div class="left" style="width:150px;height:50px">4</div>
<div class="right" style="width:150px;height:70px">5</div>
<div class="left" style="width:150px;height:50px">6</div>
<div class="left" style="width:150px;height:50px">7</div>
<div style="height:30px;background:skyblue">ABC</div>
</div>
</body>
- ์์์ ์ธ๊ธํ๋ฏ FLOAT์์๋ ์๋ก์ด BFC ์์ญ์ ์์ฑํ๋ค.
- ๊ทธ BFC ์์ญ์ (์ ์๊ฐ์ ๋ฐฐ์ ๋ฏ์ด) ๋ถ๋ชจ์ ๊ฐ๋ก๊ธธ์ด(width)๋งํผ์ ๋ค ๋จน๋๋ค.
- ์ด๋งํผ์ BFC ์์ญ์ด ์ฒซ FLOAT์์๋ฅผ ๊ทธ๋ฆด ์ ์๋ ๊ณต๊ฐ์ธ LINE BOX1์ด ๋๋ค. float: left์ด๋๊น ํด๋น LINE BOX์ ๊ฐ์ฅ ์ผ์ชฝ์ FLOAT ์์๊ฐ ๊ทธ๋ ค์ง๋ค.
- ๋๋ฒ์งธ
DIV
๋ ์ฒซ๋ฒ์งธ FLOAT ์์๋ฅผ ์ ์ธํ ๊ณต๊ฐ์ด LINE BOX2๊ฐ ๋๋ค. ์ด LINE BOX์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ๊ทธ๋ ค์ง๋ค.(float: right์ด๋๊น) (DIV๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ๊ทธ๋ ค์ง ์ ์๋ LINE BOX๊ฐ ์ด๋ฏธ ๊ณ์ฐ๋์ด์๋ค.)
- LINE BOX๋ ์ธ๋กํฌ๊ธฐ๋ ๊ณ ๋ คํ๋ค. ์ธ๋ฒ์งธ DIV ๋ฐ์ค๊ฐ ํ์ํ HEIGHT๋ 100PX๋๊น LINE BOX๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๊ณ์ฐ๋๋ค. ๊ทธ LINE BOX๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์ธ๋ฒ์งธ DIV ๋ฐ์ค๊ฐ ๊ทธ๋ ค์ง๋ค.
- ๋ค์ฏ๋ฒ์งธ DIV ๋ฐ์ค๋ ๊ณต๊ฐ์ด ๋ถ์กฑํด ๋ค๋ฒ์งธ DIV๋ฐ์ค ์ค๋ฅธ์ชฝ์ ๊ทธ๋ ค์ง ์ ์๋ค. ์ด๋ด ๊ฒฝ์ฐ, ์ง์ LINE BOX(4)์ ๋ฐ๋ฅ์ (BASE LINE)์ ๊ธฐ์ค์ผ๋ก ์๋ ๋จ์ ๊ณต๊ฐ์ ๊ฐ์ฅ ์ผ์ชฝ, ์ค๋ฅธ์ชฝ๋ฅผ ๋ฐ์ ธ์ ์๋ก์ด LINE BOX ์์ญ์ด ๊ณ์ฐ๋๋ค. ๋ค์ฏ๋ฒ์งธ DIV ๋ฐ์ค๋ ์ด LINE BOX์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ๋ถ์ฌ ๊ทธ๋ ค์ง๋ค.(
float: right
๋๊น) - LINE BOX 5์ ์ ์ฅ์์ ๋ฐ์ค3 ์๋ ์๋ ๋น ๊ณต๊ฐ์ ๋ฌด์๋๋ค.(5๋ฒ ๋ฐ์ค๊ฐ LINE BOX์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ๋ฐฐ์น๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ. ๋ ์ค๋ฅธ์ชฝ์ ์์ ์ ์๋ค.)
- ๋ฐ์ค7์ ๊ทธ๋ฆด ๋๋ ์ง์ ์ BASE LINE์ด ๋ด๋ ค์ค๋ค ๋ฐ์ค2์ BASE LINE์ ๊ฑธ๋ฆฐ๋ค.(๋ฐ์ค6์ ๋ฐ๋ฅ๋ณด๋ค ๋จผ์ ๋ฑ์ฅ)
-
๋ง์ง๋ง DIV ๋ฐ์ค๋ float์ด ์๋๋ค. (
ABC
) ๋งจ์ฒ์ float์์๊ฐ ์์ฑํ BFC ์์ญ์์น์์ NORMAL FLOW๋ก ๊ทธ๋ ค์ง๋ค. ์์ ์๋ ABC๋ ํ ์คํธ ์ฆ ์ธ๋ผ์ธ์์์ด๋ฏ๋ก ๊ฐ๋๋ฅผ ์ ์ฉ๋ฐ์ FLOAT ์์์ ๋ฐ๊นฅ ์ค '์ด์๋จ์' ์์ญ์ ๊ทธ๋ ค์ง๊ฒ๋๋ค. -
๊ท์น
- LINE BOX๋ FLOAT์์๋ง ์ ๊ฒฝ์ด๋ค. LINE BOX๊ฐ ๊ณ์ฐ๋ ๋๋ FLOAT์์๋ง ๊ณ ๋ คํ๋ค.
- LEFT๋ณด๋ค ๋ ์ผ์ชฝ์ ๊ทธ๋ ค์ง์ง ์๊ณ , RIGHT๋ณด๋ค ๋ ์ค๋ฅธ์ชฝ์ ๊ทธ๋ ค์ง์ง ์๋๋ค.
- ๋น ๊ณต๊ฐ์ LEFT์ RIGHT ์ฌ์ด์๋ง ๊ฐ๋ฅํ๋ค.
<head>
<style>
.left {
float: left;
background: rgba(0, 255, 0, 0.5);
}
.right {
float: right;
background: rgba(255, 0, 0, 0.5);
}
</style>
</head>
<body>
<div style="width:500px">
<div class="left" style="width:200px;height:150px">1</div>
<div class="right" style="width:50px;height:150px">2</div>
<div class="right" style="width:50px;height:100px">3</div>
<div class="left" style="width:150px;height:50px">4</div>
<div class="right" style="width:150px;height:70px">5</div>
<div class="left" style="width:150px;height:50px">6</div>
<div class="left" style="width:150px;height:50px">7</div>
<div style="height:30px;background:skyblue">
ABC1 ABC2 ABC3 ABC4 ABC5 ABC6 ABC7 ABC8
<!-- โ๏ธ ์์ 3์์ ์์ ํ ๋ถ๋ถ(์ด๋ ๊ฒ ๋ฐ๋ ๊ฒฝ์ฐ, ์ด๋ป๊ฒ ๊ทธ๋ ค์ง์ง ๊ฒฐ๊ณผ๋ฅผ ์์ํด๋ณด์) -->
</div>
</div>
</body>
'์ด์๋จ์' ๊ณต๊ฐ์ ๊ธ์๋ค์ด ์์์ ๋ค์ด๊ฐ๋ค. LINE BOX๋ฅผ ์ดํดํ๋ฉด ๊ธ์๊ฐ (์ธ๋ก๋ก ๊ธด) ๊ณก์ ์ ๋ฑ๋ชจ์์ฒ๋ผ ๋์ค๊ฒ ์ถ๋ ฅํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค.
CSS2.1 VISUAL FORMATTING MODEL
VISIBLE | HIDDEN | SCROLL | INHERIT | AUTO
- AUTO: ๋ด๋ถ์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ๋ถ๋ชจ๋ ์ปค์ง๋ค. GEOMETRY์ ํฌ๊ธฐ๊ฐ ์ง์ ๋ณํ๋ค.
- VISIBLE: ๋ณด์ผ ๋๊น์ง ์ปค์ง๋ค. ์ผ๋ฐ์ ์ธ ๋ธ๋ผ์ฐ์ ์์๋ VISIBLE = AUTO ๊ฐ์ ์๋ฏธ์ด๋ค.
- SCROLL: ๋ด GEOMETRY ๋์ด๊ฐ๋ ์ปจํ ์ธ ๊ฐ ๋ฐ์ํ๋ฉด ์คํฌ๋กค๋ฐ๋ฅผ ๋ง๋ ๋ค.
- HIDDEN: ๋ด GEOMETRY ๋์ด๊ฐ๋ ์ปจํ ์ธ ๊ฐ ๋ฐ์ํ๋ฉด ์๋ณด์ด๊ฒ ์๋ผ๋ฒ๋ฆฐ๋ค.
OVERFLOW๊ฐ HIDDEN
, SCROLL
์ผ ๋
- NEW BFC: ์๋ก์ด BFC๋ฅผ ์ฆ์ ์์ฑํ๋ค.
- FIRST LINE BOX BOUND: ์ฒซ๋ฒ์งธ LINE BOX๋ฅผ ์ด์ฉํด BFC ์์ญ์ ๋ง๋ ๋ค.
<head>
<style>
.left {
float: left;
background: rgba(0, 255, 0, 0.5);
}
.right {
float: right;
background: rgba(255, 0, 0, 0.5);
}
</style>
</head>
<body>
<div style="width:500px">
<div class="left" style="width:200px;height:150px">1</div>
<div class="right" style="width:50px;height:150px">2</div>
<div class="right" style="width:50px;height:100px">3</div>
<div class="left" style="width:150px;height:50px">4</div>
<div class="right" style="width:150px;height:70px">5</div>
<div class="left" style="width:150px;height:50px">6</div>
<div class="left" style="width:150px;height:50px">7</div>
<div style="height:30px;overflow:hidden;background:skyblue">A</div>
<!-- div8 -->
</div>
</body>
- ๋ฐ์ค div8์ ์ฒ์ float ์์๊ฐ ๋ง๋ค์ด์ง ๋ BFC ์์ญ์ ์ํ ๊ฒ ๊ฐ์ผ๋, overflow ์์ฑ์ด hidden์ด๊ธฐ ๋๋ฌธ์ ์๋ก์ด BFC ์์ญ์ด ๋ง๋ค์ด์ง๋ค.
- BFC๋ ๋ถ๋ชจ๋งํผ width๋ฅผ ๊ฐ๋๋ค๋ ์์น์ ๊ฐ์ง๊ณ ์๋ค.
- ๊ทธ๋ฐ๋ฐ overflow๊ฐ hidden์ด๋ฉด ์ด ๋ถ๋ชจ ์์ญ์ ๊ณ์ฐํ ๋ LINE BOX BOUND๋ฅผ ๊ณ์ฐํ๋ค. ๋ฐ๋ผ์ ์คํ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ์ด ๋ํ๋๋ค. (LINEBOX ๋จ์ ๊ณต๊ฐ์ ๊ทธ๋ ค์ง ๊ฒ์ ๋ณผ ์ ์๋ค.)
- LINE BOX๋ฅผ ์ฒ์ ๊ณต๋ถํ๋ ์์ 3๊ณผ ๋น๊ตํด๋ณผ ๊ฒ
<div style="width:500px">
<!-- ... -->
<!-- 1๏ธโฃ -->
<div style="height:30px;overflow:hidden;background:red">A</div>
<!-- 2๏ธโฃ -->
<div style="height:15px;overflow:hidden;background:orange">B</div>
<!-- 3๏ธโฃ -->
<div style="height:30px;background:black"></div>
<!-- 4๏ธโฃ -->
<div style="height:30px;overflow:hidden;background:red">C</div>
<!-- 5๏ธโฃ -->
<div style="height:20px;overflow:hidden;background:orange">D</div>
<!-- 6๏ธโฃ -->
<div style="height:30px;background:black"></div>
<!-- 7๏ธโฃ -->
<div style="overflow:hidden;background:red">E</div>
<!-- 8๏ธโฃ -->
<div style="height:30px;background:black"></div>
<!-- 9๏ธโฃ -->
<div style="height:30px;overflow:hidden;background:orange">F</div>
<!-- 1๏ธโฃ0๏ธโฃ -->
<div style="height:30px;background:black"></div>
</div>
- 1๏ธโฃ overflow:hidden์ด๋ผ ์๋ก์ด BFC ์์ญ์ด ์์ฑ๋๊ณ , LINE BOX BOUND๋ฅผ ๊ณ์ฐํด ๊ฒฐ๊ณผ์ ๋ณด์ด๋ ๊ฒ๊ณผ ๊ฐ์ด ๊ทธ๋ ค์ง๋ค.
- 2๏ธโฃ 1๋ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ทธ๋ ค์ง๋ค.
- 3๏ธโฃ ์ด DIV๋ OVERFLOW:HIDDEN์ด ์๋๋ค. ์ด ๋ฐ์ค๋ 2๋ฒ์ BFC์ ์์๋ DIV๊ฐ ๋์ ๊ฐ๋ก๋ฅผ ๋ชจ๋ ์ฐจ์งํ๋ค. (2๋ฒ์ BFC๊ฐ ํ์ฅ๋์๋ค.)
- 4๏ธโฃ 1,2๋ฒ๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ทธ๋ ค์ง๋ค.
- 5๏ธโฃ height๊ฐ 20px์ธ๋ฐ ์ด ๋ฐ์ค๊ฐ ๊ทธ๋ ค์ง ๊ณต๊ฐ์ด ์๋ค.(๋ถ๋ชจ width๊ฐ 0์ธ ์ํ. line bound box๋ฅผ ๊ณ์ฐํ์ง๋ง ๊ทธ๋ฆด ์ ์๋ค๋ ๊ฑธ ์์์) ๋ฐ๋ผ์ ์์ด์ง๋ค. ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง์ง์์ง๋ง BFC ์์ญ์ height 20px์ ๋ง์ถฐ ์์ฑ๋๋ค.
- 6๏ธโฃ 5๋ฒ ๋ค์์ ๊ทธ๋ ค์ง๋ค. (5๋ฒ์ BFC ์์ญ์ด ํ์ฅ๋จ)
- 7๏ธโฃ ๊ทธ๋ฆด๊ณณ์ด ์์ด์ ๊ทธ๋ ค์ง์ง ์์(BFC ๊ณต๊ฐ์ ์ฐจ์ง) (left๋ฐ์ ์์ผ๋)
- 8๏ธโฃ 7๋ฒ ๋ค์์ ๊ทธ๋ ค์ง๋ค.
- 9๏ธโฃ line box ๊ฒฝ๊ณ๊ฐ ๋์ด์ ์์ผ๋ ์ผ๋ฐ์ ์ธ BFC ์ฒ๋ผ ๊ทธ๋ ค์ง๋ค.
- 1๏ธโฃ0๏ธโฃ 9๋ฒ ๋ค์์ ๊ทธ๋ ค์ง๋ค.
์ค๋ ๋ฐฐ์ด ๊ฒ
- float์ normal flow์ ๊ด๊ณ
- float์ overflow:hidden์ ๊ด๊ณ
์ ๊ฒฐ๊ณผ์์ ์ (๋งจ์ ์ฌ์ด์ ๊ปด์๋) ๋นจ๊ฐ ๋ฐ์ค๊ฐ ๋์ด๋์ง ์์์๊น?(ABC8๊ณผ ๋ค์ ๊ทธ๋ฆผ์ด ๊ฒน์น๋ ๊ฒ์ ๋ณผ ์ ์์)
- ์ปจํ ์ธ ๊ฐ ์ปค์ BFC ๋ฐ์ค๋ฅผ ๋ฐ์ด๋ผ ๋ visible ์์ฑ์ด๋ฉด ๋์ด๋๋ค.
- ๊ทธ๋ฐ๋ฐ line box ๋๋ฌธ์ guard๊ฐ ์๋ํ๋ฉด์ inline ์์๊ฐ ๋ฐ๋ฆฐ๊ฑฐ๋ผ๋ฉด ๋์ด๋์ง ์๋๋ค.
- ABC8์ ๊ฒฝ์ฐ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ง๊ฒ ๋ฟ์ด์ง geometry ์์ญ์ ์ฐจ์งํ๊ณ ์๋ ๊ฒ ์๋(console-element๋ก๋ ํ์ธ ๊ฐ๋ฅ) ์ฌ์ง์ด ๋ค์ div๊ฐ ABC8์ ๋ฎ์ง๋ ์์๋ค
OVERFLOW MODULE LEVEL3 DRAFT
VISIBLE | HIDDEN | SCROLL | CLIP | AUTO
OVERFLOW๋ฅผ ํ๊บผ๋ฒ์ ๊ด๋ฆฌํ์ง ์๊ณ , OVERFLOW X์ถ, Y์ถ ๋ฐ๋ก ๊ด๋ฆฌํ๋ ์คํ์ด๋ค. RECOMMEND ์๋ค๊ฐ DRAFT(๊ถ๊ณ )๋ก ๋ณ๊ฒฝ๋๋ค. (why? ์๋ก์ด CSS ์คํ์ด ๋์ค๋ฉด์ ์ํฅ์ ๋ผ์ณค์. ๊ทธ๋์ DRAFT๋ก ๋ด๋ ค๊ฐ)
CSS2.1 UI MODULE LEVEL3
CLIP | ELLIPSIS
- ELLIPSIS: TEXT์ ๋ํด์
...
ํ์ํด์ค
์ง๊ธ๊น์ง ๋ฐฐ์ด ๊ฒ์ด ๊ณ ์ ๋ ์ด์์์ด๋ค. ๊ฑฐ์ ๋ชจ๋ ๋ธ๋ผ์ฐ์ ์์ ์ ๊ณตํ๋ฏ๋ก ๊ธฐ๋ณธ์ด ๋๋ ๊ฐ๋ ์ด๋ค. ๋ง์ด ์ฐ์ตํ ๊ฒ!