Post

CSS 기본 스타일 초기화 방법

웹 개발을 하다 보면, 다양한 브라우저에서 동일한 스타일링을 유지하기 위해 CSS 초기화가 필수적입니다. 이 글에서는 CSS 초기화가 왜 중요한지, 그리고 다양한 CSS 초기화 기법들을 소개합니다.

1. CSS 초기화란?

CSS 초기화는 브라우저 간의 기본 스타일 차이를 제거하여 모든 브라우저에서 동일한 스타일링을 적용할 수 있도록 해주는 작업입니다. 브라우저마다 기본적으로 제공하는 스타일이 다르기 때문에 초기화를 통해 이 차이를 없애야 합니다. 예를 들어, <h1> 태그는 어떤 브라우저에서는 더 크고, 어떤 브라우저에서는 더 작을 수 있습니다.

2. CSS 초기화의 필요성

CSS 초기화가 필요한 이유는 다음과 같습니다

  • 일관된 스타일링: 모든 브라우저에서 동일한 스타일을 유지할 수 있습니다.
  • 예측 가능한 스타일: 브라우저 기본 스타일과 충돌하여 레이아웃 변화가 발생하는 것을 방지할 수 있습니다.
  • 개발 편의성: 초기화된 상태에서 스타일링을 시작하면 코드 작성이 더 쉽고 일관성 있게 유지됩니다.

3. CSS 초기화 방법

CSS 초기화에는 여러 방법이 있으며, 이 글에서는 대표적인 아래 2가지 방법을 설명합니다.

  • reset.css
  • normalize.css

3.1. reset.css

reset.css는 가장 기본적인 초기화 방법으로, 브라우저 기본 스타일을 모두 제거합니다. 아래 코드는 Eric Meyer가 만든 코드입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* Eric Meyer's Reset CSS v2.0 */
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}

/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
  display: block;
}

body {
  line-height: 1;
}

ol, ul {
  list-style: none;
}

blockquote, q {
  quotes: none;
}

blockquote:before, blockquote:after,
q:before, q:after {
  content: '';
  content: none;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}

3.2. normalize.css

normalize.css는 브라우저 기본 스타일을 완전히 제거하지 않고, 일관되게 정리합니다. 이렇게 하면 기본 스타일을 활용할 수 있으면서도 일관된 스타일링이 가능합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
/* normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
html {
  line-height: 1.15;
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
}

main {
  display: block;
}

h1 {
  font-size: 2em;
  margin: 0.67em 0;
}

hr {
  box-sizing: content-box;
  height: 0;
  overflow: visible;
}

pre {
  font-family: monospace, monospace;
  font-size: 1em;
}

a {
  background-color: transparent;
}

abbr[title] {
  border-bottom: none;
  text-decoration: underline;
  text-decoration: underline dotted;
}

b,
strong {
  font-weight: bolder;
}

code,
kbd,
samp {
  font-family: monospace, monospace;
  font-size: 1em;
}

small {
  font-size: 80%;
}

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}

sub {
  bottom: -0.25em;
}

sup {
  top: -0.5em;
}

img {
  border-style: none;
}

button,
input,
optgroup,
select,
textarea {
  font-family: inherit;
  font-size: 100%;
  line-height: 1.15;
  margin: 0;
}

button,
input {
  overflow: visible;
}

button,
select {
  text-transform: none;
}

button,
[type="button"],
[type="reset"],
[type="submit"] {
  -webkit-appearance: button;
}

button::-moz-focus-inner,
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

button:-moz-focusring,
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring {
  outline: 1px dotted ButtonText;
}

fieldset {
  padding: 0.35em 0.75em 0.625em;
}

legend {
  box-sizing: border-box;
  color: inherit;
  display: table;
  max-width: 100%;
  padding: 0;
  white-space: normal;
}

progress {
  vertical-align: baseline;
}

textarea {
  overflow: auto;
}

[type="checkbox"],
[type="radio"] {
  box-sizing: border-box;
  padding: 0;
}

[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
  height: auto;
}

[type="search"] {
  -webkit-appearance: textfield;
  outline-offset: -2px;
}

[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}

::-webkit-file-upload-button {
  -webkit-appearance: button;
  font: inherit;
}

details {
  display: block;
}

summary {
  display: list-item;
}

template {
  display: none;
}

[hidden] {
  display: none;
}

4. 초기화 방법의 장단점

  • reset.css:
    • 장점: 모든 브라우저에서 완전히 동일한 상태로 시작할 수 있습니다.
    • 단점: 모든 기본 스타일이 제거되기 때문에, 일부 기본 스타일을 다시 정의해야 할 수 있습니다.
  • normalize.css:
    • 장점: 브라우저 기본 스타일을 활용하면서도 일관된 스타일링을 제공합니다.
    • 단점: 기본 스타일이 유지되므로, 완전한 초기화가 필요할 경우 적합하지 않을 수 있습니다.
This post is licensed under CC BY 4.0 by the author.