Друкарня від WE.UA

Як зробити дірку у <div> або трошки про mix-blend-mode

В нашій компанії почали оновлювати апку ну і звичайно оновлювати дизайни. Приходять якось дизайнири і кажуть: Ми тут думали думали і придумали от такий от модал:

дизайн який має бути

Що ж тут такого модал як модал але не все так просто. Середня частина модала має бути також прозорою і там мають проявлятися обриси бекграунду сайту.

Для прикладу не будемо створювати прям аж такий таки модал, а спрощений. Отже HTML буде виглядати так:

<div class="modal">
  <div class="header">
    <span class="header-text">
      Some text
    </span>
    <span class="close-button">&#x2715;</span>
  </div>
  <div class="content">
    <p>
      Some content
    </p>
  </div>
</div>

Базовий CSS наступний:

.modal {
  background-color: rgba(0, 0, 0, 0.7);
  backdrop-filter: blur(50px);
  max-width: 400px;
  max-height: 600px;
  padding: 8px;
  gap: 8px;
  border-radius: 8px;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}

.header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 8px;
  align-self: stretch;
}

.header-text {
  color: #fff;
  font-size: 14px;
  font-weight: 500;
  line-height: 20px;
  padding-right: 8px;
}

.close-button {
  color: #fff;
}

.content{
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  row-gap: 16px;
  align-self: stretch;
  border-radius: 8px;
  padding: 8px;
  background-color: rgba(255, 255, 255, 0.15);
  backdrop-filter: blur(50px);
  color: #fff;
  height: 200px;
}

Картнка для бекграунду довільна. Кольори для модалу взяті з мокапів дизайнерів у фігмі і мають бути саме такі. А то потім прийде страшний QA і скаже що у вас колір не той.

Результат маємо наступний:

перша спроба

Бачимо що центральний дів в нас не прозорий і не дуже світлий незважаючи на те що він білий. Що ж нам робити що б нас не побили дизайнери і QA?

На допомогу нам прийде mix-blend-mode.

Що таке mix-blend-mode? MDN нам каже що це властивість яка встановлює, як вміст елемента має поєднуватися з вмістом батьківського елемента та фоном елемента.

mix-blend-mode має безліч варіантів:

mix-blend-mode: normal;
mix-blend-mode: multiply;
mix-blend-mode: screen;
mix-blend-mode: overlay;
mix-blend-mode: darken;
mix-blend-mode: lighten;
mix-blend-mode: color-dodge;
mix-blend-mode: color-burn;
mix-blend-mode: hard-light;
mix-blend-mode: soft-light;
mix-blend-mode: difference;
mix-blend-mode: exclusion;
mix-blend-mode: hue;
mix-blend-mode: saturation;
mix-blend-mode: color;
mix-blend-mode: luminosity;

Деякі зних схожі на фільтри в інстаграмі і можна робити прикольні фони.

Нам буде потрібен mix-blend-mode:lighten;

Для того що б виправити наш модал ми огортаємо наш контент модалу у ще один <div> і отримаємо

<div class="cover">
   <div class="content">
       <p>
          Some content
       </p>
   </div>
 </div>

Далі робимо бекграунд прозорим і додаємо наш mix-blend-mode.

.cover{
  background: transparent;
  mix-blend-mode: lighten;
}

І отримаємо наш бажаний прозорий фон контенту.

фінал

Кольори бекграунду зміксовані так що фактично в нас тепер посерд діву “прозора дірка” через яку ми бачимо обриси бекграунду, а зверху той колір який просили нас дизайнери.

Не виключаю що є і інші варіанти це зробити, але сьогодні про такий метод досягти бажаного.

П.С.

Ніколи ще не писала статті про свою роботу так що перший млинець може бути комом.

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
О
Олександра@olexandra_im we.ua/olexandra_im

4Довгочити
227Прочитання
7Підписники
На Друкарні з 6 травня

Більше від автора

Це також може зацікавити:

Коментарі (3)

дуже цікаво, дякую) перший раз чую про таку специфічну css властивість

Це також може зацікавити: