CSS Making Layouts (Media Query)

Oh Joonยท2020๋…„ 12์›” 19์ผ
0

Roadmap CSS

๋ชฉ๋ก ๋ณด๊ธฐ
10/10
post-thumbnail

๐ŸŒŸResponsive Web Design๐ŸŒŸ

<CONTENT IS LIKE WATER>

์ตœ๊ทผ์—๋Š” ๋ฐ์Šคํฌํƒ‘์œผ๋กœ๋งŒ ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋ณด์ง€ ์•Š๊ณ  ๋ชจ๋ฐ”์ผ, ํ…Œํ”Œ๋ฆฟPC ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฏธ๋””์–ด ๊ฐœ์ฒด๋“ค์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ปจํ…์ธ ๋ฅผ ๋‹ด๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๋”ฐ๋ผ์„œ ์œ ๋™์ ์œผ๋กœ ์›น ์‚ฌ์ดํŠธ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ๊ฐ€์žฅ ์ž˜ ํ‘œํ˜„ํ•œ ๊ทธ๋ฆผ์ด๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

๋ฐ˜์‘ํ˜• ๋””์ž์ธ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ ์ค‘ media query์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๐ŸŽˆ Media Query?

media query๋Š” ํ™”๋ฉด์˜ ์ข…๋ฅ˜์™€ ํฌ๊ธฐ์— ๋”ฐ๋ผ์„œ ๋””์ž์ธ์„ ๋‹ฌ๋ฆฌ ์ค„ ์ˆ˜ ์žˆ๋Š” CSS์˜ ๊ธฐ๋Šฅ์ด๋‹ค. ๋ฏธ๋””์–ด์ฟผ๋ฆฌ๋Š” ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์˜ ํ•ต์‹ฌ ๊ธฐ์ˆ ์ด๋‹ค.


๐Ÿšฅ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์‚ฌ์šฉ๋ฐฉ๋ฒ•

1. <link>์š”์†Œ์— ์‚ฌ์šฉํ•˜์—ฌ ํŠน์„ฑ์ด ์กฐ๊ฑด์— ์ ํ•ฉํ•  ๋•Œ css ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

<link rel="stylesheet" media="screen and (max-width: 768px)" href="mystyle.css" />

2. ์Šคํƒ€์ผ ์‹œํŠธ ๋‚ด์—์„œ @media๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

@media screen and (max-width: 768px) { 

		body 
			{ background-color: lightgreen; 
            		} 
		}

๐Ÿ’ป ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์˜ ๊ตฌ์„ฑ ์š”์†Œ

1) media-type : ์–ด๋–ค ๋ฏธ๋””์–ด๋ฅผ ์œ„ํ•œ ๊ฒƒ์ธ์ง€ ๋ธŒ๋ผ์šฐ์ €์—๊ฒŒ ์•Œ๋ ค์ฃผ๋Š” ๋ฏธ๋””์–ด ์œ ํ˜•์„ ์„ ํƒํ•œ๋‹ค.

๋ฏธ๋””์–ด ์œ ํ˜•์—๋Š” 4๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

  • all : ๋ชจ๋“  ๋ฏธ๋””์–ด ์žฅ์น˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • print : ์ธ์‡„ ๊ฒฐ๊ณผ๋ฌผ ๋ฐ ์ถœ๋ ฅ ๋ฏธ๋ฆฌ๋ณด๊ธฐ ํ™”๋ฉด์— ํ‘œ์‹œ ์ค‘์ธ ๋ฌธ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.
  • screen : ํ™”๋ฉด ๋Œ€์ƒ
  • speech : ์Œ์„ฑ ํ•ฉ์„ฑ์žฅ์น˜ ๋Œ€์ƒ

<๊ฐ ๋ฏธ๋””์–ด ๊ฐœ์ฒด์˜ ๋ณดํŽธ์ ์ธ ํ™”๋ฉด ๋„“์ด(px)>

  • mobile (320px~480px)
  • tablet (768px~1024px)
  • desktop (1024px~)

2) media-feature-rule : css ๊ทœ์น™์ด ์ ์šฉ๋˜๊ธฐ ์œ„ํ•ด ์ „๋‹ฌ๋˜์–ด์•ผ ํ•˜๋Š” ๊ทœ์น™ ๋˜๋Š” ์กฐ๊ฑด๋ฌธ ํ‘œํ˜„์‹์„ ์ž…๋ ฅํ•œ๋‹ค.

MDN ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ์—์„œ ๋ฏธ๋””์–ด ํŠน์„ฑ ๋‹จ๋ฝ์—์„œ ๊ตฌ์ฒด์ ์ธ ํŠน์„ฑ๋“ค์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

3) CSS rules go here : ์กฐ๊ฑด๋ฌธ์„ ํ†ต๊ณผํ•˜๊ณ  ๋ฏธ๋””์–ด ์œ ํ˜•์ด ์˜ฌ๋ฐ”๋ฅธ ๊ฒฝ์šฐ ์ ์šฉ๋˜๋Š” CSS ๊ทœ์น™ ์ง‘ํ•ฉ์ด๋‹ค.


๐ŸŒˆ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ๊ธฐ๋ณธ ์‘์šฉ

<!doctype html>
<html>
<head>
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        @media (max-width:600px){
            body{
                background-color: green;
            }
        }
        @media (max-width:500px){
            body{
                background-color: red;
            }
        }
        @media (min-width:601px){
            body{
                background-color: blue;
            }
        }
    </style>
</head>
<body>
   <ul>
       <li>~500px : red</li>
       <li>501~600px : green</li>
       <li>601px~ : blue</li>
   </ul>
</body>
</html>

์›น์—์„œ F12๋ฅผ ๋ˆ„๋ฅด๊ฒŒ ๋˜๋ฉด ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์— ํ™”๋ฉด ํฌ๊ธฐ(px๋‹จ์œ„)๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค.

์ž‘์„ฑ๋œ ์ฝ”๋“œ์— ์กฐ๊ฑด์ธ @media (max-width:600px)๋Š” ์Šคํฌ๋ฆฐ์˜ ์ตœ๋Œ€๋„“์ด๊ฐ€ 600px์ผ ๋•Œ ์กฐ๊ฑด์˜ ๋‚ด์šฉ์ด ์‹คํ–‰๋œ๋‹ค๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ์ฆ‰, ๋„“์ด๊ฐ€ 600px์ดํ•˜์ผ ๋•Œ ์กฐ๊ฑด์˜ ๋‚ด์šฉ์ด ์‹คํ–‰๋œ๋‹ค. max, min์˜ ์˜๋ฏธ๊ฐ€ ๊ฐ€๋” ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฃผ์˜ํ•˜์ž.

โšก cascading์œผ๋กœ ์ธํ•ด ๊ฐ™์€ ์—˜๋ฆฌ๋จผํŠธ์— media query๋ฅผ ์ ์šฉํ•˜๋Š” ์ˆœ์„œ๋Š” ์ •๋ง ์ค‘์š”ํ•˜๋‹ค.
๋ฐ‘ ์˜ˆ์ œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.

        /* 500px ๋ณด๋‹ค ์ข์„ ๋•Œ ์ ์šฉ*/
        @media (max-width:500px) {
            body{
                background-color: green;
            }
        }
        /* 600px ๋ณด๋‹ค ์ข์„ ๋•Œ ์ ์šฉ*/
        @media (max-width:600px){
            body{
                background-color: red;
            }
        }

style ํƒœ๊ทธ ์•ˆ์— ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋ฅผ ์œ„ ์ฝ”๋“œ์™€ ๊ฐ™์ด ์ง€์ •ํ•˜์˜€๋‹ค. bodyํƒœ๊ทธ๊ฐ€ 500px์ดํ•˜ 600px ์ดํ•˜ ๊ตฌ๊ฐ„์—์„œ green, red ํšจ๊ณผ๋ฅผ ๋™์‹œ์— ๋ฐ›๊ณ  ์žˆ๋‹ค. ์ด ๋•Œ ์ƒ์‹์ ์œผ๋กœ ๋” ์ข์€ ์กฐ๊ฑด์ธ 500px ์ดํ•˜์ผ ๊ฒฝ์šฐ ํ™”๋ฉด์˜ ์ƒ‰์€ ์ดˆ๋ก์ƒ‰์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด 475px์—๋„ ํ™”๋ฉด์˜ ์ƒ‰์€ red์˜ ํšจ๊ณผ๊ฐ€ ์ ์šฉ๋˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋‘ ์กฐ๊ฑด์˜ ํšจ๊ณผ๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์กฐ๊ฑด ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

        /* 600px ๋ณด๋‹ค ์ข์„ ๋•Œ ์ ์šฉ*/
        @media (max-width:600px){
            body{
                background-color: red;
            }
        }
         /* 500px ๋ณด๋‹ค ์ข์„ ๋•Œ ์ ์šฉ*/
        @media (max-width:500px) {
            body{
                background-color: green;
            }
        }

๐ŸŒŒ ๋™์ผํ•œ ์—˜๋ฆฌ๋จผํŠธ์— ๋‘ ๊ฐ€์ง€ ์ด์ƒ์˜ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์กฐ๊ฑด์„ ์‚ฌ์šฉํ•  ๋•Œ ์ˆœ์„œ๋ฅผ ์ฃผ์˜ํ•˜์ž.


๋…ผ๋ฆฌ๊ฐ’์ด์šฉ

๋…ผ๋ฆฌ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋” ๋ณต์žกํ•œ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์กฐ๊ฑด ์ง€์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

1) and

and ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ๋Œ€ ๋„“์ด๊ฐ€ 600px์ด๊ณ  ์ตœ๋Œ€ ๋†’์ด๊ฐ€ 500px์ผ ๋•Œ ์กฐ๊ฑด ๋‚ด์šฉ์ด ํ™œ์„ฑํ™” ๋œ๋‹ค.

 @media (max-width:600px) and (max-height:500px) {
            body{
                background-color: green;
            }
        }

2) ์‰ผํ‘œ(,)

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž or๊ณผ ๊ฐ™๋‹ค. ์ตœ๋Œ€ ๋„“์ด๊ฐ€ 600px ๋˜๋Š” ์ตœ๋Œ€ ๋†’์ด๊ฐ€ 500px์ผ ๋•Œ ์กฐ๊ฑด ๋‚ด์šฉ์ด ํ™œ์„ฑํ™” ๋œ๋‹ค. ํ•˜๋‚˜์˜ ์กฐ๊ฑด๋งŒ ์ฐธ์„ ๋ฐ˜ํ™˜ํ•ด๋„ ์กฐ๊ฑด ์ „์ฒด ๋‚ด์šฉ์ด ํ™œ์„ฑํ™”๋œ๋‹ค.

 @media (max-width:600px) or (max-height:500px) {
            body{
                background-color: green;
            }
        }

3) not

not ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์กฐ๊ฑด์„ ๋ถ€์ •ํ•œ๋‹ค. min-width:600px์˜ ๋ฐ˜๋Œ€์ธ min-width:600๋กœ ์ ์šฉ๋œ๋‹ค.

 @media not all and (max-width:600px) {
            body{
                background-color: green;
            }
        }

4) only


์ฐธ์กฐ

MDN ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์‚ฌ์šฉํ•˜๊ธฐ
๋ฐ˜์‘ํ˜• ์›น์„ ์œ„ํ•œ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์‚ฌ์šฉ๋ฒ•(CSS media queries)
์ƒํ™œ์ฝ”๋”ฉ media query

profile
Front-end developer

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