본문 바로가기
Today I Learned/CSS

[CSS] MEDIAQUERY, SVG, FLEX - 에이블런 프론트엔드부트캠프 7일차

by YES_developNewbie 2024. 7. 23.

1. MEDIA QUERY

 

미디어 쿼리는 특정 브라우저 폭을 지정해서 css 구문을 입력하면 해당 브러우저 폭에서는 미디어 쿼리 안쪽의 구문이 기존의 css구문을 덮어쓴다. 원본 CSS와 속성값이 같다면 생략이 가능하고 속성을 추가적으로 작성해도 된다. 미디어 쿼리 구간에서는 전체 너비 합이 100%가 되도록 구성해야한다. 그러기 위해 고정 픽셀이 아닌 %로 바꾸어야만 한다.

 

원본화면

 

@media screen and (max-width:1179px) {
    section {
        padding: 100px 0;
    }
    section .inner {
        width: 100%;
    }   
    section .inner .wrap article {
        width: 49%;
        margin-right: 2%;
    }
}

max-width: 1179px

화면 크기를 줄여도 유사한 비율을 유지하는 것을 볼 수 있다.

 

@media screen and (max-width:768px) {
    section {
        padding: 50px 0;
    }
}

max-width: 768px

화면 크기를 줄여도 유사한 비율을 유지하는 것을 볼 수 있다.

 

@media screen and (max-width: 480px) {
    section {
        padding: 50px 0;
    }
    section .inner .wrap article {
        width: 100%;
        margin-right: 0;
        margin-bottom: 2%;
    }
}

max-width: 480px

화면 크기를 줄이니 사각형 하나가 아래로 내려가는 것을 볼 수 있다.

2. SVG

svg의 path 스타일을 변경할 수 있다.

svg path {
	fill: transparent; /* 배경색 */
   	stroke: red; /* 선의 색 */
	stroke-width: 1; /* 선의 굵기 */
}

 

2-1. view box

svg에는 viewbox라는 개념이 존재한다. 주어진 크기 내에서 좌표평면을 활용해 svg의 위치를 지정하는 것이다.

        <svg xmlns="http://www.w3.org/2000/svg" 
        viewBox="0 0 512 512">

0 0 512 512

(0, 0)에 svg를 넣으니 다른 테두리는 괜찮은데 아래부분 테두리가 잘리는 것을 볼 수 있다. 이미지와 주어진 크기가 맞지 않아서 생긴 문제다.

 

        <svg xmlns="http://www.w3.org/2000/svg" 
        viewBox="-10 -10 512 512">

-10 -10 512 512

(-10, -10)에 단풍을 옮기니 우하단으로 이동하는 것을 볼 수 있다. 하지만 

        <svg xmlns="http://www.w3.org/2000/svg" 
        viewBox="10 10 512 512">

10 10 512 512

(10, 10)에 단풍을 옮기니 좌상단으로 이동하는 것을 볼 수 있다.

        <svg xmlns="http://www.w3.org/2000/svg" 
        viewBox="10 10 532 532">

10 10 532 532

532, 532로 크기를 조정하니 사진이 조금 더 커졌다.

        <svg xmlns="http://www.w3.org/2000/svg" 
        viewBox="-10 -10 532 532">

-10 -10 532 532

532 532의 크기에서 (-10, -10)으로 이동하니 크기도 조정되고 위치도 적절히 조정된 것을 볼 수 있다.

 

2-2. stroke-dasharray / stroke-dashoffset

 

dasharray는 선의 간격을 띄우는 기능을 하고, dashoffset은 보이는 선의 시작 위치를 지정할 수 있다.

    /* 선의 간격을 띄우는 속성 */
    stroke-dasharray: 100;
    /* 가시영역에 보이는 선의 시작위치 */
    stroke-dashoffset: 0;

100, 0

dasharray를 100, dashoffset을 0으로 바꾸니 보이는 테두리가 조금 달라진 것을 볼 수 있다.

    /* 선의 간격을 띄우는 속성 */
    stroke-dasharray: 100;
    /* 가시영역에 보이는 선의 시작위치 */
    stroke-dashoffset: -50;

100, -50

dasharray를 100, dashoffset을 -50으로 바꾸니 보이는 테두리가 조금 달라진 것을 볼 수 있다.

    /* 선의 간격을 띄우는 속성 */
    stroke-dasharray: 100;
    /* 가시영역에 보이는 선의 시작위치 */
    stroke-dashoffset: -100;

100, -100

dasharray를 100, dashoffset을 -100으로 바꾸니 보이는 테두리가 조금 달라진 것을 볼 수 있다.

    /* 선의 간격을 띄우는 속성 */
    stroke-dasharray: 2173;
    /* 가시영역에 보이는 선의 시작위치 */
    stroke-dashoffset: 0;

2173 0

dasharray를 2173, dashoffset을 0으로 맞추니 테두리가 모두 보이는 것을 볼 수 있다.

    /* 선의 간격을 띄우는 속성 */
    stroke-dasharray: 2173;
    /* 가시영역에 보이는 선의 시작위치 */
    stroke-dashoffset: 2173;

2173, 2173

dasharray를 2173, dashoffset을 2173으로 했더니 테두리가 보이지 않는 것을 볼 수 있다.

 

3. FLEX

flex 속성은 블록 속성을 유지하면서 자식 요소에 flex 속성을 지정할 수 있다.

display: flex;

FLEX

inline-flex 속성은 인라인 속성을 유지하면서 자식 요소에 flex 속성을 지정할 수 있다.

display: inline-flex;

INLINE-FLEX

3-1. flex-direction

flex-direction은 자식요소의 정렬방향을 지정할 수 있다.

    /* 자식요소 정렬방향 지정 */
    flex-direction: row;

flex-direction: row;

 

    /* 자식요소 정렬방향 지정 */
    flex-direction: column;

flex-direction: column;

 

3-2. justify-content

justify-content는 자식요소의 정렬을 지정할 수 있다. 

    /* 자식요소 정렬 */
    justify-content: flex-start;

justify-content: flex-start;

 

    /* 자식요소 정렬 */
    justify-content: flex-end;

justify-cotent: flex-end;

 

    /* 자식요소 정렬 */
    justify-content: space-between;

justify-content: space-between;

 

    /* 자식요소 정렬 */
    justify-content: space-around;

justify-content: space-around;

 

    /* 자식요소 정렬 */
    justify-content: space-evenly;

justify-content: space-evenly;

3-3. order

order 속성으로 자식 요소의 순서를 지정할 수 있다.

/* 자식 요소의 순서 지정 */
section article:nth-of-type(1) {
    order: 5;
}   
section article:nth-of-type(2) {
    order: 3;
}   
section article:nth-of-type(3) {
    order: 2;
}   
section article:nth-of-type(4) {
    order: 4;
}   
section article:nth-of-type(5) {
    order: 1;
}

order

3-4. flex-grow

flex-grow 속성은 요소의 안쪽 여백 확대를 할 수 있다.

.box2 article:nth-of-type(1){
    /* 요소의 안쪽 여백 확대 */
    flex-grow: 1;
}
.box2 article:nth-of-type(2){
    /* 요소의 안쪽 여백 확대 */
    flex-grow: 5;
}
.box2 article:nth-of-type(3){
    /* 요소의 안쪽 여백 확대 */
    flex-grow: 1;
}

flex-grow

3-5. flex-shrink

flex-shrink 속성은 요소의 안쪽 여백 축소를 할 수 있다.

.box3 article:nth-of-type(1) {
    flex-shrink: 1;
}
.box3 article:nth-of-type(2) {
    flex-shrink: 5;
}
.box3 article:nth-of-type(3) {
    flex-shrink: 1;
}

flex-shrink