Подтвердить что ты не робот

Эффекты Gooey css с контрастным родителем

Я пытаюсь создать эффект gooey с CSS только (без svg). Все идет правильно, но мой родительский контейнер имеет contrast filter, и я не могу использовать цвета для своих дочерних элементов (контрастный фильтр меняет цвета).

Знает ли кто-нибудь о базовом способе сделать этот эффект только с помощью CSS или отменить фильтр контрастности, чтобы получить правильные цвета для дочерних элементов?

Мой код:

body{
  background: #fff;
}

.blobs {
  position:absolute;
  top:0;
  left:0;
  bottom:0;
  right:0;
  background: #fff;
  width:400px;
  height:200px;
  margin:auto;
  filter:contrast(20);
  -webkit-filter:contrast(20);
}

.blob {
  background:black;
  width:100px;
  height:100px;
  position:absolute;
  left:50%;
  top:50%;
  margin-top:-50px;
  margin-left:-50px;
  border-radius:100%;
  transition: cubic-bezier(0.82, 0.1, 0.24, 0.99) 2.5s;
  -webkit-transition: cubic-bezier(0.82, 0.1, 0.24, 0.99) 2.5s;
  box-shadow: 0 0 30px 10px black;
}

.blobs:hover .blob:first-child {
  transform:translateX(-70px);
}

.blobs:hover .blob:last-child {
  transform:translateX(70px);
}
<div class="blobs">
  <div class="blob"></div>
  <div class="blob"></div>
</div>
4b9b3361

Ответ 1

Я принял ваш эффект. На контейнере я установил псевдоэлемент, который его покрывает, любым цветом, который вы хотите.

И в режиме mix-blend-mode я могу установить этот цвет, где контейнер черный, сохраняя оставшийся белый:

(Кстати, очень приятный эффект!)

body{
  background: #fff;
}

.blobs {
  position:absolute;
  top:0;
  left:0;
  bottom:0;
  right:0;
  background: #fff;
  width:400px;
  height:200px;
  margin:auto;
  filter:contrast(20);
  -webkit-filter:contrast(20);
}

.blobs:after {
  content: "";
  position: absolute;
  top:0;
  left:0;
  bottom:0;
  right:0;
  background-color: coral;  
  mix-blend-mode: lighten;
}

.blob {
  background:black;
  width:100px;
  height:100px;
  position:absolute;
  left:50%;
  top:50%;
  margin-top:-50px;
  margin-left:-50px;
  border-radius:100%;
  transition: cubic-bezier(0.82, 0.1, 0.24, 0.99) 1.5s;
  box-shadow: 0 0 30px 10px black;
}

.blobs:hover .blob:first-child {
  transform:translateX(-70px);
}

.blobs:hover .blob:last-child {
  transform:translateX(70px);
}
<div class="blobs">
  <div class="blob"></div>
  <div class="blob"></div>
</div>

Ответ 2

Для этого ответа мне пришлось только внести изменения в свойство фильтра

contrast(15) contrast(.5) sepia(1) brightness(1.85) hue-rotate(319deg) saturate(3.45)
  • Во-первых, мы устанавливаем контрастность 15 (20 сделали края слишком жесткими, если вы спросите меня).
  • Затем мы вернем его .5 (Да, вы можете складывать эти вещи)

Итак, теперь у нас есть фона lightgray и darkgray blobs

  • Применить сепию (которая придает ей цвет)
  • Добавить яркость 1,85 (теперь фон снова белый, и у нас есть цветные капли)
  • hue-rotate, чтобы получить нужный оттенок
  • насытить, чтобы придать ему насыщенность

Последние три свойства в списке необходимы для получения правильного цвета. Ваша цель - rgb (255, 113, 93). При использовании этой линии цвета имеют значение rgb (255, 115, 94)

Вы можете увидеть, как он работает в this Fiddle

Как оповещение. Вы также можете преобразовывать стек, а это означает, что если вы хотите центрировать капли, вам не придется использовать отрицательные поля, но используйте трюк translate(-50%, -50%). Затем, когда вы наводите на них курсор, вы можете просто складывать преобразования, подобные этому translate(-50%, -50%) translateX(-70px)