CSS 버튼 스타일링 - <button>
HTML과 CSS를 이용하여 다음과 같은 웹에서 흔히 볼 수 있는 버튼을 만들어보도록 하겠습니다.
HTML 작성
먼저 4가지 종류(기본, 성공, 오류, 경고)의 버튼에 대한 HTML을 작성합니다.
<form>
<button>기본</button>
<button disabled class="success">성공</button>
<button class="error">오류</button>
<button class="warning">경고</button>
</form>
디폴트 스타일 제거
대부분의 브라우저는 User Agent Style이라고 불리는 디폴트(default) 스타일을 버튼에 적용해줍니다.
아무 스타일을 적용하지 않더라도 <button/>
엘리먼트가 시각적으로 버튼처럼 보이게 하기 위함인데요.
아이러니하게도 커스텀 스타일을 적용할 때는 이러한 브라우저 별로 조금씩 상이한 이 디폴트 스타일이 걸림돌이 되곤 합니다.
button {
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
위와 같이 appearance
속성을 사용해서 이러한 브라우저에서 디폴트로 제공하는 스타일을 제거합니다.
기본 스타일링
여백, 폰트, 테두리, 레이아웃과 같이 버튼의 종류에 무관하게 동일하게 유지되는 스타일을 먼저 적용해보겠습니다.
@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+KR&display=swap");
button {
/* 생략 */
margin: 0;
padding: 0.5rem 1rem;
font-family: "Noto Sans KR", sans-serif;
font-size: 1rem;
font-weight: 400;
text-align: center;
text-decoration: none;
display: inline-block;
width: auto;
border: none;
border-radius: 4px;
}
반드시 필요하지는 않지만 버튼에서 없으면 뭔가 허전한 감초같은 효과들도 적용해주도록 하겠습니다.
button {
/* 생략 */
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
cursor: pointer;
transition: 0.5s;
}
상태 스타일링
<button/>
엘리먼트는 active
, hover
, focus
, disabled
와 같은 상태를 갖습니다.
버튼의 상태가 변할 때 살짝씩 시각적인 변화를 주면 보다 긍정적인 사용자 경험을 제공할 수 있습니다.
button:active,
button:hover,
button:focus {
background: var(--button-hover-bg-color);
outline: 0;
}
button:disabled {
opacity: 0.5;
}
background
속성에 CSS 변수(CSS variables, CSS custom properties)가 사용되고 있는데요.
다음 섹션에서 이 CSS 변수를 선언하고 버튼 종류에 따라 다른 색상을 할당하겠습니다.
변형 스타일링
HTML 코드를 보면 버튼의 종류를 구분하기 위해서 <button/>
엘리먼트마다 다른 클래스(class)가 설정되어 있습니다.
클래스에 따라서 글자와 배경에 다른 색상을 적용할 수 있도록 CSS 변수를 선언하고 기본 버튼의 색상을 할당합니다.
이 때, 이전 섹션에서 언급한 상태가 변했을 때 적용해 줄 색상도 추가로 정의합니다.
:root {
--button-color: #ffffff;
--button-bg-color: #0d6efd;
--button-hover-bg-color: #025ce2;
}
그리고 위에서 정의한 CSS 변수를 이용하여 기본 버튼의 글자색과 배경색을 스타일해줍니다.
button {
/* 생략 */
background: var(--button-bg-color);
color: var(--button-color);
}
다른 종류의 버튼에는 다른 색상이 적용될 수 있도록 클래스 선택자를 통해 CSS 변수의 값을 재할당 해줍니다.
button.success {
--button-bg-color: #28a745;
--button-hover-bg-color: #218838;
}
button.error {
--button-bg-color: #dc3545;
--button-hover-bg-color: #c82333;
}
button.warning {
--button-color: #212529;
--button-bg-color: #ffc107;
--button-hover-bg-color: #e0a800;
}
경고 버튼의 경우, 배경색이 밝아서 다른 종류의 버튼과 달리 글자색을 어두운 계열로 바꿔준 것을 볼 수 있습니다.