CSS ì±ë¥ ìµì í
ì¹ ì¬ì´í¸ë¥¼ ê°ë°í ë, ë¸ë¼ì°ì ê° ì¬ì´í¸ìì CSS를 ì²ë¦¬íë ë°©ìì ê³ ë ¤í´ì¼ í©ëë¤. CSSê° ìì¸ì´ ëë ì±ë¥ ì´ì를 ìíí기 ìí´ìë, CSS를 ìµì í í´ì¼ í©ëë¤. ì를 ë¤ì´, ë ëë§ ì°¨ë¨ì ìííë ¤ë©´ CSS를 ìµì í í´ì¼ íê³ ë¦¬íë¡ì° íì를 ìµìí í´ì¼ í©ëë¤. ì´ë² ê¸ììë 주ìí CSS ì±ë¥ ìµì í 기ë²ì ì´í´ë´ ëë¤.
| ì¬ì ì§ì: | 기본 ìíí¸ì¨ì´ ì¤ì¹, í´ë¼ì´ì¸í¸ ì¬ì´ë ì¹ ê¸°ì ì 기본ì ì¸ ì§ì |
|---|---|
| 목í: | ì¹ ì¬ì´í¸ìì 미ì¹ë CSS ìí¥ê³¼ ì±ë¥ í¥ìì ìí CSS를 ìµì í ë°©ë²ì ë°°ìëë¤. |
ìµì í í ê²ì¸ê°, íì§ ìì ê²ì¸ê°
CSS ìµì í를 ììí기 ì ì ëëµí´ì¼ íë 첫 ë²ì§¸ ì§ë¬¸ì "ì´ë¤ ë¶ë¶ì ìµì í í ê²ì¸ê°?"ì ëë¤. ìëìì ë¤ë£¨ë ëª ê°ì§ íê³¼ 기ë²ì ëë¶ë¶ ì¹ íë¡ì í¸ìì ì¢ì ìí¥ì 주ë ëª¨ë² ì¬ë¡ì´ì§ë§, í¹ì ìí©ììë§ íìí ê²½ì°ë ììµëë¤. 모ë 기ë²ì ì ì©íë ¤ê³ ìëíë ê²ì ìë§ ë¶íìí ìê°ì ëë¹í ìë ììµëë¤. ê° íë¡ì í¸ìì ì¤ì ë¡ ì±ë¥ ìµì íê° íìí ê³³ì íì íë ê²ì´ ì¤ìí©ëë¤.
ì´ë¥¼ ìí´ìë, ì¬ì´í¸ ì±ë¥ 측ì ì í íìê° ììµëë¤. ì ë§í¬ìì ë³¼ ì ìë¯ì´, ì êµí ì±ë¥ API를 í¬í¨í´ ì±ë¥ì 측ì í기 ìí ëª ê°ì§ ë¤ë¥¸ ë°©ë²ì´ ììµëë¤. ê°ì¥ ì½ê² ììíë ë°©ë²ì ë¸ë¼ì°ì ì ë´ì¥ëì´ ìë ë¤í¸ìí¬ì ì±ë¥ ë구 ì¬ì© ë°©ë²ì ë°°ì°ê³ , íì´ì§ ë¡ë© ìëê° ë린 ë¶ë¶ì ì°¾ì ìµì í íë ê²ì ëë¤.
ë ëë§ ìµì í
ë¸ë¼ì°ì ë í¹ì í ë ëë§ ê³¼ì ì ë°ë¦ ëë¤. íì¸í¸ë ë ì´ììì´ ìë£ë í ë°ìíë©°, ë ì´ììì ë ë í¸ë¦¬ê° ìì±ë í ì§íë©ëë¤. ë ë í¸ë¦¬ë¥¼ ìì±íë ¤ë©´ DOMê³¼ CSSOM í¸ë¦¬ê° 모ë íìí©ëë¤.
ì¬ì©ììê² ì¤íì¼ì´ ì ì©ëì§ ìì íì´ì§ë¥¼ ë³´ì¬ì£¼ê³ CSSê° ë¶ìë ì´íì ë¤ì íì¸í¸ë¥¼ íë ê²ì ì¢ì§ ìì ì¬ì©ì ê²½íì´ ë ì ììµëë¤. ì´ë¬í ì´ì ë¡, ë¸ë¼ì°ì ë íìí CSS를 íë³í ëê¹ì§ ë ëë§ì ì°¨ë¨í©ëë¤. ë¸ë¼ì°ì ë CSS를 ë¤ì´ë¡ëíê³ CSS ê°ì²´ ëª¨ë¸ (CSSOM)ì ìì±í ë¤ìì íì´ì§ë¥¼ íì¸í¸ í ì ììµëë¤.
CSSOM ìì±ì ìµì í íê³ íì´ì§ ì±ë¥ì í¥ììí¤ê¸° ìí´, íì¬ CSS ìíì ë°ë¼ ë¤ì ì¤ í ê°ì§ ì´ìì ìì ì ìíí ì ììµëë¤.
-
ë¶íìí ì¤íì¼ ì ê±°í기: ë¹ì°íê² ë¤ë¦´ ìë ìì§ë§ ì¼ë§ë ë§ì ê°ë°ìë¤ì´ ê°ë°íë ëì ì¤íì¼ìí¸ë¥¼ ì¶ê°íê³ ê²°êµ ì¬ì©íì§ ìë CSS를 ìê³ ì 리íì§ ìë ê²ì ëëìµëë¤. 모ë ì¤íì¼ì ë ì´ìì ë° íì¸í¸ ê³¼ì ìì ì¬ì©ëì§ ìëë¼ë ë¶ìë©ëë¤. ë°ë¼ì ì¬ì©íì§ ìë ì¤íì¼ì ì ê±°íë©´ íì´ì§ ë ëë§ ìë를 ê°ì í ì ììµëë¤. ì¬ì´í¸ìì ì¬ì©íì§ ìë CSS를 ì´ë»ê² ì ê±°íëì? (csstricks.com, 2019) ìì½ì ë°ë¥´ë©´, ëê·ëª¨ ì½ëë² ì´ì¤ììë í´ê²°í기 ì´ë ¤ì´ 문ì ì ëë¤. ëí, íì¤íê² ì¬ì©íì§ ìë CSS를 ì°¾ì ì ê±°íë ë§ë¥ í´ê²°ì± ì ììµëë¤. CSS를 모ëí íê³ ì´ë¤ ê²ì ì¶ê°íê³ ì ê±°íëì§ ì¡°ì¬íê³ ì ì¤í¨ì 기ì¸ì¬ì¼ í©ëë¤.
-
ê°ë³ 모ëë¡ CSS ë¶ë¦¬í기: CSS를 모ëííë©´ íì´ì§ ë¡ë ì íìíì§ ìì CSS를 ëì¤ì ë¡ëí ì ìì´ ì´ê¸° CSSì ë ëë§ ì°¨ë¨ì ì¤ì´ê³ ë¡ë©ìê°ì ë¨ì¶í ì ììµëë¤. ì´ë¥¼ ê°ì¥ ê°ë¨íê² êµ¬ííë ë°©ë²ì CSS를 ê°ë³ íì¼ë¡ ë¶ë¦¬íê³ , íìí ê²½ì°ìë§ ë¡ëíë ê²ì ëë¤.
html<!-- styles.cssì ë¡ë© ë° ë¶ìì ë ëë§ì ì°¨ë¨í©ëë¤ --> <link rel="stylesheet" href="styles.css" /> <!-- print.cssì ë¡ë© ë° ë¶ìì ë ëë§ì ì°¨ë¨íì§ ììµëë¤ --> <link rel="stylesheet" href="print.css" media="print" /> <!-- í° íë©´ìì mobile.cssì ë¡ë© ë° ë¶ìì ë ëë§ì ì°¨ë¨íì§ ììµëë¤. --> <link rel="stylesheet" href="mobile.css" media="screen and (max-width: 480px)" />ì ìì ììë ì¸ ê°ì§ ì¤íì¼ ì íì ì ê³µí©ëë¤. 기본ì ì¸ ì¤íì¼ì íì ë¡ëëê³ íëë 문ìê° ì¸ìë ëë§ ë¡ëëê³ ë¤ë¥¸ íëë íë©´ì´ ì¢ì ë ë¡ëë©ëë¤. 기본ì ì¼ë¡, ë¸ë¼ì°ì ë ê°ê° ì§ì ë ì¤íì¼ ìí¸ê° ë ë¬ë©ì ì°¨ë¨íë¤ê³ ê°ì í©ëë¤. ì¤íì¼ ìí¸ë¥¼ ì ì©í´ì¼ íë ê²ì ë¸ë¼ì°ì ìê² ìë¦¬ë ¤ë©´, media queryê° í¬í¨ëì´ ìë
mediaí¹ì±ì ì¶ê°íë©´ ë©ëë¤. ë¸ë¼ì°ì ê° í¹ì í ìë리ì¤ììë§ ì ì©í´ì¼ íë ì¤íì¼ ìí¸ë¥¼ ê°ì§íë©´, ì¤íì¼ ìí¸ë¥¼ ë¤ì´ë¡ëíì§ë§ ë ëë§ì ì°¨ë¨íì§ ììµëë¤. CSS를 ì¬ë¬ ê°ì íì¼ë¡ ë¶ë¦¬íë©´,styles.cssê°ì 주ì ë ëë§ íì¼ì í¬ê¸°ê° í¨ì¬ ììì ¸ ë ëë§ì´ ì°¨ë¨ëë ìê°ì ì¤ì¼ ì ììµëë¤. -
CSS를 ê²½ëíê³ ìì¶í기: CSS를 ê²½ëííë ê²ì, íë¡ëì ì ì½ë를 ë°°í¬í ë ì¬ëì ê°ë ì±ë§ì ìí ë¶íìí 공백ì íì¼ìì ì ë¶ ì ê±°íë ê²ì ì미í©ëë¤. CSS를 ê²½ëííë©´ ë¡ë© ìê°ì í¬ê² ì¤ì¼ ì ììµëë¤. ê²½ëíë ì¼ë°ì ì¼ë¡ ë¹ë ê³¼ì ìì ìíë©ëë¤. ì를 ë¤ì´, ëë¶ë¶ì JavaScript íë ììí¬ë íë¡ì í¸ë¥¼ ë°°í¬í ì¤ë¹ê° ëìì ë ì½ë를 ê²½ëíí©ëë¤. ê²½ëí ë°©ë² ì¸ìë, ì¬ì´í¸ë¥¼ í¸ì¤í íë ìë²ê° íì¼ì ì ë¬í기 ì ì gizp ê°ì ìì¶ ë°©ìì ì¬ì©íëë¡ ì¤ì íì¸ì.
-
ì íì ë¨ìíí기: ì¬ëë¤ì íìí ì¤íì¼ì ì ì©í ë, ë¶íìíê² ë³µì¡í ì íì를 ìì±íë ê²½ì°ê° ë§ìµëë¤. ì´ë íì¼ í¬ê¸° ë¿ë§ ìëë¼ ì íì íì± ìê°ë ì¦ê°ìíµëë¤. ì를 ë¤ì´, ë¤ìê³¼ ê°ì ìì ê° ììµëë¤.
css/* ì주 구체ì ì¸ ì íì */ body div#main-content article.post h2.headline { font-size: 24px; } /* ìë§ë ì´ ì íìë§ íìí ê²ì ëë¤ */ .headline { font-size: 24px; }ì íì를 ë ë³µì¡íê³ ë 구체ì ì¼ë¡ ë§ëë ê²ì ì ì§ë³´ììë ì¢ìµëë¤. ê°ë¨í ì íìë ìí ì ì½ê² ì´í´í ì ìê³ ì íìê° ë 구체ì ì´ë©´ ì¶í ì¤íì¼ì ì½ê² ë®ì´ì¸ ì ììµëë¤.
-
íì ì´ìì¼ë¡ ë§ì ììì ì¤íì¼ì ì ì©íì§ ë§ì¸ì: íí ì¤ìë ì ì²´ ì íì를 ì¬ì©íì¬ ëª¨ë ìì ëë íì ì´ìì ììì ì¤íì¼ì ì ì©íë ê²ì ëë¤. ì´ë¬í ì¤íì¼ë§ ë°©ë²ì í¹í ê·ëª¨ê° í° ì¬ì´í¸ììë ì±ë¥ì ë¶ì ì ì¸ ìí¥ì ì¤ ì ììµëë¤.
css/* <body> ë´ë¶ì 모ë ìì를 ì íí©ëë¤ */ body * { font-size: 14px; display: flex; }font-sizeê°ì ë§ì ìì±ì ë¶ëª¨ ììë¡ë¶í° ê°ì ììë°ëë¤ë ì ì 기ìµíì¸ì. êµ³ì´ ëª¨ë ììì ìì±ì ì ì©í íìë ììµëë¤. ê·¸ë¦¬ê³ Flexbox ê°ì ê°ë ¥í ë구ë ì ì¤íê² ì¬ì©í´ì¼ í©ëë¤. 모ë ê³³ìì ì¬ì©íë ê²ì ìê¸°ì¹ ìì ëìì ì¼ì¼í¤ë ìì¸ì¼ ì ììµëë¤. -
CSS ì¤íë¼ì´í¸ë¡ ì¬ì§ HTTP ìì² ì¤ì´ê¸°: CSS ì¤íë¼ì´í¸ë ìì´ì½ ê°ì ì¬ì´í¸ìì ì¬ì©íë ¤ë ì¬ë¬ ìì ì¬ì§ì íëì íì¼ì ë°°ì¹íê³ ê°ê° ë¤ë¥¸ ìì¹ìì íìí ì´ë¯¸ì§ ë¶ë¶ì íìíëë¡, ê°ê¸° ë¤ë¥¸
background-positionê°ì ì¬ì©íì¬ ê° ìì¹ì íìí ì¬ì§ ë¶ë¶ì íìíë 기ë²ì ëë¤. ì´ ê¸°ë²ì í¨ì¹í ì¬ì§ì ë¶ë¬ì¤ë HTTP ìì² íì를 ê·¹ì ì¼ë¡ ì¤ì¼ ì ììµëë¤. -
ì¤ìí ìì í리ë¡ë í기: ì¤ìí ììì ìí´
<link>ììê° í리ë¡ëë¡ ì¤íëëë¡rel="preload"를 ì¬ì©í ì ììµëë¤. ì¬ê¸°ìë CSS íì¼, ê¸ê¼´, ì¬ì§ì´ í¬í¨ë©ëë¤.html<link rel="preload" href="style.css" as="style" /> <link rel="preload" href="ComicSans.woff2" as="font" type="font/woff2" crossorigin /> <link rel="preload" href="bg-image-wide.png" as="image" media="(min-width: 601px)" />preload를 ì¬ì©íë©´, ë¸ë¼ì°ì ë 참조ë ììì ê°ë¥í ë¹ ë¥´ê² í¨ì¹íê³ ë¸ë¼ì°ì ìºììì ì¬ì© ê°ë¥íëë¡ ë§ë¤ ê²ì ëë¤. ê·¸ëì ë¸ë¼ì°ì ê° íì ì½ëìì ììì 참조í ë ììì´ ì¬ì©ììê² ê³§ë°ë¡ ì¤ë¹ë ì ìëë¡ í©ëë¤. ì¬ì©ìê° íì´ì§ìì 먼ì ë§ì£¼íê³ ì°ì ììê° ëì ììì í리ë¡ë íë ê²ì ì ì©íë©°, ì¬ì©ì ê²½íì ìµëí 매ëë¬ìì§ëë¤.mediaí¹ì±ì ì¬ì©íì¬ ë°ìí í리ë¡ë를 ë§ëë ë°©ë²ì 주목íì¸ì.ë¡ë© ìë ê°ì ì ìí´ ì¤ì ìì í리ë¡ë í기 web.dev (2020)ìì ë ì´í´ë³´ì¸ì.
ì ëë©ì´ì ë¤ë£¨ê¸°
ì ëë©ì´ì ì ì¸ì§ë ì±ë¥ì í¥ììí¬ ì ììµëë¤. ì¸í°íì´ì¤ê° ë ë¹ ë¥´ê² ëê»´ì§ê² íê³ ì¬ì©ìê° íì´ì§ ë¡ë를 기ë¤ë¦´ ë ë¡ë© ì¤í¼ëì ê°ì ìì를 íµí´ ì§í ìí©ì ìë ¤ì¤ëë¤. ê·¸ë¬ë, ë í¬ê³ ë§ì ì ëë©ì´ì ì ìì°ì¤ë½ê² ë ë§ì ì²ë¦¬ ë¥ë ¥ì ì구í©ëë¤. ê·¸ë¦¬ê³ ì±ë¥ì ì íìí¬ ì ììµëë¤.
ê°ì¥ ê°ë¨í ì¡°ì¸ì ë¶íìí 모ë ì ëë©ì´ì
ì ì¤ì´ë ê²ì
ëë¤. ì¬ì©ìê° ì ì ë ¥ 기기ë ì íë ë°°í°ë¦¬ ì ë ¥ì ì¬ì© ì¤ì´ë¼ë©´ ì ëë©ì´ì
ì ë ì ìë ì ì´ ì¥ì¹ë ì¬ì´í¸ íê²½ì¤ì ì ì ê³µí ì ììµëë¤. 첫 íì´ì§ìì ì ëë©ì´ì
ì ì© ì¬ë¶ë¥¼ JavaScriptë¡ ì ì´í ìë ììµëë¤. prefers-reduced-motionì´ë¼ë 미ëì´ ì¿¼ë¦¬ê° ìì¼ë©°, ì¬ì©ìì ì ëë©ì´ì
OS ë 벨 íê²½ì¤ì ì ë°ë¼ ì íì ì¼ë¡ ì ëë©ì´ì
ì¤íì¼ì ì ê³µíê±°ë ì ì©íì§ ìì ì ììµëë¤.
íìì ì¸ DOM ì ëë©ì´ì ì¼ ë, ê°ë¥í ê²½ì° JavaScript ì ëë©ì´ì ëì CSS ì ëë©ì´ì ì¬ì©ì ê¶ì¥í©ëë¤. ì¹ ì ëë©ì´ì APIë JavaScriptë¡ CSS ì ëë©ì´ì ì ì§ì ì°ê²°í ì ìë ë°©ë²ì ì ê³µí©ëë¤.
ì ëë©ì´ì ìì± ì íí기
ë¤ìì¼ë¡, ì ëë©ì´ì ì±ë¥ì ì ëë©ì´ì ì ì ì©íë ìì±ì í¬ê² ìì¡´í©ëë¤. ì ëë©ì´ì ì ì ì©í ë, í¹ì ìì±ì 리íë¡ì°ì 리íì¸í¸ë¥¼ ì¼ì¼í¤ë¯ë¡ í¼í´ì¼ í©ëë¤. ì´ë¬í ìì±ì ë¤ìê³¼ ê°ìµëë¤.
- ììì í¬ê¸° ë³ê²½,
width,height,border,paddingì´ ììµëë¤. - ìì ìì¹ ë³ê²½,
margin,top,bottom,left,rightê° ììµëë¤. - ìì ë ì´ìì ì¡°ì ,
align-content,align-items,flexê° ììµëë¤. - ìì ìê°ì í¨ê³¼ ì¶ê°,
box-shadowê° ììµëë¤.
íë ë¸ë¼ì°ì ë ì ì²´ íì´ì§ë³´ë¤ 문ìì ë³ê²½ë ë¶ë¶ë§ 리íì¸í¸ íëë° ì¶©ë¶í ëëí©ëë¤. ê²°ê³¼ì ì¼ë¡ ë í° ì ëë©ì´ì ì ì±ë¥ì ë í° ë¶ë´ì ì¤ëë¤.
ê°ë¥íë¤ë©´, 리íë¡ì°ë 리íì¸í¸ë¥¼ ì¼ì¼í¤ì§ ìë ìì±ì¼ë¡ ì ëë©ì´ì ì íë ê²ì´ ë ì¢ìµëë¤. ë¤ìê³¼ ê°ìµëë¤.
GPUìì ì ëë©ì´ì ì ì©í기
ë ëìê° ì±ë¥ì í¥ììí¤ê¸° ìí´, ì ëë©ì´ì ì ë©ì¸ ì¤ë ëìì ë²ì´ëê² íê³ í©ì±ê³¼ ê´ë ¨ë GPUìì ì²ë¦¬íëë¡ ì®ê¸°ë ê²ì ê³ ë ¤í´ì¼ í©ëë¤. ì´ë¥¼ ìí´ ë¸ë¼ì°ì ê° ìëì¼ë¡ GPUìì ì²ë¦¬íëë¡ í¹ì ì ëë©ì´ì ì íì ì íí´ì¼ í©ëë¤. ë¤ìê³¼ ê°ìµëë¤.
transform: translateZ(),rotate3d()ì ê°ì 3D ë³í ì ëë©ì´ì position: fixedì ê°ì í¹ì ìì±ì´ ì ì©ë ì ëë©ì´ì ììwill-changeìì±ì´ ì ì©ë ìì. ìëì ìì¸í ì´í´ë´ ëë¤.- ìì ì ë ì´ì´ìì ë ëë§ëë í¹ì ìì,
<video>,<canvas>,<iframe>ì´ ììµëë¤.
GPUìì ì ëë©ì´ì ì ì¤ííë©´ í¹í 모ë°ì¼ìì ì±ë¥ì´ í¥ìë ì ììµëë¤. íì§ë§, ì ëë©ì´ì ì GPUë¡ ì®ê¸°ë ê³¼ì ì íì ê°ë¨í ê²ì ìëëë¤. ì´ì ëí ì ì©íê³ ìì¸í ë¶ìì CSS GPU ì ëë©ì´ì : ì¬ë°ë¥´ê² í기 smashingmagazine.com, 2016ìì íì¸í´ë³´ì¸ì.
will-changeë¡ ìì ë³ê²½ ìµì í í기
ë¸ë¼ì°ì ë ììê° ì¤ì ë¡ ë³ê²½ë기 ì ì 미리 ìµì í를 ìíí ìë ììµëë¤. ì´ë¬í ìµì íë ì±ë¥ ë¶ë´ì´ í° ìì
ì 미리 ìíí¨ì¼ë¡ì¨ íì´ì§ ìëµì±ì í¥ììí¬ ì ììµëë¤. CSS will-change ìì±ì ììê° ì´ë»ê² ë³ê²½ë ì§ ë¸ë¼ì°ì ìê² ë¯¸ë¦¬ ìë ¤ì¤ëë¤.
주ì
will-changeë 기존 ì±ë¥ 문ì 를 í´ê²°í기 ìí ìµíì ìë¨ì¼ë¡ ì¬ì©í´ì¼ í©ëë¤. ì±ë¥ 문ì ê° ë°ìí ê²ì ììíê³ ì¬ì©íë ê²ì ê¶ì¥ëì§ ììµëë¤.
.element {
will-change: opacity, transform;
}
ë ëë§ ì°¨ë¨ ìµì í í기
CSSë 미ëì´ ì¿¼ë¦¬ë¡ ì¤íì¼ì í¹ì ì¡°ê±´ì ë§ì¶° ë²ì를 ì§ì í ì ììµëë¤. 미ëì´ ì¿¼ë¦¬ë ë°ìí ì¹ ëìì¸ì ì¤ìíê³ ì¤ì ë ëë§ ê²½ë¡ë¥¼ ìµì í íëë° ëìì ì¤ëë¤. ë¸ë¼ì°ì ë 모ë ì¤íì¼ì ë¶ìí ëê¹ì§ ë ëë§ì ì°¨ë¨íì§ë§ íë¦°í¸ ì¤íì¼ìí¸ ê°ì ì¬ì©íì§ ìë ì¤íì¼ì¸ ê²½ì°ìë ë ëë§ì ì°¨ë¨íì§ ììµëë¤. 미ëì´ ì¿¼ë¦¬ì 기ë°íì¬ CSS를 ë¤ì íì¼ë¡ ë¶ë¦¬í¨ì¼ë¡ì¨, ì¬ì©ëì§ ìë CSS ë¤ì´ë¡ë를 íë ë ëë§ ì°¨ë¨ì ìë°©í ì ììµëë¤. ë
¼ ë¸ë¡í¹ CSS ë§í¬ë¥¼ ìì±íë ¤ë©´, íë¦°í¸ ì¤íì¼ê³¼ ê°ì´ ë°ë¡ ì¬ì©ëì§ ìë ì¤íì¼ì ë³ëì íì¼ë¡ ë¶ë¦¬íê³ HTML ë§í¬ì
ì <link> ìì를 ì¶ê°í í, 미ëì´ ì¿¼ë¦¬ë¥¼ ì¶ê°íì¸ì. ì´ ê²½ì°, í´ë¹ ì¤íì¼ìí¸ë íë¦°í¸ ì¤íì¼ìí¸ ìíë¡ ì§ì ë©ëë¤.
<!-- styles.cssì ë¡ë© ë° íì±ì ë ëë§ì ì°¨ë¨í©ëë¤ -->
<link rel="stylesheet" href="styles.css" />
<!-- print.cssì ë¡ë© ë° íì±ì ë ëë§ì ì°¨ë¨íì§ ììµëë¤. -->
<link rel="stylesheet" href="print.css" media="print" />
<!-- í° íë©´ìì mobile.cssì ë¡ë© ë° íì±ì ë ëë§ì ì°¨ë¨íì§ ììµëë¤. -->
<link
rel="stylesheet"
href="mobile.css"
media="screen and (max-width: 480px)" />
기본ì ì¼ë¡, ë¸ë¼ì°ì ë ê°ê°ì í¹ì ì¤íì¼ ìí¸ë¥¼ ë ëë§ ì°¨ë¨íëë¡ ì¶ì í©ëë¤. media queryë¡ media í¹ì±ì ì¶ê°íì¬ ì¸ì ì¤íì¼ ìí¸ê° ì ì©ëì´ì¼ íëì§ ë¸ë¼ì°ì ìê² ìë ¤ì¤ ì ììµëë¤. ë¸ë¼ì°ì ê° í¹ì ìí©ììë§ íìí ì¤íì¼ ìí¸ìì ì¸ìíë©´, í´ë¹ íì¼ì ë¡ëíëë¼ë ë ëë§ì ì°¨ë¨íì§ ììµëë¤. CSS를 ì¬ë¬ íì¼ë¡ ë¶ë¦¬íë©´, ë ëë§ ì°¨ë¨ì´ ë°ìíë 주ì ì¤íì¼ ìí¸ styles.css íì¼ í¬ê¸°ë¥¼ í¨ì¬ ë ì¤ì¼ ì ìì´ ë ëë§ ì°¨ë¨ ìê°ì´ ë¨ì¶ë©ëë¤.
ê¸ê¼´ ì±ë¥ ê°ì í기
ì´ ì¹ì ììë ì¹ ê¸ê¼´ì ì±ë¥ì í¥ììí¤ë ì ì©í íì í¬í¨íê³ ììµëë¤.
ì¼ë°ì ì¼ë¡, ì¬ì´í¸ìì ì¬ì©íë ¤ë ê¸ê¼´ì ê´í´ ì ì¤íê² ìê°íì¸ì. ì¼ë¶ ê¸ê¼´ íì¼ì ì©ëì´ ì ë©ê°ë°ì´í¸ ì´ìì¼ë¡ ë§¤ì° í´ ì ììµëë¤. ìê°ì í¨ê³¼ë¥¼ ìí´ ë§ì ê¸ê¼´ ì¬ì©ì ìëí ì ìì§ë§, íì´ì§ ë¡ëë ìë¹í ëë ¤ì§ ì ìê³ ì¬ì´í¸ê° ì´ìì í´ ë³´ì´ë ìì¸ì¼ ì ììµëë¤. ìë§ ë ì¸ ê°ì ê¸ê¼´ë§ íìë¡ í ê²ëë¤. ê·¸ë¦¬ê³ ì¹ ìì ê¸ê¼´ì ì¬ì©íë©´ ë ì ê² ì¬ì©í ì ììµëë¤.
ê¸ê¼´ ë¡ë©
ê¸ê¼´ì font-family ìì±ì ì¬ì©íì¬ ììì ì¤ì ë¡ ì ì©ë ëë§ ë¡ëëë¤ë ê²ì ëª
ì¬íì¸ì. @font-face ê·ì¹ì ì¬ì©íì¬ ì²ì 참조ëë¤ê³ í´ì ê¸ê¼´ì´ ë¡ëëë ê²ì ìëëë¤.
/* ê¸ê¼´ì ì¬ê¸°ì ë¡ëëì§ ììµëë¤ */
@font-face {
font-family: "Open Sans";
src: url("OpenSans-Regular-webfont.woff2") format("woff2");
}
h1,
h2,
h3 {
/* ì¤ì ë¡ ì¬ê¸°ì ë¡ëë©ëë¤ */
font-family: "Open Sans";
}
ê·¸ë¬ë¯ë¡ ì¤ìí ê¸ê¼´ì 먼ì ë¶ë¬ì¤ê¸° ìí´ rel="preload"를 ì¬ì©íë ê²ì ì ìµí ì ììµëë¤. ì´ë ê² íë©´ ì¤ì ë¡ ê¸ê¼´ì´ íìí ë ë 빨리 ì¬ì©í ì ìê² ë©ëë¤.
<link
rel="preload"
href="OpenSans-Regular-webfont.woff2"
as="font"
type="font/woff2"
crossorigin />
ì´ ë°©ë²ì font-family ì ì¸ì´ ì¸ë¶ì í° ì¤íì¼ìí¸ ìì ì¨ê²¨ì ¸ ìê³ ë¶ì ê³¼ì ìì ìë¹í ë¦ê² ì ì©ë ê²½ì° ëì± ì ìµí ì ììµëë¤. ê·¸ë¬ë ê¸ê¼´ íì¼ì´ ìë¹í í¬ê¸° ë문ì, ë¤ìì íì¼ì í리ë¡ë íë©´ ë¤ë¥¸ ììì ë¡ëê° ì§ì°ë ì ìë ì ì ê°ìí´ì¼ í©ëë¤.
ë¤ì ì¬íë ê³ ë ¤í´ë³¼ ì ììµëë¤.
rel="preconnect"를 ì¬ì©íì¬ ê¸ê¼´ ì ê³µìì 미리 ì°ê²°í ì ììµëë¤. ìì¸í ì¬íì 주ìí ì 3ì ì¶ì²ì ì¬ì ì°ê²°í기ìì ì´í´ë³´ì¸ì.- CSS ê¸ê¼´ ë¡ë© API를 ì¬ì©íì¬ JavaScriptë¡ ê¸ê¼´ ë¡ë©ì ì¬ì©ì ì ìí ì ììµëë¤ë¤.
íìí ê¸ë¦¬íë§ ë¡ë©í기
본문 문구ì ì¬ì©í ê¸ê¼´ì ì íí ë, í¹í ì¬ì©ìê° ìì±í ì½í ì¸ ë ì¬ë¬ ì¸ì´ë¥¼ í¬í¨íë ì½í ì¸ ë¥¼ ë¤ë£¬ë¤ë©´ ì´ë¤ ê¸ë¦¬íê° ì¬ì©ë ì§ íì í기 ì´ë µìµëë¤.
ê·¸ë¬ë, ì 목ì´ë í¹ì ë¬¸ì¥ ë¶í¸ì ê°ì´ ì¬ì©í ê¸ë¦¬í ì§í©ì 구체ì ì¼ë¡ ìê³ ìë¤ë©´, ë¸ë¼ì°ì ê° ë¤ì´ë¡ëí´ì¼ íë ê¸ë¦¬í ì를 ì íí ì ììµëë¤. ì´ë íìí ê¸ë¦¬íë§ í¬í¨ë ê¸ê¼´ íì¼ì ìì±íë ë°©ìì¼ë¡ ì´ë£¨ì´ì§ëë¤. ì´ ê³¼ì ì ë¶ë¶ ì§í©íë¼ê³ í©ëë¤. ê·¸ë° ë¤ì unicode-range @font-face ì¤ëª
ì를 ì¬ì©íì¬ ì¸ì íì ì§í© ê¸ê¼´ì ì¬ì©í ì§ ì§ì í ì ììµëë¤. íì´ì§ê° ì´ ë²ììì í¬í¨ë ê¸ì를 ì¬ì©íì§ ìì¼ë©´, í´ë¹ ê¸ê¼´ì ë¤ì´ë¡ëíì§ ììµëë¤.
@font-face {
font-family: "Open Sans";
src: url("OpenSans-Regular-webfont.woff2") format("woff2");
unicode-range: U+0025-00FF;
}
font-display ì¤ëª
ìë¡ ê¸ê¼´ íì ëì ì ìí기
@font-face ê·ì¹ì ì ì©ëë font-display ì¤ëª
ìë ë¸ë¼ì°ì ê° ê¸ê¼´ íì¼ì ì´ë»ê² ë¡ëíê³ íìí ì§ ì ìí©ëë¤. ê·¸ë¦¬ê³ ê¸ê¼´ì´ ë¡ëëê±°ë ë¡ëëì§ ìì ë, í´ë°± ê¸ê¼´ë¡ ëíëê² í©ëë¤. ì´ë ê² íë©´ ë¹ íë©´ ëì ê¸ì를 ë³´ì¬ì¤ì¼ë¡ì¨ ì±ë¥ì í¥ììí¤ì§ë§, ì¤íì¼ëì§ ìì ê¸ìê° ì ì ëíëë ì ì¶©ì´ ë°ìí©ëë¤.
@font-face {
font-family: someFont;
src: url(/path/to/fonts/someFont.woff) format("woff");
font-weight: 400;
font-style: normal;
font-display: fallback;
}
CSS containmentë¡ ì¤íì¼ë§ ì¬ê³ì° ìµì íí기
CSS containment 모ëìì ì ìí ìì±ì ì¬ì©íë©´ ë¸ë¼ì°ì ìê² íì´ì§ì ë¤ë¥¸ ë¶ë¶ë¤ì ë 립ì ì¼ë¡ 격리íê³ ë ëë§ì ìµì ííëë¡ ì§ìí ì ììµëë¤. ì´ë¥¼ íµí´ ê°ë³ ë¶ë¶ ë ëë§ ì±ë¥ì í¥ììí¬ ì ììµëë¤. íëì ììë¡, ë·°í¬í¸ì ë³´ì´ê¸° ì ê¹ì§ í¹ì 컨í ì´ë를 ë ëë§íì§ ìëë¡ ë¸ë¼ì°ì ì ì§ìí ì ììµëë¤.
contain ìì±ì ì ìê° íì´ì§ì ê°ë³ 컨í
ì´ëì ì ì©í containment ì íì ì ííê² ì§ì í ì ìê² í©ëë¤. ì´ë¥¼ íµí´ ë¸ë¼ì°ì ë DOMì ì íë ë¶ë¶ì ëí´ ë ì´ìì, ì¤íì¼, íì¸í¸, í¬ê¸° ëë ì´ë¤ì ì¡°í©ì ì¬ê³ì°í ì ììµëë¤.
article {
contain: content;
}
content-visibility ìì±ì ì ì©íê³ ìì¬ì´ ë°©ë²ì
ëë¤. ì´ ìì±ì ì ìê° ì»¨í
ì´ëì ì¤ì ìì ê°ë ¥í 격리 ì¤ì ì ì ì©íëë¡ íê³ ë¸ë¼ì°ì ê° íìí ëê¹ì§ í´ë¹ 컨í
ì´ëë¤ì ë ì´ììíê³ ë ëë§íì§ ìëë¡ ì§ì í©ëë¤.
ë ë²ì§¸ ìì±ì¸ contain-intrinsic-sizeë ì¬ì© ê°ë¥í©ëë¤. ì´ ìì±ì 컨í
ì´ëê° ê²©ë¦¬ í¨ê³¼ë¥¼ ë°ë ëì ì리 íìì í¬ê¸°ë¥¼ ì ê³µí ì ìê² í´ì¤ëë¤. ì¦, ì½í
ì¸ ê° ìì§ ë ëë§ëì§ ììëë¼ë 컨í
ì´ëê° ê³µê°ì ì°¨ì§íê² ëì´, ììê° ë ëë§ ëê³ íë©´ì ëíë ë ì¤í¬ë¡¤ë° ì´ëê³¼ ë²ë²
거림 ìì´ ì±ë¥ ìµì í를 구íí ì ììµëë¤.ì´ ìì±ì ì½í
ì¸ ê° ë¡ëë ë ì¬ì©ì ê²½íì ê°ì í©ëë¤.
article {
content-visibility: auto;
contain-intrinsic-size: 1000px;
}
ê°ì´ 보기
- CSS ì ëë©ì´ì ì±ë¥
- ê¸ê¼´ ëª¨ë² ìì web.dev (2022)
- content-visibility: ë ëë§ ì±ë¥ì ê°ì íë ìë¡ì´ CSS ìì± web.dev (2022)