이번 장에서는 웹 페이지 기본 구조를 설계해 보겠습니다.
위의 이미지는 웹 페이지에서 해당하는 영역을 색깔별로 나타냈습니다.
특정 넓이(768px)를 기준으로 몇몇 영역이 동적으로 변경됩니다.
반응형 웹 페이지를 적용하는 것이 목표입니다.
위의 이미지는 전형적으로 많은 웹 사이트에서 사용하는 웹 페이지 구조중에 하나입니다.
이번에 기본 페이지 구조를 잘 이해해 놓으면, 언제든지 원하는 웹 페이지 구조를 구현해낼 수 있을 것입니다.
아래 4가지를 중점적으로 살펴보겠습니다.
1. CSS root 변수를 생성 & 사용
2. CSS 함수인 calc() 를 이용해서 CSS의 속성값으로 사용
3. 웹 페이지의 기본 구조 설계
4. 반응형으로 페이지 적용
<!-- rootVariable.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Basic Layout</title>
<link rel="stylesheet" href="basicLayout.css">
<link rel="stylesheet" media="screen and (max-width: 768px)" href="basicLayoutMedia.css">
</head>
<body>
<div class="container">
<header>
<div class="logo">로고</div>
<nav class="menu">메뉴</nav>
<div class="info">인포메이션</div>
</header>
<section>
<div class="top">
<div class="left">왼쪽 영역</div>
<div class="right">오른쪽 영역</div>
</div>
<div class="bottom">
<div class="bottom-box1">하단 영역-1</div>
<div class="bottom-box2">하단 영역-2</div>
<div class="bottom-box3">
<div class="bottom-box-top">하단 영역-3-top</div>
<div class="bottom-box-under">하단 영역-3-bottom</div>
</div>
<div class="bottom-box4">하단 영역-4</div>
</section>
</div>
<footer>푸터 영역</footer>
</div>
</body>
</html>
/* rootVariable.css */
:root {
/* bootstrap CSS variables */
--bs-blue: #0d6efd;
--bs-indigo: #6610f2;
--bs-purple: #6f42c1;
--bs-pink: #d63384;
--bs-red: #dc3545;
--bs-orange: #fd7e14;
--bs-yellow: #ffc107;
--bs-green: #198754;
--bs-teal: #20c997;
--bs-cyan: #0dcaf0;
--bs-black: #000;
--bs-white: #fff;
--bs-gray: #6c757d;
--bs-gray-dark: #343a40;
--bs-gray-100: #f8f9fa;
--bs-gray-200: #e9ecef;
--bs-gray-300: #dee2e6;
--bs-gray-400: #ced4da;
--bs-gray-500: #adb5bd;
--bs-gray-600: #6c757d;
--bs-gray-700: #495057;
--bs-gray-800: #343a40;
--bs-gray-900: #212529;
--bs-primary: #0d6efd;
--bs-secondary: #6c757d;
--bs-success: #198754;
--bs-info: #0dcaf0;
--bs-warning: #ffc107;
--bs-danger: #dc3545;
--bs-light: #f8f9fa;
--bs-dark: #212529;
--bs-primary-rgb: 13, 110, 253;
--bs-secondary-rgb: 108, 117, 125;
--bs-success-rgb: 25, 135, 84;
--bs-info-rgb: 13, 202, 240;
--bs-warning-rgb: 255, 193, 7;
--bs-danger-rgb: 220, 53, 69;
--bs-light-rgb: 248, 249, 250;
--bs-dark-rgb: 33, 37, 41;
--bs-white-rgb: 255, 255, 255;
--bs-black-rgb: 0, 0, 0;
--bs-body-color-rgb: 33, 37, 41;
--bs-body-bg-rgb: 255, 255, 255;
--bs-font-sans-serif: system-ui, -apple-system, 'Segoe UI', Roboto,
'Helvetica Neue', 'Noto Sans', 'Liberation Sans', Arial, sans-serif,
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas,
'Liberation Mono', 'Courier New', monospace;
--bs-gradient: linear-gradient(
180deg,
rgba(255, 255, 255, 0.15),
rgba(255, 255, 255, 0)
);
--bs-body-font-family: var(--bs-font-sans-serif);
--bs-body-font-size: 1rem;
--bs-body-font-weight: 400;
--bs-body-line-height: 1.5;
--bs-body-color: #212529;
--bs-body-bg: #fff;
--bs-border-width: 1px;
--bs-border-style: solid;
--bs-border-color: #dee2e6;
--bs-border-color-translucent: rgba(0, 0, 0, 0.175);
--bs-border-radius: 0.375rem;
--bs-border-radius-sm: 0.25rem;
--bs-border-radius-lg: 0.5rem;
--bs-border-radius-xl: 1rem;
--bs-border-radius-2xl: 2rem;
--bs-border-radius-pill: 50rem;
--bs-link-color: #0d6efd;
--bs-link-hover-color: #0a58ca;
--bs-code-color: #d63384;
--bs-highlight-bg: #fff3cd;
/* height */
--header-height: 5.5rem;
--bottom-height: 5.5rem;
}
* {
margin: 0;
padding: 0;
}
/* basicLayout.css */
@import 'rootVariable.css';
body {
height: 100vh;
}
.container {
display: flex;
flex-direction: column;
}
header {
display: flex;
justify-content: space-between;
height: var(--header-height);
}
.logo {
flex: 1;
background-color: var(--bs-pink);
}
.menu {
flex: 4;
background-color: var(--bs-info);
}
.info {
flex: 1;
background-color: var(--bs-teal);
}
section {
height: calc(100vh - var(--header-height) * 2);
}
.top {
display: flex;
height: 60%;
}
.left {
flex: 4;
background-color: var(--bs-yellow);
}
.right {
flex: 2;
background-color: var(--bs-purple);
}
.bottom {
display: flex;
height: 40%;
}
.bottom-box1 {
background-color: var(--bs-green);
flex: 1;
}
.bottom-box2 {
background-color: var(--bs-gray-500);
flex: 2;
}
.bottom-box3 {
flex: 2;
}
.bottom-box-top {
background-color: var(--bs-indigo);
height: 50%;
}
.bottom-box-under {
background-color: var(--bs-danger);
height: 50%;
}
.bottom-box4 {
background-color: var(--bs-secondary);
flex: 1;
}
footer {
height: var(--bottom-height);
background-color: var(--bs-code-color);
}
/* basicLayoutMedia.css */
.info {
display: none;
}
.top {
flex-direction: column;
}
.bottom-box2 {
display: none;
}
.bottom-box4 {
display: none;
}