ABOUT ME

Today
Yesterday
Total
  • [css] 반응형 웹
    codeStates front-end/Css 2023. 3. 16. 20:08
    반응형

     

     

     

     

     

     

    📌  반응형 웹

    여러 장치의 다양한 특성에 대응하는 하나의 웹 문서 또는 사이트로써 브라우저의 크기에 실시간 반응하여

    크기에 따라 레이아웃이 변하는 웹 사이트를 의미한다.

     

     

    📍 리플로우(Reflow)와 리페인트(Repaint

     

    화면을 늘리거나 줄이는 등 크기를 조절하거나, 다른 사이트로 이동을 하는 등 화면에 있던 요소들의 크기가 바뀌게 되는데,

    화면에 나타나는 모습을 바꾸기 위해 모든 요소의 위치와 크기를 다시 계산하고, 다시 그려야 한다.

    웹 인터렉션으로 인해 렌더링 과정의 레이아웃을 반복해 수행하는 것을 리플로우, 페인트 과정을 반복 수행하는 것을 리페인트라 한다.

     

    🔗 리플로우와 리페인트의 최적화

     

    말 그대로 다시 필하고 다시 플로우를 정해야하는데, 이런 과정은 최소하하는 것이 좋다.

    JS + CSS 조합한 애니메이션이 많거나, 레이아웃 변화가 많은 요소 같은 영향을 주는 노드를 줄입니다.

     

     

    리플로우의 원인

     

    • 윈도우 리사이징 (뷰포트 변화는 Global Layout에 영향)
    • 폰트의 변화 (height계산에 영향을 주므로 Global Layout에 영향)
    • 스타일 추가 또는 제거(레이아웃을 바꾸므로)
    • 내용 변화 (인풋박스에 텍스트 입력 등..)
    • :hover와 같은 CSS Pseudo Class
      (CSS: The Definitive Guide: The Definitive Guide 55p에서, hover할 시 나타나는 변화로 인한 우려가 생긴다는 의미인 듯 합니다.)
    • 클래스 Attribute의 동적 변화
    • JS를 통한 DOM 동적 변화
    • 엘리먼트에 대한 offsetWidth / offsetHeight (화면에서 보여지는 좌표) 계산시
    • 스타일 Attribute 동적변화

     

     

    리플로우가 일어나는 대표적인 css 속성

     

    position width height left top right
    bottom margin  padding border border-width clear
    display float font-family font-size font-weight line-height
    min-height overflow text-align vertical-align  ...  

     

     

    리페인트가 일어나는 대표적인 속성

     

    background background-image background-position background-repeat background-size border-radius
    border-style box-shadow  color line-style outline clear
    display float font-family font-size font-weight outline-color
    visibility ...        

     

     

     

    📍 미디어 쿼리

    미디어 타입을 구체적인 조건으로 필요한 스타일을 적용

     

     

    🔗 미디어 쿼리 적용법

     

    1. <head> 태그 안에 <link> 태그를 위치 시킨다.

     

    <link href="css파일이름.css" media="screen and (min-width: 400px) and (max-width: 1000px)" rel="stylesheet">

     

    2. 미디어 속성을 사용해 조건을 지정한다.

     

    <style type="text/css" media="screen and (min-width: 400px) and (max-width: 1000px)">
    	/* 여기 css를 작성합니다. */
    </style>

     

    3. css 파일 혹은 태그 안에서 직접 미디어 쿼리 작성

     

    미디어 쿼리 구문

     

    @media 미디어 타입 (조건(너비 및 높이)) {
        (CSS 입력하는 부분)
    }
    
    --예제
    @media screen (max-width: 400px) {
        body {
    			color: red;
    		}
    }

     

    • 미디어 타입 : 코드가 어떤 미디어를 위한 것인지 브라우저에 알려줍니다.
    • 조건(너비 및 높이) : 지정한 창의 너비나 높이를 기준으로 기준이 만족되면 스타일이 적용되고, 만족되지 않으면 적용되지 않습니다.
    • CSS 입력하는 부분 : 조건문을 통과하고, 미디어 타입이 올바른 경우 스타일이 적용됩니다.

     

     

    🔗 미디어 타입(Media Type)

     

    지정할 수 있는 미디어 타입

     

    • all : 모든 미디어 타입
    • print : 프린터
    • screen : 컴퓨터 화면
    • speech : 스크린 리더

     

    조건(너비 및 높이)

     

    반응형 디자인을 만들기 위해 가장 많이 상요하는 기능 : 뷰포트 너비 min-widthmax-width, width

     

    //width(혹은 height)는 브라우저의 창 크기
    @media screen and (width: 600px) {
    	body {
    		color : red;
    	}
    }

     

    방향성

     

    세로 모드인지 가로 모드인지 검사하여 CSS 스타일응 주고 싶은 경우:  orientation

     

    @media (orientation: landscape) {
        body {
            color: rebeccapurple;
        }
    }

     

     

    🔗 복잡한 미디어 쿼리

     

    논리곱(and) 미디어 쿼리

     

    // min- 혹은 max- 접두사를 붙이게 되면 최솟값인지 최댓값인지 표시
    @media screen and (min-width: 400px) and (orientation: landscape) {
        body {
            color: blue;
        }
    }

     

    논리합(and) 미디어 쿼리

     

    @media screen and (min-width: 600px), screen and (orientation: landscape) {
        body {
            color: blue;
        }
    }

     

    부정(not) 미디어 쿼리

     

    @media not all and (orientation: landscape) {
        body {
            color: blue;
        }
    }

     

     

    📍 <실습> 반응형 웹 수도코드

     

    @media screen and (min-width: 800px ), screen and (orientation: landscape ) {
      .main-title, .sub-title {
        color: #F6D9C1;
      }
    }
    
    @media not all and (orientation: landscape ) {
        .main-title, .sub-title {
          color: #5f88e3;
        }
    }
    
    @media screen and (min-width: 1000px) {
      body {
        background: #f4ac71;
      }
      
      .display-box {
        display: flex;
        flex-wrap: wrap;
        justify-content: center;
         width: 40%; 
      }
    }
    
    @media screen and (max-width: 1000px) {
      body {
        background: #bababa;
      }
    
      .display-box {
        background: red;
        display: grid;
        place-items: center;
        
      }
    }

     

     

    실행결과

     

    👉🏻 👉🏻 👉🏻 

     

    반응형

    'codeStates front-end > Css' 카테고리의 다른 글

    [css] css 애니메이션  (0) 2023.03.17
    [css] Selector  (0) 2023.01.04
    [css] 박스를 구성하는 요소  (0) 2023.01.04
    [css] 박스 모델  (0) 2023.01.04
    [css] css 속성  (0) 2023.01.04

    댓글

Designed by Tistory.