색상과 배경


버튼을 특정한 톤의 파란색으로 만들고 싶다고 해봅시다. 디자인 파일에서 그 색을 찾아 #1b2130을 스타일시트에 붙여 넣으면 잘 작동하지만, 그 문자들이 무슨 뜻인지, 이 색을 조금 더 밝게 만들려면 어떻게 해야 하는지는 전혀 알 수가 없습니다. CSS의 색상은 그 밑바탕에 있는 몇 가지 체계를 배우기 전까지는 알 수 없는 코드 더미처럼 보입니다. 색상을 읽고 배경에 칠할 수 있게 되면, 페이지의 시각적 개성 대부분을 여러분 손으로 다룰 수 있게 됩니다.
색상 이름 붙이기
CSS에서는 같은 색을 여러 방식으로 쓸 수 있습니다. 가장 간단한 방법은 **키워드**로, 브라우저가 이미 알고 있는 평범한 영어 이름을 쓰는 것입니다.
.tag {
color: rebeccapurple; /* 이름이 붙은 색상, 코드가 필요 없음 */
}이런 이름은 약 140개 정도 있는데, 빠르게 작업할 때는 편리하지만 실제 디자인에 쓰기에는 턱없이 부족합니다. 다른 방식들은 어떤 색이든 표현할 수 있게 해줍니다. hex 코드는 # 뒤에 여섯 글자를 붙인 것이고, rgb()는 빨강, 초록, 파랑을 양으로 섞은 것입니다. 이들은 모두 정확한 색을 가리키며, 키워드는 그중 흔히 쓰이는 색을 위한 지름길일 뿐입니다.
.tag {
color: #1b2130; /* 같은 다크 네이비, hex 코드로 표현 */
}rebeccapurple 같은 키워드, #1b2130 같은 hex 코드, 또는 rgb()로 쓸 수 있습니다. 키워드는 빠르지만 약 140개뿐이라서 실제 작업 대부분은 코드를 씁니다. 아직 hex 코드를 눈으로 읽으려고 하지 마세요. 지금 단계에서는 정확한 값을 그대로 복사하는 것이 완전히 정상입니다. 투명도
때로는 색을 부분적으로 투명하게 만들어서 뒤에 있는 것이 조금 보이게 하고 싶을 때가 있습니다. 이것이 **투명도**이며, alpha라는 네 번째 값을 추가해서 만듭니다. 0은 완전히 투명, 1은 완전히 불투명입니다.
.overlay {
background-color: rgb(27 33 48 / 0.5); /* 네이비, 하지만 절반만 투명하게 보임 */
}끝에 붙은 / 0.5는 "불투명도 50%"라는 뜻입니다. 엘리먼트 전체를, 텍스트까지 포함해서 한꺼번에 희미하게 만드는 opacity라는 속성도 있습니다.
.faded {
opacity: 0.5; /* 특정 색상이 아니라 엘리먼트 전체를 희미하게 만듦 */
}이 차이는 중요합니다. alpha는 그 색상 하나에만 영향을 주지만, opacity는 엘리먼트에 관한 모든 것을 희미하게 만듭니다.
0은 보이지 않음, 1은 불투명, / 0.5 같은 값은 그 중간입니다. 이 alpha는 그 색 하나에만 적용됩니다. 별도의 opacity 속성은 텍스트까지 포함해서 엘리먼트 전체를 희미하게 만드므로, 배경만 부드럽게 하고 싶을 때는 alpha를 선택하세요. 배경 색상과 이미지
background-color 속성은 엘리먼트의 테두리까지 그 뒤쪽 영역을 채웁니다. 이름을 붙일 수 있는 색이라면 어떤 것이든 쓸 수 있습니다.
.hero {
background-color: hsl(219 28% 15%); /* 콘텐츠 뒤에 놓인 단색 네이비 */
}background-image로 엘리먼트 뒤에 이미지를 넣을 수도 있으며, url(...)로 파일을 가리킵니다.
.hero {
background-image: url("mountains.jpg");
background-size: cover; /* 전체 영역을 채우도록 이미지를 확대 */
}background-size: cover는 넘치는 부분을 잘라내면서 이미지가 상자를 완전히 채우도록 확대합니다. 빈 공간이 생기지 않도록 하려면 대부분의 경우 이 설정을 쓰면 됩니다.
background-color는 엘리먼트 뒤쪽 공간을 채우고, background-image: url(...)는 그 자리에 대신 그림을 넣습니다. 이미지에 background-size: cover를 함께 써서 빈 공간 없이 상자 전체를 채우세요. 이 조합이면 초반에 필요한 대부분의 경우를 다룰 수 있습니다. 그라디언트
**그라디언트**는 한 색에서 다른 색으로 부드럽게 이어지는 색 변화입니다. CSS는 이것을 이미지의 한 종류로 취급하므로, background-color가 아니라 background-image에 씁니다.
.banner {
background-image: linear-gradient(hsl(219 28% 15%), hsl(219 40% 35%));
}이 코드는 위쪽의 첫 번째 색에서 아래쪽의 두 번째 색으로 이어지며 색이 섞입니다. 색을 두 개보다 더 나열할 수도 있고, 방향을 바꿀 수도 있습니다.
.banner {
background-image: linear-gradient(to right, hsl(340 80% 55%), hsl(30 90% 60%));
/* 위에서 아래가 아니라 왼쪽에서 오른쪽으로 색이 섞임 */
}이미지 파일이 필요 없습니다. 브라우저가 색 변화를 대신 그려줍니다.
background-image에 씁니다. linear-gradient()는 기본적으로 위에서 아래로 직선 방향을 따라 색이 섞이며, 방향을 바꾸려면 to right 등을 추가하면 됩니다. 파일이 필요 없고, 브라우저가 직접 색 변화를 그려줍니다. 상황에 맞게 변하면서 읽기 쉬운 색상
유용한 키워드로 currentColor가 있습니다. 이것은 엘리먼트의 텍스트 색을 대신 가리키는 값이므로, 테두리나 아이콘이 텍스트 색과 자동으로 맞춰지게 만들 수 있습니다.
.chip {
color: hsl(219 28% 15%);
border: 2px solid currentColor; /* 테두리가 텍스트 색과 일치함 */
}나중에 텍스트 색을 바꾸면 테두리도 별도의 수정 없이 저절로 따라갑니다.
한 가지 더 기억할 점은, 텍스트가 배경과 확실히 구별되게 만들어야 한다는 것입니다. 어두운 배경에 어두운 텍스트는 읽기 어렵고, 흰 배경에 흐린 회색도 눈이 피로해집니다. 둘 사이에 밝기 차이가 뚜렷하게 나도록 하세요.
currentColor는 엘리먼트의 텍스트 색을 그대로 복사해오는 키워드이므로, 테두리를 텍스트와 맞추고 나중에 텍스트 색을 바꾸면 그것도 따라가게 만들 수 있습니다. 그 외에는 텍스트가 읽기 쉽도록 유지하세요. 뒤쪽 배경보다 확실히 더 밝거나 더 어둡게 만드세요. 낮은 대비는 페이지가 읽기 어려워지는 가장 흔한 원인입니다. 
