๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’ป/CSS

(45) [CSS] 3์ผ ๋ฐ˜์‘ํ˜• ์›น(Responsive Web)

by ๋”ฐ๊ถˆ 2024. 4. 18.

 

 

ํ•˜๋‚˜์˜ ์›น์‚ฌ์ดํŠธ์—์„œ PC, ์Šค๋งˆํŠธํฐ, ํƒœ๋ธ”๋ฆฟ PC ๋“ฑ ์ ‘์†ํ•˜๋Š” ๋””์Šคํ”Œ๋ ˆ์ด์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํ™”๋ฉด์˜ ํฌ๊ธฐ๊ฐ€ ์ž๋™์œผ๋กœ ๋ณ€ํ•˜๋„๋ก ๋งŒ๋“  ์›นํŽ˜์ด์ง€ ์ ‘๊ทผ ๊ธฐ๋ฒ•

์žฅ์  
         ์›น์‚ฌ์ดํŠธ๋ฅผ PC์šฉ๊ณผ ๋ชจ๋ฐ”์ผ์šฉ์œผ๋กœ ๊ฐ๊ฐ ๋ณ„๊ฐœ๋กœ ์ œ์ž‘ํ•˜์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ๊ณต์šฉ ์›น์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์— ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๋‹ค.     
          ์›น ํŽ˜์ด์ง€ ๋‚ด์šฉ์„ ์ˆ˜์ •ํ•  ๊ฒฝ์šฐ, ํ•˜๋‚˜์˜ ํŽ˜์ด์ง€๋งŒ ์ˆ˜์ •ํ•˜๋ฉด PC์™€ ๋ชจ๋ฐ”์ผ ๋“ฑ ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์—์„œ ๋™์ผํ•˜๊ฒŒ ๋ฐ˜์˜๋œ๋‹ค. 


๋ทฐํฌํŠธ(Viewport)

์›น ํŽ˜์ด์ง€๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด์—ฌ์ง€๋Š” ์˜์—ญ.๋ฐ˜์‘ํ˜• ์›น(Responsive Web)์€ ๋ชจ๋ฐ”์ผ, ํ…Œ๋ธ”๋ฆฟ, PC ๋“ฑ ๋‹ค์–‘ํ•œ ๋””๋ฐ”์ด์Šค์˜ ๋””์Šคํ”Œ๋ ˆ์ด์— ๋งž์ถฐ ๋ทฐํฌํŠธ๊ฐ€ ๋ณ€ํ•˜๋Š” ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋งํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ํ™”๋ฉด์ด ๋ฐ”๋€” ๋•Œ๋งˆ๋‹ค ํ™”๋ฉด์— ๋งž์ถฐ ์Šคํƒ€์ผ์ด ๋ฐ”๋€Œ๊ฒŒ ๋˜๋Š” ์›น ํ˜•ํƒœ๋ฅผ ๋งํ•œ๋‹ค.

 

๋ทฐํฌํŠธ ์†์„ฑ

์†์„ฑ ์˜๋ฏธ
width ๋ทฐํฌํŠธ์˜ ๋„ˆ๋น„๋ฅผ ์ง€์ •
height ๋ทฐํฌํŠธ์˜ ๋†’์ด๋ฅผ ์ง€์ •
inital-scale ๋ทฐํฌํŠธ์˜ ์ดˆ๊ธฐ ๋ฐฐ์œจ์„ ์ง€์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1์ด๋ฉฐ, 1๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ•์†Œ๋œ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•˜๊ณ , 1๋ณด๋‹ค ํฐ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ํ™•๋Œ€๋œ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.
user-scalable ๋ทฐํฌํŠธ์˜ ํ™•๋Œ€/์ถ•์†Œ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ yes์ด๋ฉฐ no๋กœ ์„ค์ •ํ•˜๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ ํŽ˜์ด์ง€๋ฅผ ํ™•๋Œ€ ํ•  ์ˆ˜ ์—†๋‹ค.
minimum-scale ๋ทฐํฌํŠธ์˜ ์ตœ์†Œ ์ถ•์†Œ ๋น„์œจ์„ ์ง€์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 0.25์ด๋‹ค. 
maximum-scale ๋ทฐํฌํŠธ์˜ ์ตœ๋Œ€ ํ™•๋Œ€ ๋น„์œจ์„ ์ง€์ •ํ•œ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 1.6์ด๋‹ค. 

 

 

 ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ(Media Queries)

  •  CSS3์˜๊ธฐ์ˆ ๋กœ ๊ฐ ๋ฏธ๋””์–ด ๋งค์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ
  • ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ๋Š” @media๋กœ ์‹œ์ž‘ํ•˜๋ฉฐ ๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ๊ตฌ๋ฌธ์€ ๋ฏธ๋””์–ด ํƒ€์ž…๊ณผ ๋ฏธ๋””์–ด ํŠน์„ฑ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.
  • ์ฃผ์š” ๋ฏธ๋””์–ด ํƒ€์ž…์—์„œ๋Š” all, print, screen ์ด ์žˆ๋‹ค.

๊ธฐ๋ณธ ๋ฌธ๋ฒ• 

  • ํ˜•์‹ : @media [only ๋˜๋Š” not] [๋ฏธ๋””์–ด์œ ํ˜•] [and ๋˜๋Š” ,] (์กฐ๊ฑด๋ฌธ) {์‹คํ–‰๋ฌธ}
       <link rel="stylesheet" href="style.css" >
       <link rel="stylesheet" media="all and (min-width:320px)" href="style.css" >
       @import url(style.css) all and (min-width:320px);
       
       /*๋ฏธ๋””์–ด ์ฟผ๋ฆฌ ์ž‘์„ฑ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ*/
       - min์„ ์‚ฌ์šฉํ• ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ์ž‘์€ ์ˆœ์„œ๋Œ€๋กœ ์ž‘์„ฑ ํ•œ๋‹ค.(min์€ ์ตœ์†Œ ๋˜๋Š” ๊ทธ์ด์ƒ์ด๋ผ ๋Š” ๋œป์œผ๋กœ, ์ ์ฐจ ์ปค์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์—)
          @media (min-width:320px){์‹คํ–‰๋ฌธ}
          @media (min-width:768px){์‹คํ–‰๋ฌธ}
          @media (min-width:1024px){์‹คํ–‰๋ฌธ}

          /*min-width๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์Šค๋งˆํŠธํฐ ๋“ฑ ๊ฐ€์žฅ ์ž‘์€ ์‚ฌ์ด์ฆˆ์—์„œ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ ,
          ์ ์ฐจ ํ™•์žฅ๋˜์–ด๊ฐ€๋Š” ํ˜•ํƒœ๋กœ CSS๋ฅผ ์ž‘์„ฑ*/
			
        - max ์‚ฌ์šฉ์‹œ ํฐ์ˆœ์„œ๋Œ€๋กœ ์ž‘์„ฑ ํ•œ๋‹ค.(max๋Š” ์ตœ๋Œ€ ๋˜๋Š” ๊ทธ ์ดํ•˜๋ผ๋Š” ๋œป์œผ๋กœ, ์ ์ฐจ ์ž‘์•„์ง€๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๊ธฐ ๋•Œ๋ฌธ์—)
          @media (max-width:1600px){์‹คํ–‰๋ฌธ}
          @media (max-width:1024px){์‹คํ–‰๋ฌธ}
          @media (max-width:768px){์‹คํ–‰๋ฌธ}

          /*max-width๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐ์Šคํฌํƒ‘์šฉ์˜ ๊ฐ€์žฅ ํฐ ํ™”๋ฉด ์‚ฌ์ด์ฆˆ์˜ ๋ ˆ์ด์•„์›ƒ์„ 
          ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ , ์ ์ฐจ ์ถ•์†Œํ•˜๋Š” ํ˜•ํƒœ๋กœ CSS๋ฅผ ์ž‘์„ฑ*/

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<!--
  - ๋ฐ์Šคํฌํƒ‘์— ๋Œ€์‘ํ•˜๋„๋ก ๋งŒ๋“ค์–ด์ง„ ๋ฌธ์„œ๋ฅผ ์Šค๋งˆํŠธํฐ์œผ๋กœ ์—ด๋ฉด ๋ณดํ†ต 3~4๋ฐฐ ์ด์ƒ ์คŒ ์•„์›ƒ ๋˜์–ด
    ๊ธ€์”จ๋ฅผ ์•Œ์•„ ๋ณผ ์ˆ˜ ์—†๋Š” ํ˜•ํƒœ๋กœ ์ž‘๊ฒŒ ํ‘œ์‹œํ•œ๋‹ค.
    ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด viewport๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  - ๋ชจ๋ฐ”์ผ ๋ทฐ ํฌํŠธ๋ฅผ ์žฌ์„ค์ •ํ•˜๋Š” <meta>
    ์Šค๋งˆํŠธํฐ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ๋งŒ ํ•ด์„
    ๋ทฐ ํฌํŠธ๋ฅผ ๋ฌธ์„œ๊ฐ€ ์•„๋‹Œ ์Šคํฌ๋ฆฐ ์˜์—ญ์œผ๋กœ ์žฌ ์„ค์ •
    ์›น ๋ฌธ์„œ๋ฅผ ๊ฐ•์ œ๋กœ ์Šคํฌ๋ฆฐ ์‚ฌ์ด์ฆˆ์— ๋งž๊ฒŒ ์คŒ ์•„์›ƒ ํ•˜์ง€ ์•Š์Œ
  - content ์†์„ฑ
    width=device-width : ํŽ˜์ด์ง€์˜ ๋„ˆ๋น„๋ฅผ ๊ธฐ๊ธฐ์˜ ์Šคํฌ๋ฆฐ ๋„ˆ๋น„๋กœ ์„ค์ •.
       ์ฆ‰, ๋ Œ๋”๋ง ์˜์—ญ์„ ๊ธฐ๊ธฐ์˜ ๋ทฐํฌํŠธ์˜ ํฌ๊ธฐ์™€ ๊ฐ™๊ฒŒ ์„ค์ •
    initial-scale=1.0 : ์ฒ˜์Œ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์‹œ ํ™•๋Œ€/์ถ•์†Œ๊ฐ€ ๋˜์ง€ ์•Š์€ ์›๋ž˜ ํฌ๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •
       ๊ธฐ๋ณธ๊ฐ’์€ 1์ด๋ฉฐ, 1๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ถ•์†Œ๋œ ํŽ˜์ด์ง€, 1๋ณด๋‹ค ํฌ๋ฉด ํ™•๋Œ€๋œ ํŽ˜์ด์ง€๋ฅผ ํ‘œ์‹œ
-->

<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">

<style type="text/css">
.box {
	width: 300px;
	height: 300px;
	margin: 30px auto;
	border: 3px dotted #333;
	padding: 10px;
	background: #e6e6e6;
}

@media ( max-width :600px) {
	.box {
		display: none; /*๋ธŒ๋ผ์šฐ์ € ๋„’์ด๊ฐ€ 600์ดํ•˜์ด๋ฉด none*/
	}
}
</style>
</head>
<body>

	<h3>๋ฐ˜์‘ํ˜• ์›น(Responsive Web)</h3>

	<p>๋ฏธ๋””์–ด ์ฟผ๋ฆฌ : ๊ฐ ๋ฏธ๋””์–ด ๋งค์ฒด์— ๋”ฐ๋ผ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ</p>

	<div class="box"></div>

</body>
</html>

 

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">
<style type="text/css">
* {
	padding: 0;
	margin: 0;
	box-sizing: border-box;
}

body {
	font-size: 14px;
	font-family: "๋ง‘์€ ๊ณ ๋”•", ๋‚˜๋ˆ”๊ณ ๋”•, ๋‹์›€, sans-serif;
}

.container {
	width: 1200px;
	margin: 20px auto 10px;
	border: 3px solid black;
}

.header {
	width: 100%;
	background: #e4f7ba;
	padding: 20px;
	text-align: center;
}

.body-main {
	content: '';
	clear: both;
	display: block;
}

.article {
	float: left;
	width: 75%;
	height: 500px;
	background: #eee;
	padding: 15px;
}

.side {
	float: left;
	width: 25%;
	height: 500px;
	background: yellow;
	padding: 15px;
}

.footer {
	width: 100%;
	background: gray;
	padding: 20px;
	text-align: center;
}


/*
	-max-width๋ฅผ ์‚ฌ์šฉ ํ•˜๋Š” ๊ฒฝ์šฐ
	๊ฐ€์žฅ ํฐ ํ™”๋ฉด ์‚ฌ์ด์ฆˆ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๊ธฐ๋ณธ์œผ๋กœ ํ•˜๊ณ  ์ ์ฐจ ์ถ•์†Œํ•˜๋Š” ํ˜•ํƒœ๋กœ css ์ž‘์„ฑ
	-

*/


/*ํ™”๋ฉด ๋„ˆ๋น„:0~768*/
@media ( max-width :1200px) {
	.container {
		width: 95%;
		border: 3px solid red;
	}
}

/*ํ™”๋ฉด ๋„ˆ๋น„:0~468*/
@media ( max-width :768px) {
	.container {
		width: 100%;
		border: 3px solid green;
	}
}

/*ํ™”๋ฉด ๋„ˆ๋น„:0~320*/
@media ( max-width :468px) {
	.container {
		width: 100%;
		border: 3px solid green;
	}
	.header {
		height: 300px;
	}
	.article {
		float: nene;
		width: 100%;
		height: 300px
	}
	.side {
		float: none;
		width: 100%;
		border: 3px solid red;
	}
}

@media ( max-width :320px) {
	.container {
		width: 100%;
		border: 3px solid tomato;
	}
}
</style>
</head>
<body>

	<div class="container">
		<div class="header">
			<h1>ํ—ค๋”์ž…๋‹ˆ๋‹ค.</h1>
		</div>
		<div class="body-main">
			<div class="article">๋ฉ”์ธ์ž…๋‹ˆ๋‹ค.</div>
			<div class="side">์‚ฌ์ด๋“œ์ž…๋‹ˆ๋‹ค.</div>
		</div>
		<div class="footer">
			<h3>ํ‘ธํ„ฐ์ž…๋‹ˆ๋‹ค.</h3>
		</div>
	</div>

</body>
</html>