<div class="container">
<div class="header"></div>
<div class="section"></div>
<div class="aside"></div>
<div class="footer"></div>
</div>
.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"
.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;
}
<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>
.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
์ ๋ฌ๋ฆฌ ๋ ์ด์์์ ๋ค์ ๋ฐฐ์นํ๋ ๊ณผ์ ์ด ์์ด์ ธ์ ์ฑ๋ฅ๋ ํจ์ฌ ์ข์์ก๋ค.
์ ์ฌ์ง์ ๋นจ๊ฐ ์ ์ด baseline
์ด๋ค.
<img>
๋ ์ธ๋ผ์ธ ์์๋ผ์ baseline
์ด ์กด์ฌํ๊ณ ๊ทธ๋ก ์ธํด text์ฒ๋ผ ์๋์ชฝ์ ์ฌ๋ฐฑ์ด ์๊ธด๋ค.
<img>
ํ๊ทธ๊ฐ ๊ฐ์ง inline
ํน์ inline-block
์ ํน์ฑ์ ์ด์ฉํ๊ณ ์ถ์๋ฐ ์๋์ชฝ์ ์ฌ๋ฐฑ๋๋ฌธ์ ์๊ฐํ๋ ๋ ์ด์์์ด ๋ง๋ค์ด์ง์ง ์๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
์ฌ๋ฐฑ์ ์์ ๋ ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
display: block;
๋ถ์ฌํ๊ธฐ
vertical-align: middle or top
๋ถ์ฌํ๊ธฐ
vertical-align: middle
๋ถ์ฌํ์ ๋vertical-align: top
๋ถ์ฌํ์ ๋๊ฐ ๋ฐฉ์๋ง๋ค ํน์ฑ์ด ์์ผ๋ฏ๋ก ์ํฉ์ ๋ฐ๋ผ ์๋ง์ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก๋ reset.css์ ์๋์ ๊ฐ์ด ๋ถ์ฌํด๋๊ณ ์คํ์ผ๋ง์ ํ๋ ๊ฒ๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ๋ค.
img {
width: 100%;
vertical-align: top;
}
์ ๊ฒ ์ง์ง ๊ทธ๋ฆผ์์ฃ ๋๋จํฉ๋๋ค!