[๋ฉ‹์‚ฌ๐Ÿฆ] 3์ฃผ์ฐจ(์›”) flex ์‚ฌ์šฉํ•œ ๋ ˆ์ด์•„์›ƒ ์‹ค์Šต

์Ÿˆ๋ชฝยท2021๋…„ 11์›” 15์ผ
3

๊ฐœ๋ฐœ๋‰ด๋น„(21/10/23~)

๋ชฉ๋ก ๋ณด๊ธฐ
18/20

๋ฉ‹์Ÿ์ด ์‚ฌ์ž์ฒ˜๋Ÿผ๐Ÿฆ ํ”„๋ก ํŠธ์—”๋“œ ์Šค์ฟจ 1๊ธฐ 3์ฃผ์ฐจ(์›”) ํšŒ๊ณ  - November 15, 2021.

[ ๊ณต๋ถ€ ]

์˜ค๋Š˜ ์ˆ˜์—… ์ค‘ ๋‹จ์—ฐ ๊ธฐ์–ต์— ๋‚จ๋Š” ๋ง์ด ์žˆ๋‹ค.
"์—ฌ๋Ÿฌ๋ถ„, ์—ฌ๋Ÿฌ๋ถ„ ์ธ์ƒ์—์„œ ์ด๋ ‡๊ฒŒ ๋‹จ๊ธฐ๊ฐ„์— ์„ฑ์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋ช‡ ๋ฒˆ์ด๋‚˜ ์˜ฌ ๊ฒƒ ๊ฐ™์œผ์„ธ์š”?"
์ดํ˜ธ์ค€ ๊ฐ•์‚ฌ๋‹˜์ด ์Šค์น˜๋“ฏ ํ•˜์‹  ๋ง์ด์ง€๋งŒ ๊ณ„์† ๋จธ๋ฆฟ์†์— ์ด ๋ง์ด ๋งด๋ˆ๋‹ค.
์–ด๋ ต๊ฒŒ ์žก์€ ์†Œ์ค‘ํ•œ ๊ธฐํšŒ๋ฅผ ํ—ˆํˆฌ๋ฃจ ๋ณด๋‚ด๋ฉด ์•ˆ๋  ์ผ์ด๋‹ค.

์ด์ œ 11์›”์˜ ๋ฐ˜์ด ๋‚จ์•˜์œผ๋‹ˆ ์ฒ˜์Œ ๊ณ„ํšํ–ˆ๋˜๋Œ€๋กœ ์ฝ”ํ…Œ ๋‹จ๊ณ„๋ณ„ ๋ฌธ์ œํ’€์ด๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ๊ฐ€ ์˜จ ๊ฒƒ ๊ฐ™๋‹ค. ์•„์ง ์Šคํ„ฐ๋””๋ฅผ ํ•  ๋ ˆ๋ฒจ์€ ์•„๋‹ˆ๋ผ๊ณ  ์ƒ๊ฐ๋˜๊ณ , ๊ธฐ์ดˆ ์—ญ๋Ÿ‰์„ ๋‚ด ๋ณดํญ์— ๋งž๊ฒŒ ์ฐจ๊ทผ์ฐจ๊ทผ ํ‚ค์›Œ๋‚˜๊ฐˆ ๊ฒƒ์ด๋‹ค.

์ง€๊ธˆ๋„ ๋ช‡ ๋ฌธ์ œ ํ’€๋‹ค ์™”๋Š”๋ฐ, ์ฃผ๋ง 2์ฃผ์งธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€ํ•˜๊ธธ ์ž˜ํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
์ตœ์†Œํ•œ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์ดํ•ด๋Š” ๋˜๋‹ˆ๊นŒ! ํ•  ์ˆ˜ ์žˆ๋‹ค ๐Ÿ˜Š


[ ๊ฐ•์˜์š”์•ฝ ]

๊ฐœํ–‰(์ค„๋ฐ”๊ฟˆ) ๋ฐฉ๋ฒ•

1) <br>ํƒœ๊ทธ๋ฅผ ์“ฐ๋˜, ๋ชจ๋ฐ”์ผ์—์„œ๋Š” display: none;์œผ๋กœ ์—†์•ค๋‹ค.
2) <p>ํƒœ๊ทธ๋กœ ๊ฐ์‹ธ์„œ ๊ฐœํ–‰ํ•˜๋Š” ๋ฐฉ์‹
3) <span class="br"></span> ๋ฐฉ์‹์€ ์˜๊ฒฌ์ด ๋‚˜๋‰œ๋‹ค.
4) ๊ฐœํ–‰์˜ ๋ชฉ์ ์ด ๊ฐ•์กฐ๋ผ๋ฉด <strong>์ด๋‚˜ <em>์œผ๋กœ ๊ฐœํ–‰์„ ํ•˜๊ธฐ๋„ ํ•จ

@-๊ทœ์น™ (At-Rules)

์‹๋ณ„์ž(identifier)๊ฐ€ ๋’ค๋”ฐ๋ฅด๋Š” at ๊ธฐํ˜ธ๋กœ ์‹œ์ž‘ํ•˜๋Š” CSS๋ฌธ์„ ๋งํ•œ๋‹ค.
์ง€๊ธˆ๊นŒ์ง€ ํ•œ๋ฒˆ์ด๋ผ๋„ ์จ๋ณธ ๊ฒƒ๋“ค ์ •๋ฆฌ
@charset โ€” ์Šคํƒ€์ผ ์‹œํŠธ์— ์˜ํ•ด ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž ์ง‘ํ•ฉ์„ ์ •์˜ํ•จ.
@import โ€” CSS ์—”์ง„์—๊ฒŒ ์™ธ๋ถ€ ์Šคํƒ€์ผ ์‹œํŠธ๋ฅผ ํฌํ•จํ•˜๋„๋ก ์•Œ๋ฆผ.
@media โ€” media query๋กœ ์ •์˜๋œ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ํ•ด๋‹น ์ฝ˜ํ…์ธ ๋ฅผ ์ ์šฉํ•˜๋Š” ๊ทœ์น™.
@font-face โ€” ๋‹ค์šด๋กœ๋“œ๋˜๋Š” ์™ธ๋ถ€ ๊ธ€๊ผด์˜ ์–‘์ƒ์„ ์„ค๋ช….
@keyframes โ€” CSS ์• ๋‹ˆ๋ฉ”์ด์…˜ sequence ๋‚ด ์ค‘๊ฐ„ ๋‹จ๊ณ„์˜ ์–‘์ƒ์„ ์„ค๋ช….

๋ณ€์ˆ˜ ์„ ์–ธ

๋ฉ”์ธ ํฐํŠธ์™€ ์ž์ฃผ ์“ฐ๋Š” ๋ฉ”์ธ ์ปฌ๋Ÿฌ๋“ค์€ ๋ณ€์ˆ˜๋กœ ๋งŒ๋“ค์–ด๋‘๋ฉด ํŽธํ•˜๋‹ค.

:root {
  --๋ณ€์ˆ˜์ด๋ฆ„: ๊ฐ’;
}

ํ›„์— var(--๋ณ€์ˆ˜์ด๋ฆ„);์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด ๋œ๋‹ค.

์›นํฐํŠธ ์ตœ์ ํ™” (JS ์‚ฌ์šฉ)

    <script src="https://cdnjs.cloudflare.com/ajax/libs/fontfaceobserver/2.1.0/fontfaceobserver.standalone.js"></script>
    <script>
        document.documentElement.classList.add('blocking-time');

        setTimeout(function () {
            document.documentElement.classList.remove('blocking-time');
        }, 400)

        var font = new FontFaceObserver('Nanum Pen Script');
        // FontFaceObserver CDN ํ•„์š”ํ•จ

        font.load(null, 300).then(function () {
            document.documentElement.classList.add('fonts-loaded');
        });
        // ๋„คํŠธ์›Œํฌ ์ƒํ™ฉ์— ๋งž๊ฒŒ ์‹œ๊ฐ„ ์กฐ์ ˆ
    </script>

flex ์ดํ•ดํ•˜๊ธฐ

  • flex๋Š” ํ•˜๋‚˜์˜ flex-item์ด flex-container ๊ณต๊ฐ„์— ๋งž์ถ”๊ธฐ ์œ„ํ•ด ํฌ๊ธฐ๋ฅผ ํ‚ค์šฐ๊ฑฐ๋‚˜ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์„ ์ •ํ•œ๋‹ค.
  • /* Three values: flex-grow | flex-shrink | flex-basis */ ์ˆœ์„œ๋Œ€๋กœ ๋‹จ์ถ• ์†์„ฑ.
  • /* One value, length or percentage: flex-basis */
    /* One value, unitless number: flex-grow */
  • /* Two values: flex-grow | flex-basis(length or percentage) */
    /* Two values: flex-grow | flex-shrink(unitless number) */
  • flex-basis๋Š” ๊ธธ์ด(length)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‹จ์œ„๋“ค em, rem, px ํ˜น์€ ํผ์„ผํ‹ฐ์ง€(%)๋กœ ์“ธ ์ˆ˜ ์žˆ๊ณ ,
    ํ˜น์€ content, min-content, max-content, fill, auto ๋“ฑ์„ ๊ฐ’์œผ๋กœ ๋ฐ›๋Š”๋‹ค. (mdn ์ฐธ๊ณ )
  • flex-basis: content;๋Š” ์ฝ˜ํ…์ธ  ํฌ๊ธฐ์— ๋งž๊ฒŒ ์ž๋™์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ ˆ๋œ๋‹ค.
  • flex-basis: auto;๋ฅผ ์ฃผ๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฅธ ๋ฐ•์Šค๊ฐ€ ๋Š˜์–ด๋‚  ๋•Œ ๊ฐ™์ด stretch ๋œ๋‹ค.
    ๋˜๋Š” ์ง€์ •ํ•ด์ค€ width ๋˜๋Š” height ๊ฐ’์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • auto ๊ฐ’์„ ๊ฐ€์ง€์ง€ ์•Š์€ flex-basis์™€
    width(flex-direction: column์ธ ๊ฒฝ์šฐ height) ๊ฐ’์„ ๋™์‹œ์— ์ ์šฉํ•œ ๊ฒฝ์šฐ, flex-basis๊ฐ€ ์šฐ์„ ํ•œ๋‹ค.
  • ์ฆ‰, flex-item์— width์™€ height ๊ฐ’์„ ์ง์ ‘ ์ •ํ•ด์ฃผ๊ธฐ๋ณด๋‹ค๋Š”,
    flex-basis๋กœ ์ •ํ•ด์ฃผ๋ฉด flex-direction์ด ๋ณ€ํ•˜๋”๋ผ๋„ ์›ํ•˜๋Š” ๋„“์ด๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • flex-grow์™€ flex-shrink๋Š” ๋‹จ์œ„ ์—†์ด ์ˆซ์ž(number) ๋‹จ๋…์œผ๋กœ ์“ฐ์ธ๋‹ค. (1, 2, 0.5, ...)
  • ๊ทธ๋ฆฌ๋“œ์—์„œ์˜ fr ๊ฐœ๋…๊ณผ ์œ ์‚ฌํ•˜๋‹ค. (ํ˜•์ œ flex-item๊ณผ ๋น„๊ต)
  • ์„ค์ •๋œ ์ˆซ์ž๊ฐ’์— ๋”ฐ๋ผ flex-container ๋‚ด๋ถ€์—์„œ flex-item์˜ ํฌ๊ธฐ๊ฐ€
    flex-grow๋Š” ๋Š˜์–ด๋‚˜๊ณ , flex-shirink๋Š” ์ค„์–ด๋“ ๋‹ค.
  • flex-shrink ๊ฐ’์ด 0์ด๋ฉด flex-item์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด์ง€ ์•Š๋Š”๋‹ค.

์ƒ๋‹จ ๋ฉ”๋‰ด๋ฐ” ๋งŒ๋“ค๊ธฐ

  • "front-end ๊ฐœ๋ฐœ์ž ํฌํŠธํด๋ฆฌ์˜ค" - ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์˜ ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ๋ณด๋Š” ๊ฒƒ์€ ์ •๋ง ์ค‘์š”ํ•˜๋‹ค!
  • ๋ณดํ†ต ๋ฉ”๋‰ด๋ฐ”๋Š” ul๊ณผ li๋กœ ๋งŒ๋“ ๋‹ค.
  • ์™ผ์ชฝ์— ๋กœ๊ณ , ์˜ค๋ฅธ์ชฝ์— ๋ฉ”๋‰ด๋“ค์„ ๋ฐฐ์น˜ํ•˜๊ณ  ์‹ถ์„ ๋•Œ ๋กœ๊ณ ์— margin-right: auto;๋ฅผ ์ ์šฉํ•˜๋ฉด ๋œ๋‹ค!
  • bars ์•„์ด์ฝ˜์„ display: none; ํ•ด๋’€๋‹ค๊ฐ€, ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ์—์„œ display: block; ์„ค์ • ํ•˜๊ณ  order 1, ๋ฉ”๋‰ด๋“ค์—” order 2 ๊ฐ’์„ ์ค˜์„œ ์˜ค๋ฅธ์ชฝ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•œ๋‹ค. ๋„ˆ๋ฌด ์œ ์šฉํ–ˆ๋‹ค :)
  • ๋ฉ”๋‰ด๋“ค์€ flex-direction์„ row์—์„œ column์œผ๋กœ ๋ฐ”๊พผ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, width๊ฐ’์„ 100%๋กœ ์คฌ๋‹ค.

๊ฐ„๋‹จํ•œ ๋ชจ๋‹ฌ์ฐฝ ์‹ค์Šต

  • ๋ชจ๋‹ฌ ์ฐฝ์€ URL ๋ณ€๊ฒฝ์ด ์—†๊ณ , ๊ธฐ์กด ํŽ˜์ด์ง€ ์œ„์— ๋ ˆ์ด์–ด๋ฅผ ์”Œ์šฐ๋Š” ๊ฒƒ์ด๋‹ค. ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„
  • ํŒ์—… ์ฐฝ์€ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋ฅผ ๋„์šฐ๋Š” ๊ฒƒ์œผ๋กœ, ๋ชจ๋‹ฌ ์ฐฝ๊ณผ๋Š” ๊ตฌ๋ถ„ํ•ด์•ผ ํ•œ๋‹ค.
  • ๋ชจ๋‹ฌ ์ฐฝ์— position: fixed;๋ฅผ ์“ด๋‹ค.
    <script>
        let ๋ชจ๋‹ฌ = false;

        document.querySelector('.btn-close').addEventListener('click', function(){
            if (๋ชจ๋‹ฌ == true){
                document.querySelector('.๋’ท๋ฐฐ๊ฒฝ').style.display = 'none';
                ๋ชจ๋‹ฌ = false;
            }
        });

        document.querySelector('.btn-open').addEventListener('click', function(){
            if (๋ชจ๋‹ฌ == false){
                document.querySelector('.๋’ท๋ฐฐ๊ฒฝ').style.display = 'flex';
                ๋ชจ๋‹ฌ = true;
            }
        });
    </script>

querySelector์™€ addEventListener ๋“ฑ ์ฃผ๋ง์— ๊ณต๋ถ€ํ–ˆ๋˜ ๊ฐœ๋…๋“ค์ด๋ผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค ๐Ÿ˜†


holy grail layout (๋ฐ˜์‘ํ˜•)

(https://ddooyn.github.io/front-end-school/class/001.%20flex/012.html)
์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ์•ˆ์— ๋ ˆ์ด์•„์›ƒ ์‚ฌ์ง„์„ ๋ณด๊ณ  ํ˜ธ๋‹ค๋‹ฅ ๋งŒ๋“ค์–ด ๋ณด์•˜๋Š”๋ฐ, ์•ž์—์„œ ๋ฐฐ์šด ๋ฐ˜์‘ํ˜• ์ƒ๋‹จ ๋ฉ”๋‰ด๋ฐ”๊นŒ์ง€๋Š” ์ ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋‹ค. ์ฐฝ ํฌ๊ธฐ ์ค„์–ด๋“ค ๋•Œ aside๋ฅผ ์•„๋ž˜๋กœ ๋‚ด๋ฆฌ๋Š” ๋ฐฉ๋ฒ• ๋“ฑ์˜ ํŒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด์—ˆ๋‹ค :)


> ์ฐธ๊ณ ์ž๋ฃŒ

1) https://developer.mozilla.org/ko/docs/Web/CSS/At-rule
2) https://d2.naver.com/helloworld/4969726 ์›น ํฐํŠธ ์ตœ์ ํ™”
3) https://developer.mozilla.org/ko/docs/Web/CSS/flex
4) https://developer.mozilla.org/ko/docs/Web/CSS/flex-basis
5) https://developer.mozilla.org/ko/docs/Web/CSS/flex-shrink

profile
FE ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ธฐ ์œ„ํ•œ ์ถ”์ง„๋ ฅ์„ ์–ป๋Š” ์ค‘

0๊ฐœ์˜ ๋Œ“๊ธ€