π©βπ» Π‘ΠΏΠΎΡΠΎΠ±Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΡΡΠΈΠ»Π΅ΠΉ
ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΌΡ ΠΈΠ·ΠΎΠ»ΠΈΡΡΠ΅ΠΌ ΡΡΠΈΠ»ΠΈ? ΠΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΡΠΈΠ»Π΅ΠΉ, ΠΌΡ ΠΌΠ΅Π½ΡΡΠ΅ Π²ΡΠ΅Π³ΠΎ Ρ ΠΎΡΠΈΠΌ, ΡΡΠΎΠ±Ρ ΡΡΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°, ΠΊΠ°ΠΊ-ΡΠΎ ΠΌΠ΅ΡΠ°Π»ΠΈ ΡΠ°Π±ΠΎΡΠ΅ Π΄ΡΡΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°ΠΌ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΅ΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅.
1. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ² ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠ° ΡΡΠΈΠ»Π΅ΠΉ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΠΈΠΌΠ΅Π½ ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π²Ρ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Button, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠ»Π°ΡΡΡ Π²ΡΠΎΠ΄Π΅ .button-primary ΠΈΠ»ΠΈ .button-secondary. ΠΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΠΊ Π½Π°Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠΈΠ»Π΅ΠΉ ΠΎΡ Π΄ΡΡΠ³ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
`Click Me
`.my-component { background-color: #f0f0f0; }
.my-component__button { color: white; background-color: blue; border-radius: 4px; }
Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Π΄Π΅Π»Π°Π΅Ρ ΡΡΠΈΠ»ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΈ ΡΠ½ΠΈΠΆΠ°Π΅Ρ Π²Π΅ΡΠΎΡΡΠ½ΠΎΡΡΡ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ, ΠΎΠ½ ΡΡΠ΅Π±ΡΠ΅Ρ ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π½Π°Π΄ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»Π°ΡΡΠΎΠ².
2. CSS Modules ΠΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΡΠΏΠΎΡΠΎΠ± ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΈΠ»ΠΈ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ CSS Modules. ΠΡΠΎΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΠΊΠ»Π°ΡΡΠΎΠ² Π΄Π»Ρ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠΌΡ Π² ΡΠΎΡΠΌΠ°ΡΠ΅ [ΠΈΠΌΡ_ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°]_hash, ΡΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ ΡΡΠΈΠ»Π΅ΠΉ.
ΠΡΠΈΠΌΠ΅Ρ:
`import styles from './styles.module.css';
const Button = () => ( Click Me );
ΠΠ΄Π΅ΡΡ ΡΠ°ΠΉΠ» styles.module.css ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΎΠ±ΡΡΠ½ΡΠ΅ CSS-ΠΏΡΠ°Π²ΠΈΠ»Π°, Π½ΠΎ ΠΏΡΠΈ ΡΠ±ΠΎΡΠΊΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΡΡΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π»Π΅ΠΊΡΠΎΡΡ.
`/* styles.module.css */ .button { font-size: 16px; padding: 8px 12px; cursor: pointer; }
ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²ΠΎ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ½ΠΎ Π΄ΡΠΌΠ°ΡΡ ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΡΡ ΠΈΠΌΠ΅Π½ ΠΊΠ»Π°ΡΡΠΎΠ² Π²ΡΡΡΠ½ΡΡ.
3. Shadow DOM Π’Π΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Shadow DOM, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΠ°Ρ Π² Web Components, ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΈΠ·ΠΎΠ»ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ΅ Π΄Π΅ΡΠ΅Π²ΠΎ DOM Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΡΠΈΠ»ΠΈ Π²Π½ΡΡΡΠΈ Shadow DOM Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΡΡ Π½Π° Π²Π½Π΅ΡΠ½ΠΈΠΉ ΠΊΠΎΠ½ΡΠ΅Π½Ρ ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ.
`class MyComponent extends HTMLElement { constructor() { super();
const shadowRoot = this.attachShadow({ mode: 'open' }); shadowRoot.innerHTML = `
button { color: white; background-color: blue; border-radius: 4px; }
Click Me `; } } customElements.define('my-component', MyComponent);
Π’Π°ΠΊΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠΎΠ»Π½ΡΡ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ Π²Π°ΡΠΈΡ ΡΡΠΈΠ»Π΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΠΌΠ΅Π΅Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π² ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΡΡΠ°ΡΡΡ Π±ΡΠ°ΡΠ·Π΅ΡΠΎΠ².
4. Scoped Styles Π² Vue.js Π€ΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Vue.js ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ scoped styles, ΠΊΠΎΡΠΎΡΡΠΉ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΊΠ»Π°ΡΡΡ Π² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅. ΠΡΠΎ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π½Π° CSS Modules, Π½ΠΎ Π²ΡΡΡΠΎΠ΅Π½ΠΎ ΠΏΡΡΠΌΠΎ Π² ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Vue-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
`Click Me
.container { margin-top: 20px; } .btn { color: white; background-color: blue; border-radius: 4px; }
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° scoped ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΎΠ±Π»Π°ΡΡΡ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡΠΈ ΡΡΠΈΠ»Π΅ΠΉ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π°Π½Π½ΡΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠΌ.
5. ΠΠΠ-ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΠ»ΠΎΠΊ-ΠΠ»Π΅ΠΌΠ΅Π½Ρ-ΠΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ (ΠΠΠ) ΡΠ°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΡΡΡΡΠΊΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΈΠ·ΠΎΠ»ΡΡΠΈΠΈ ΡΡΠΈΠ»Π΅ΠΉ. ΠΠ½Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π»ΠΎΠΊΠΈ, ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
`ΠΠ°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ
ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ°
ΠΠ½ΠΎΠΏΠΊΠ°
`.block { padding: 10px; }
.block__title { font-weight: bold; }
.block__button { display: inline-block; padding: 6px 12px; text-decoration: none; }
.block__button--primary { background-color: blue; color: white; }
ΠΠ°ΠΊΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ Π²Ρ Π΅ΡΠ΅ Π·Π½Π°Π΅ΡΠ΅?````````