[TIL] 1116 LikeLion๐Ÿฆ FES 12

์ด์ถ˜๊ตฌยท2021๋…„ 11์›” 16์ผ
1

Holy Grail Layout by Grid

grid-template-area

HTML

        <div class="container">
            <div class="header"></div>
            <div class="section"></div>
            <div class="aside"></div>
            <div class="footer"></div>
        </div>

CSS

            .container {
                display: grid;
                grid-template-areas:
                    "header header header"
                    "section section section"
                    "footer footer footer";
                gap: 10px;
            }
            .header {
                grid-area: header; 
            }
            .section {
                grid-area: section;
            }
            .aside {
                grid-area: aside;
            }
            .footer {
                grid-area: footer;
            }

๊ทธ๋ฆฌ๋“œ ์•„์ดํ…œ์ธ .aside์— grid-area: aside๋ฅผ ๋ถ€์—ฌํ•ด๋†“๊ณ  .container์˜ grid-template-area์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์„œ ์ƒ๊ธด ๋ฌธ์ œ์ด๋‹ค.
grid-template-area์— aside์˜ ์ž๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ํ•ด๊ฒฐ๋œ๋‹ค.

grid-template-areas:
	"header header header"
	"section section aside"
	"footer footer footer"

grid-row, grid-column

            .container {
                display: grid;
                gap: 10px;
            }
            .header {
                grid-column: 1/4;
                grid-row: 1/2;
            }
            .section {
                grid-row: 2/3;
                grid-column: 1/3;
            }
            .aside {
                grid-row: 2/3;
                grid-column: 3/4;
            }
            .footer {
                grid-row: 3/4;
                grid-column: 1/4;
            }


transform: translate๋กœ z-index๊ฐ€ ๋ฌด์‹œ๋˜๋Š” ํ˜„์ƒ

HTML

        <div class="wrap">
            <section class="container">
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
                <div class="item"></div>
            </section>
        </div>

CSS

            .wrap {
                perspective: 1000px;
            }
            .container {
                display: grid;
                grid-template-columns: repeat(4, 1fr);
                gap: 20px;
                transform: rotateX(60deg) rotateZ(45deg);
            }
            
            .item {
                width: 100px;
                height: 100px;
                position: relative;
                transition: all 0.3s;
            }
            .item:hover {
                cursor: pointer;
                transform: translate(-10px, -10px);
            }
            .item::after {
                content: "";
                position: absolute;
                top: 10px;
                left: 10px;
                background-color: #999;
                width: 100px;
                height: 100px;
                z-index: -1;
            }

Toggle 3d Grid Perspective๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ์œ„์™€ ๊ฐ™์€ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์—ˆ๋‹ค.
์•„์ดํ…œ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ ๊ทธ๋ฆผ์ž๋Š” ๊ฐ€๋งŒํžˆ ๋‘๊ณ  ์•„์ดํ…œ๋งŒ ์œ„๋กœ ๋œจ๊ฒŒ ํ•˜๊ณ  ์‹ถ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์•„์ดํ…œ๊ณผ ๊ทธ๋ฆผ์ž๊ฐ€ ๊ฐ™์ด ๋œจ๋Š” ๊ฒƒ์€ ๋ฌผ๋ก , ๊ทธ๋ฆผ์ž๊ฐ€ ๋ณธ์ธ์˜ z-index: -1;์„ ๋ฌด์‹œํ•˜๊ณ  ์•„์ดํ…œ ์œ„๋กœ ์˜ฌ๋ผ์˜ค๊ธฐ๊นŒ์ง€ ํ–ˆ๋‹ค.

z-index๊ฐ€ ๋™์ž‘ํ•˜์ง€์•Š๋Š” ์ด์œ  4๊ฐ€์ง€ (๊ทธ๋ฆฌ๊ณ  ๊ณ ์น˜๋Š” ๋ฐฉ๋ฒ•)
z-index์— ๊ด€ํ•ด ์•„๋ฌด๋„ ๋งํ•ด ์ฃผ์ง€ ์•Š์€ ๊ฒƒ
SETTING THE STACKING ORDER OF PSEUDO-ELEMENTS BELOW THEIR PARENT ELEMENT
z-index by codrops
z-index์— ๊ด€ํ•œ ์—ฌ๋Ÿฌ ๊ธ€์„ ์ฐธ๊ณ ํ•ด๋ณธ ๊ฒฐ๊ณผ, ์ด ํ˜„์ƒ์€
1. ์›๋ž˜์˜ ์Œ“์ž„์ˆœ์„œ๋Œ€๋กœ๋ผ๋ฉด ๊ฐ€์ƒ์š”์†Œ(๊ทธ๋ฆผ์ž)๋Š” ๋ถ€๋ชจ์š”์†Œ(์นด๋“œ)์˜ ์œ„์— ์œ„์น˜ํ•˜๊ฒŒ ๋˜์ง€๋งŒ
2. ๊ฐ€์ƒ์š”์†Œ(๊ทธ๋ฆผ์ž)์— z-index: -1์„ ์ค˜์„œ ๊ฐ•์ œ๋กœ ๋Œ์–ด๋‚ด๋ ค ๋†“์€ ์ƒํƒœ๊ฐ€
3. transform์œผ๋กœ ์ธํ•ด ์ƒˆ๋กœ์šด ์Œ“์ž„๋งฅ๋ฝ์— ๋ฐฐ์น˜๋˜์—ˆ๊ณ ,
4. ๊ฐ€์ƒ์š”์†Œ(๊ทธ๋ฆผ์ž)๊ฐ€ ์›๋ž˜์˜ ์Œ“์ž„์ˆœ์„œ์— ๋”ฐ๋ผ
5. ๋ถ€๋ชจ์š”์†Œ(์นด๋“œ)์˜ ์œ„์— ์˜ค๊ฒŒ ๋œ ํ˜„์ƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

  • ๊ฐ€์ƒ์š”์†Œ์˜ ์Œ“์ž„์ˆœ์„œ๋ฅผ ํ‘œ์‹œํ•œ ์ด๋ฏธ์ง€

ํ•ด๊ฒฐ๋ฒ•

z-index๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์—ˆ์ง€๋งŒ ์•„์ง ์ดํ•ด๊ฐ€ ์™„์ „ํ•˜์ง€ ์•Š์•„ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜์„œ transform์ด ์•„๋‹ˆ๋ผ top, left๋กœ ์นด๋“œ๋ฅผ ์ด๋™ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์นด๋“œ์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ ์นด๋“œ๋ฅผ -10px๋งŒํผ ์˜ฌ๋ฆฌ๋ฉด ๊ทธ๋ฆผ์ž ์š”์†Œ๋„ ๋”ฐ๋ผ ์˜ฌ๋ผ์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๋ฅผ ์ƒ์‡„์‹œ์ผœ ๊ทธ๋ฆผ์ž๊ฐ€ ์ œ์ž๋ฆฌ์— ๊ฐ€๋งŒํžˆ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด 20px์„ ์ด๋™ํ•˜๋„๋ก ํ–ˆ๋‹ค.

            .item:hover {
                cursor: pointer;
                top: -10px;
                left: -10px;
            }
            .item::after {
                content: "";
                position: absolute;
                top: 10px;
                left: 10px;
                background-color: #999;
                width: 100px;
                height: 100px;
                z-index: -1;
            }
            .item:hover::after {
                top: 20px;
                left: 20px;
            }

์นด๋“œ๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋„ ๊ทธ๋ฆผ์ž๊ฐ€ ์ œ์ž๋ฆฌ์— ์žˆ๋Š” ๊ฑด ๊ตฌํ˜„ํ–ˆ์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒผ๋‹ค. ๋ฐ”๋กœ ์„ฑ๋Šฅ์ด ๋„ˆ๋ฌด ์•ˆ ์ข‹๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๋งˆ์šฐ์Šค๋ฅผ ์นด๋“œ์— ์˜ฌ๋ฆด ๋•Œ๋งˆ๋‹ค ๋ ˆ์ด์•„์›ƒ ๋ฐฐ์น˜๊ฐ€ ๋‹ค์‹œ ์ผ์–ด๋‚˜๊ณ (reflow) ํ”„๋ ˆ์ž„์ด ๋š๋š ๋–จ์–ด์ง„๋‹ค.
๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์ด ํ•„์š”ํ•˜๋‹ค.

๊ฐœ์„ ์ฑ…

            .item {
                width: 100px;
                height: 100px;
                position: relative;
                transition: all 0.3s;
                box-shadow: 10px 10px 5px 0px rgba(0,0,0,0.75);
            }
            .item:hover {
                cursor: pointer;
                transform: translate(-10px, -10px);
                /* top: -10px;
                left: -10px; */
                box-shadow: 20px 20px 10px 5px rgba(0,0,0,0.55);
            }

๊ทธ๋ฆผ์ž๋ฅผ ํ‘œํ˜„ํ•  ๊ฐ€์ƒ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋ณด๋‹จ ๊ทธ๋ฆผ์ž๋ผ๋Š” ์—ญํ• ์— ๋”ฑ ๋งž๋Š” box-shadow ์†์„ฑ์„ ์‚ฌ์šฉํ•ด์„œ ํ•ด๊ฒฐํ–ˆ๋‹ค. box-shadow๋ฅผ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ transform์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๊ณ , ๋”ฐ๋ผ์„œ top, left์™€ ๋‹ฌ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์„ ๋‹ค์‹œ ๋ฐฐ์น˜ํ•˜๋Š” ๊ณผ์ •์ด ์—†์–ด์ ธ์„œ ์„ฑ๋Šฅ๋„ ํ›จ์”ฌ ์ข‹์•„์กŒ๋‹ค.


img์˜ ๊ธฐ๋ณธ ํ•˜๋‹จ ์—ฌ๋ฐฑ

์œ„ ์‚ฌ์ง„์˜ ๋นจ๊ฐ„ ์„ ์ด baseline์ด๋‹ค.
<img>๋Š” ์ธ๋ผ์ธ ์š”์†Œ๋ผ์„œ baseline์ด ์กด์žฌํ•˜๊ณ  ๊ทธ๋กœ ์ธํ•ด text์ฒ˜๋Ÿผ ์•„๋ž˜์ชฝ์— ์—ฌ๋ฐฑ์ด ์ƒ๊ธด๋‹ค.
<img>ํƒœ๊ทธ๊ฐ€ ๊ฐ€์ง„ inline ํ˜น์€ inline-block์˜ ํŠน์„ฑ์„ ์ด์šฉํ•˜๊ณ  ์‹ถ์€๋ฐ ์•„๋ž˜์ชฝ์˜ ์—ฌ๋ฐฑ๋•Œ๋ฌธ์— ์ƒ๊ฐํ–ˆ๋˜ ๋ ˆ์ด์•„์›ƒ์ด ๋งŒ๋“ค์–ด์ง€์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธด๋‹ค.

์—ฌ๋ฐฑ์„ ์—†์• ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

  1. display: block; ๋ถ€์—ฌํ•˜๊ธฐ

  2. vertical-align: middle or top ๋ถ€์—ฌํ•˜๊ธฐ

    • vertical-align: middle ๋ถ€์—ฌํ–ˆ์„ ๋•Œ
    • vertical-align: top ๋ถ€์—ฌํ–ˆ์„ ๋•Œ

๊ฐ ๋ฐฉ์‹๋งˆ๋‹ค ํŠน์„ฑ์ด ์žˆ์œผ๋ฏ€๋กœ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์•Œ๋งž์€ ๋ฐฉ๋ฒ•์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
๊ฐœ์ธ์ ์œผ๋กœ๋Š” reset.css์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋ถ€์—ฌํ•ด๋†“๊ณ  ์Šคํƒ€์ผ๋ง์„ ํ•˜๋Š” ๊ฒƒ๋„ ๊ดœ์ฐฎ์„ ๊ฒƒ ๊ฐ™๋‹ค.

	img {
    	width: 100%;
        vertical-align: top;
	}
profile
ํ”„๋ŸฐํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž

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

comment-user-thumbnail
2021๋…„ 11์›” 17์ผ

์ €๊ฒŒ ์ง„์งœ ๊ทธ๋ฆผ์ž์ฃ  ๋Œ€๋‹จํ•ฉ๋‹ˆ๋‹ค!

๋‹ต๊ธ€ ๋‹ฌ๊ธฐ