Як зробити дірку у <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

171Прочитань
5Автори
7Читачі
На Друкарні з 6 травня

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

Вам також сподобається

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

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

Вам також сподобається