문자 인코딩 방식을 지정한다. 스타일 시트의 첫 번째 요소여야 한다.
@charset "UTF-8"; /* 스타일 시트의 인코딩을 Unicode UTF-8로 설정 */
@charset 'iso-8859-15'; /* 스타일 시트의 인코딩을 Latin-9 (서유럽어, euro sign 있는) 로 설정 */
@charset "UTF-8"; /* X, at-규칙 앞에 문자(공백)가 있음 */
@charset UTF-8; /* X, ' 또는 " 없는 문자집합 CSS <string> (en-US)이 아님 */
@media only screen and (min-width: 480px) {
body{font-size:14px;}
}
@media only screen and (min-width: 768px) {
body{font-size:16px;}
}
// 이미지 스프라이트 작업 시 1.5배짜리로 작업 필요
@media
only screen and (-webkit-min-device-pixel-ratio:1.5),
only screen and (min-device-pixel-ratio:1.5),
only screen and (min-resolution:1.5dppx){
.img_kabang{background-image:url($imgUrl/m640/img_kabang_180104.png);-webkit-background-size:130px 125px;background-size:130px 125px}
}
// 이미지 스프라이트 작업 시 2배짜리로 작업 필요
@media
only screen and (-webkit-min-device-pixel-ratio:2),
only screen and (min-device-pixel-ratio:2),
only screen and (min-resolution:2dppx){
.img_kabang{background-image:url($imgUrl/m640/img_kabang_180104.png);-webkit-background-size:130px 125px;background-size:130px 125px}
}
@media (orientation: portrait) {
/* Portrait 모드일 때 적용할 CSS */
}
@media (orientation: landscape) {
/* Landscape 모드일 때 적용할 CSS */
}
@media print {
body {
font-size: 12pt;
}
}
IE 지원 안함
주어진 하나 이상의 css 기능을 브라우저가 지원하는지에 따라서 다른 스타일을 선언할 수 있다.
기능 쿼리 (feature query)라고 부른다.
@support
는 스타일의 최상위 단계, 또는 다른 조건부 그룹 규칙에 중첩해 위치할 수 있다.
@supports (display: grid){
div{
display: grid;
}
}
@supports not (display: grid) {
div {
float: right;
}
}
@supports (transform:rotate(45deg)) or (-webkit-transform:rotate(45deg)){
.box{transform:rotate(45deg);}
}
@supports selector(A > B){
.contents > .box {background:#000;}
}
@supports not ((text-align-last: justify) or (-moz-text-align-last: justify) ){
… /* text-align-last: justify를 대체할 CSS */
}
/* 사용자 정의 지원 여부 판별 */
@supports (--foo: green) {
body {
color: var(--varName);
}
}
not
- ( )
안의 스타일을 지원하지 않는 브라우저인 경우 하위 스타일을 적용한다.
and
/ or
- 모두 참, ~중 에 참인 경우로 조건을 줘서 CSS값을 적용할 수 있다.
selector (A > B){ }
- 특정 선택자를 지원하는지 분별하고 스타일을 적용한다.
/* :is()를 지원하지 않는 브라우저에서는 무시함 */
:is(ul, ol) > li {
… /* :is() 선택자를 지원할 때 적용할 CSS */
}
@supports not selector(:is(a, b)) {
/* :is()를 지원하지 않을 때 대체할 CSS */
ul > li,
ol > li {
… /* :is()를 지원하지 않을 때 적용할 CSS */
}
}
@supports - CSS: Cascading Style Sheets | MDN
애니메이션 중간 중간의 분기를 설정함으로써 중간 절차를 제어할 수 있게 한다.
@keyframes slidein {
from {
margin-left: 100%;
width: 300%;
}
to {
margin-left: 0%;
width: 100%;
}
}
@keyframes identifier {
0% { top: 0; left: 0; }
30% { top: 50px; }
68%, 72% { left: 50px; }
100% { top: 100px; left: 100%; }
}
웹 페이지의 텍스트에 온라인 폰트를 적용할 수 있다.
@font-face {
font-family: MyHelvetica;
src: local("Helvetica Neue Bold"),
local("HelveticaNeue-Bold"),
url(MgOpenModernaBold.ttf);
font-weight: bold;
}
모든 브라우저 지원 안함
부모 상속해서 겹쳐서 선언하는 경우 유용하게 사용할 수 있는 스타일
nav { }
nav ul { }
nav ul li { }
nav {
// style
& ul {
// style
& li {
// style
}
}
}
.foo{
color: red;
@nest :not(&) {
color: blue;
}
}
// 위 내용은 아래오 같이 변환된다.
.foo{
color: red
}
:not(.foo){
color: blue;
}
모든 브라우저 지원 안함
스타일 범위를 지정하거나 자신만의 버블로 분리할 수 있다.
@scope (header){
.title {
font-size: 14px;
}
nav{
display: flex;
}
}
@scope (aside){
.title {
font-size: 28px;
}
nav{
display: grid;
}
}
@scope (.dark-theme){
.title {
color: white;
}
nav{
background: black;
}
}
@scope (.light-theme){
.title {
color: black;
}
nav{
background: white;
}
}
@scope (.purple-theme){
.title {
color: black;
}
nav{
background: white;
}}
}
CSS요소는 전체 페이지의 넓이 변경에만 대응할 수 있었는데, 이제는 부모에도 대응할 수 있다.
header {
container-type: inline-size;
container-name: header-container;
}
@container header-container (min-width: 600px) {
nav {
display: flex;
}
}
@custom-media로 원하는 변수를 설정하고, 이를 미디어쿼리에서 적용할 수 있다.
// 변수 설정
@custom-media --darkMode (prefers-color-sheme: dark);
@custom-media --lightMode (prefers-color-sheme: light);
@custom-media --landscape (orientation: landscape);
@custom-media --portrait (orientation: portrait);
@custom-media --iPhone (max-device-width: 480px);
// 미디어쿼리 적용
@media(--darkMode) and (--portrait) and (--iPhone) {
body {
//...
}
}
@media (--lightMode) and (--portrait) and (--iPhone) {
body{
// ...
}
}