🎨 5 CSS-ΠΏΡ€ΠΈΠ΅ΠΌΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Π΅Ρ€Ρƒ

5 ΠΌΠΎΡ‰Π½Ρ‹Ρ… CSS-Ρ‚Π΅Ρ…Π½ΠΈΠΊ для соврСмСнной Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ: сСлСктор :has(), ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Π΅ мСдиазапросы, Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с порядком ΠΏΡ€Π°Π²ΠΈΠ» ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ для ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².

Π­Ρ‚ΠΎΡ‚ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» взят ΠΈΠ· нашСй СТСнСдСльной email-рассылки, посвящСнной Ρ„Ρ€ΠΎΠ½Ρ‚Π΅Π½Π΄Ρƒ. ΠŸΠΎΠ΄ΠΏΠΈΡˆΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² числС ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΡ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ дайдТСст.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ CSS-стилСй Π² зависимости ΠΎΡ‚ количСства Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов

CSS-сСлСктор :has() позволяСт ΡΡ‚ΠΈΠ»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты, учитывая количСство Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΡ… элСмСнтов Π² Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ – вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ стили для случаСв с ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ элСмСнтами. Π—Π΄Π΅ΡΡŒ :has(> :nth-child(2)) провСряСт, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρƒ элСмСнта .uia-control Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ элСмСнт. Если ΠΎΠ½ Π΅ΡΡ‚ΡŒ, Ρ‚ΠΎ ΠΊ .uia-control примСняСтся ΡΡ‚ΠΈΠ»ΡŒ gap: 1rem;, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ расстояниС ΠΌΠ΅ΠΆΠ΄Ρƒ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌΠΈ элСмСнтами:

.uia-control {
  display: inline-flex;
  /* remaining CSS */
}

.uia-control:has(> :nth-child(2)) {
  gap: 1rem;
}

Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ зависимыми стилями

ВмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ стили для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, которая синхронизируСт измСнСния Π²ΠΎ всСх связанных мСстах. Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π²Ρ‹ Π·Π°Π΄Π°Π΅Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· (Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ --page-banner-height), Π° измСнСния Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡŽΡ‚ΡΡ Π½Π° всС элСмСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ – Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π²Ρ‹ Ρ€Π΅ΡˆΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ высоту Π±Π°Π½Π½Π΅Ρ€Π° с 2rem Π½Π° 3rem, Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Π² :root:

:root {
  --page-banner-height: 2rem;
}

.banner {
  height: var(--page-banner-height);
  position: fixed;
}

.content {
  padding-top: var(--page-banner-height);
}

РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с порядком ΠΏΡ€Π°Π²ΠΈΠ»

ИспользованиС CSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… позволяСт ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, связанной с порядком CSS-ΠΏΡ€Π°Π²ΠΈΠ» ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΉ спСцифичности. Π‘ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹: Π² CSS, Ссли Π΄Π²Π° ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡƒΡŽ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½ΠΎΡΡ‚ΡŒ, примСняСтся послСднСС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π² порядкС ΠΈΡ… написания. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌ, особСнно Ссли Π²Ρ‹ добавляСтС стили для Ρ€Π°Π·Π½Ρ‹Ρ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°. НапримСр, здСсь порядок ΠΏΡ€Π°Π²ΠΈΠ» Π²Π°ΠΆΠ΅Π½ – Ссли Π²Ρ‹ случайно помСняСтС ΠΈΡ… мСстами, модификация .heading_size-l ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ, ΠΈ Π²Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚Π΅ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

.heading {
  font-size: 1rem;
} 
.heading_size-l {
  font-size: 2rem;
}

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ CSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Π²Ρ‹ опрСдСляСтС значСния Ρ‡Π΅Ρ€Π΅Π· свойства, Π° Π½Π΅ ТСстко Π·Π°Π΄Π°Π΅Ρ‚Π΅ ΠΈΡ… Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ классС. Π—Π΄Π΅ΡΡŒ порядок опрСдСлСния .heading ΠΈ .heading_size-l Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния:

.heading_size-l {
  --heading-font-size: 2rem;
}

.heading {
  font-size: var(--heading-font-size, 1rem);
}

ΠšΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹Π΅ мСдиазапросы

ИспользованиС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… CSS-ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… с мСдиазапросами ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΊΠΎΠ΄, Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ ΠΈ Π»Π΅Π³ΠΊΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹ΠΌ: вмСсто Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ стили для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π²Π½ΡƒΡ‚Ρ€ΠΈ мСдиазапроса, ΠΌΡ‹ опрСдСляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС. Π­Ρ‚ΠΎ особСнно ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с Π°Π΄Π°ΠΏΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½Π°ΠΌΠΈ, Π³Π΄Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, отступы ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ стили зависят ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° экрана:

.intro__heading {
  font-size: 2rem;
}

.intro__description {
  font-size: 1rem;
}

@media (width >= 641px) {
  .intro__heading {
    font-size: 3rem;
  }

  .intro__description {
    font-size: 2rem;
  }  
}

Бтилизация чСкбоксов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ :has()

Π‘Π΅Π»Π΅ΠΊΡ‚ΠΎΡ€ :has() ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΈΠ΅ ΠΈ устойчивыС ΠΊ измСнСниям Π² HTML-структурС ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ чСкбоксы. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΎΠ΄Π½Ρƒ ΠΈΠ· основных ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΈ использовании сосСдних сСлСкторов (+, ~), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ зависят ΠΎΡ‚ фиксированного порядка элСмСнтов. Π”ΠΎ появлСния :has() для стилизации ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… чСкбоксов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ использовали сСлСктор ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ сосСда +:

.cb__input:checked + .cb__label::before {
  /* Π‘Ρ‚ΠΈΠ»ΠΈ */
}

Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Ссли порядок элСмСнтов строго фиксирован (чСкбокс всСгда ΠΈΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄ ΠΌΠ΅Ρ‚ΠΊΠΎΠΉ). Если порядок измСнится, Ρ‚ΠΎ стили пСрСстанут Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ сСлСктор + Π½Π΅ смоТСт Π½Π°ΠΉΡ‚ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт:

<div class="cb">
  <label class="cb__label">Option</label>
  <input type="checkbox" class="cb__input">
</div>

РСшСниС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ – сСлСктор :has(): ΠΎΠ½ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ нСзависимо ΠΎΡ‚ порядка, провСряя Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ элСмСнта, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π³ΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ (Π² Π΄Π°Π½Π½ΠΎΠΌ случаС :checked). Π­Ρ‚ΠΎΡ‚ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ особСнно ΠΏΠΎΠ»Π΅Π·Π΅Π½, Ссли структура Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ динамичСском Ρ€Π΅Π½Π΄Π΅Ρ€ΠΈΠ½Π³Π΅ элСмСнтов.

.cb:has(:checked) .cb__label::before {
  /* CSS of the custom checkbox is here */
}
***

КакиС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹Π΅ CSS-ΠΏΡ€ΠΈΠ΅ΠΌΡ‹ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π² своСй Π΅ΠΆΠ΅Π΄Π½Π΅Π²Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅? ΠŸΠΎΠ΄Π΅Π»ΠΈΡ‚Π΅ΡΡŒ своим ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ!

***

Π₯ΠΎΡ‡Π΅ΡˆΡŒ ΠΎΡΠ²ΠΎΠΈΡ‚ΡŒ соврСмСнный Frontend с нуля? Proglib Academy запустили ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΉ курс: ΠΎΡ‚ основ HTML Π΄ΠΎ React.js Π·Π° 2 мСсяца с ΠΊΠΎΠ΄-Ρ€Π΅Π²ΡŒΡŽ ΠΎΡ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΡƒΡŽΡ‰ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΈΠ· Π“Π°Π·ΠΏΡ€ΠΎΠΌΠ±Π°Π½ΠΊΠ° ΠΈ Аэрофлота.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊΠΈ

Π›Π£Π§Π¨Π˜Π• БВАВЬИ ПО Π’Π•ΠœΠ•

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° программиста
06 фСвраля 2017

15 прСкрасных ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² для Sublime Text

ВстрСчайтС список ΠΏΠ΅Ρ€Π²ΠΎΠΉ нСобходимости – 15 самых Π½ΡƒΠΆΠ½Ρ‹Ρ… ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² для Subli...