본문 바로가기

카테고리 없음

html/css #17-em, rem, GRID 실습

 

em, rem 관련
루트에 폰트 사이즈가 font-size: 10px; 라면
folnt-size:1.4rem <- 13px이 되는 것임

ㄴ em : 폰트 사이즈 대비 

ㄴ rem : root의 배수

em, rem으로 값을 줄 경우 웹사이트 제작에 '유연성' 을 줄 수 있다. 

 

 

줄바꿈이 일어나지 않도록 설정하기 
display: inline-block
white-space: nowrap 

 

 

 


 

<GRID> 

기존애 배운 flex-box는 방향성이 존재했었다. 

 

GRID는 양방향성이며, 기본적으로 아무것도 일어나지 않은 것처럼 보이게 된다. 

 

 

.grid {
    border: 4px solid blue;
    display: grid;
    grid-template-columns: 100px 100px 100px;
}

 

.grid {
    border: 4px solid blue;
    display: grid;
    grid-template-columns: repeat(3, 1fr);
}

 

    grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));

 

 

 

rows colmns 둘다 지정해준 경

 

열은 autofit으로 100px씩 가득 채우고,

행은 100px 100px 씩 2행이니, 3행부터는 넘쳐난다. (3행부터 stretch 된다)

.grid {
    border: 4px solid blue;
    display: grid;
    aspect-ratio: 1/1;
    grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
    grid-template-rows: 100px 100px;
}

 

 

 

 

items 이동하기

grid-row-start: 1; -> 기존 자리
grid-row-start: 2-> 1칸 이동한 자리 
  • items에 해당 속성을 넣어준다. 
  • row는 행이동 col은 열이동

 crepe가 밑의 행으로 이동했다. 

 

 

셀을 가지고 있는 공간 병합
grid-row-start:1;
grid-row-end: 3;
ㄴ 행을  1~3까지
grid-column-start: 1;
grid-column-end: 3; 
ㄴ 열을 1~3까지 

*단축속성 grid-row : 1 / 3 (1~3까지 row를 설정)
*단축속성 grid-col 1 / 3 (1~3까지 col읈 설정)

 

 

칸 수로 작성하기
grid-row-start:1;    grid-row-end: span 3; /*칸 수로 3칸을 차지하자 */   
grid-column-start: 1;    grid-column-start: span 3;
.grid-item:nth-child(1) {
    background-color: aqua;
    grid-row-start:1;
    grid-row-end: span 3; /*칸 수로 3칸을 차지하자 */


    grid-column-start: 1;
    grid-column-start: span 3;
    }

 

 

 


 

<그리드로 이미지 그리드 만들기> 

 

하숙집(보이지 않는 막이 있다고 생각하자)

그리드 아이템 하나 하나를 하숙집으로 생각해보자 (아이템에도 보이지 않는 막이 있다고 생각하자)

 

 

1. 전체 프레임 (방)을 짰다. 

 4*4로 초기화해주었다. 총 16개의 방이 만들어졌다. 

 

2. 합쳐줘야하는 방의 코드를 작성한다. 

grid-column-start: 1; // 해당 코드는 end코드를 span으로 둔다면 생략을 해도 된다. 

grid-column-end: 3; 

 

 

 


 

<C로 시작하는 음식 작성하기> 

-grid를 받는 div를 따로 설정하고 (grid(부모) / grid-item(자식)) 

-그 안쪽으로 코드를 작성했다. 

 

*헷갈리는 부분 정리*

1. z-index 적용하는 부분

배경이미지 bg를 가장 안쪽 z-index: -2로 두었고

그라디언트를 적용하는 item::before에는 z-index를 -1을 주어 배경 바로 위에 위치하게 두었다.

일반 item은 z-index: 1로 두어 h2가 앞으로 더 튀어나오게 했다. 

 

2. grid 는 4*4 그리드 / 병합하는 부분은 모두 span값으로 주었다.  (칸을 차지하도록) 

 

부모에게

    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(4, 1fr);

 

자식(grid-item)에게

.grid-item:nth-child(1) {
    grid-row-end: span 2;
   
    grid-column-end: span 2;
}

.grid-item:nth-child(5) {
    grid-row-end: span 3;
}


.grid-item:nth-child(9) {
    grid-column-end: span 2;
}

 

[소스코드]

더보기

html

<!DOCTYPE html>
<html>
    <head>
        <title>SQUARE GRID</title>
        <link rel="preconnect" href="https://fonts.googleapis.com">
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <div class="wrapper">
            <ul class="grid">
                <li class="grid-item">
                    <div class="item">
                        <img class="bg" src="./images/crepe.png" alt="">
                        <h2>Crepe</h2>
                    </div>
                </li>
                <li class="grid-item">
                    <div class="item">
                        <img class="bg" src="./images/cookie.png" alt="">
                        <h2>Cookie</h2>
                    </div>
                </li>
                <li class="grid-item">
                    <div class="item">
                        <img class="bg" src="./images/choco.png" alt="">
                        <h2>Choco</h2>
                    </div>
                </li>
                <li class="grid-item">
                    <div class="item">  
                        <img class="bg" src="./images/cream.png" alt="">
                        <h2>Cream</h2>
                    </div>
                </li>
                <li class="grid-item">
                    <div class="item">
                        <img class="bg" src="./images/cake.png" alt="">
                        <h2>Cake</h2>
                    </div>
                </li>
                <li class="grid-item">
                    <div class="item">
                        <img class="bg" src="./images/candy.png" alt="">
                        <h2>Candy</h2>
                    </div>
                </li>
                <li class="grid-item">
                    <div class="item">
                        <img class="bg" src="./images/coke.png" alt="">
                        <h2>Coke</h2>
                    </div>

                </li>
                <li class="grid-item">
                    <div class="item">
                    <img class="bg" src="./images/cheeze.png" alt="">
                    <h2>Cookie</h2>
                </div>

                </li>
                <li class="grid-item">
                    <div class="item">
                        <img class="bg" src="./images/cinnamon.png" alt="">
                        <h2>Cinnamon</h2>
                    </div>

                </li>
                <li class="grid-item">
                    <div class="item">
                        <img class="bg" src="./images/chili.png" alt="">
                        <h2>Chili</h2>
                    </div>
                </li>
            </ul>
        </div>

    </body>
</html>

 

 

css

ul {
    margin: unset;
    padding: unset;
    list-style-type: none;
}
img {
    max-width: 100%;
    vertical-align: top;
}
h2 {
    margin: unset;
    font-size: unset;
    font-weight: unset;
}

.grid {
    display: grid;
    aspect-ratio: 1/1;
    font-size: 30px;
    text-align: center;

    padding:20px;
    gap: 20px;
    grid-template-columns: repeat(4, 1fr);
    grid-template-rows: repeat(4, 1fr);
}
.grid-item {
    position: relative;
}

/*
.grid-item:nth-child(1)  { background-color: lightcoral; }
.grid-item:nth-child(2)  { background-color: peachpuff; }
.grid-item:nth-child(3)  { background-color: lightblue; }
.grid-item:nth-child(4)  { background-color: lemonchiffon; }
.grid-item:nth-child(5)  { background-color: plum; }
.grid-item:nth-child(6)  { background-color: lightgreen; }
.grid-item:nth-child(7)  { background-color: lightskyblue; }
.grid-item:nth-child(8)  { background-color: darksalmon; }
.grid-item:nth-child(9)  { background-color: palegreen; }
.grid-item:nth-child(10) { background-color: lightpink; } */

.grid-item:nth-child(1) {
    grid-row-end: span 2;
   
    grid-column-end: span 2;
}

.grid-item:nth-child(5) {
    grid-row-end: span 3;
}


.grid-item:nth-child(9) {
    grid-column-end: span 2;
}

.item {
    position: absolute;
    inset: 0;
    border-radius: 20px;
    overflow: hidden;

    color: white;
    transition: all .4s;

    z-index: 1;
}

.item::before {
    content: '';
    position:absolute;
    inset: 0;
    background: linear-gradient(to bottom, rgba(0,0,0,1) 0%, rgba(0,0,0,0) 100%);


   
    z-index: -1;
}
.item:hover {
    /* transform: scale(1.2); */
    box-shadow: 0 0 200px red;
    border: 10px solid white;
   
    margin: -20px;
    z-index: 10;
}

.bg {
    position: absolute;
    left: 0;
    top: 0;
    height: 100%;
    width: 100%;
    z-index: -2;
}