Как выполнить линейное уклонение в CSS?

Проблема:

Дочерний элемент и его контейнер имеют цвет bg с прозрачностью. Если дочерний элемент находится внутри контейнера, цвет дочернего элемента будет вычисляться на основе родительского. Что мне делать, чтобы сохранить прозрачность обоих, сделав цвет дочернего bg точно таким же, как я указал.

Например:

У меня полноэкранное фоновое изображение.

И div с дочерними элементами внутри.

<div class = "container">
  <input class = "mask-moderate__input" />
  <button class = "mask-moderate__button"></button>
</div>

Каждый из стилей определяет фон rgba.

Это может как-то представить ситуацию. «Цвет 2» слева - это то, что я хочу, потому что я не помещал его в контейнер, и его цвет rgba(90, 90, 90, 0.35) рассчитывается непосредственно на основе фона. Но если я напишу элементы в div (как в строке заголовка), цвет bg будет рассчитываться на основе цвета bg rgba(55, 55, 55, 0.35) div, а это не то, что я хочу. Как выполнить линейное уклонение в CSS?

Возможное решение:

  1. Выполните линейное уклонение. Просто добавьте дельту rgb на основе цвета bg div и оставьте альфа неизменным, так что (55, 55, 55, 0,35) + (35, 35, 35) = (90, 90, 90, 0,35) <- то же самое как «цвет 2» слева.

  2. Заполните div, но держитесь подальше от определенной области. (Не заполняйте области, где элементы находятся прямо над ними)

  3. Скриптовые способы.

Примечание:

Я работаю над проектом Angular 6. Также приветствуются любые решения, выходящие за рамки vanilla JS.

Спасибо!

Вы можете уточнить эффект, который ищете?

Chris Li 09.09.2018 12:23

Заполните контейнер прозрачным цветом, за исключением областей, в которых размещены элементы.

Zenas Chen 09.09.2018 12:44

ты можешь нарисовать, как это выглядит?

Chris Li 09.09.2018 12:46

Извините, что не пояснил. Я обновил картинку и надеюсь, что она поможет прояснить мою цель.

Zenas Chen 09.09.2018 12:59
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
4
325
1

Ответы 1

Я не знаю, ищете ли вы этот ответ или нет.
Если ответ не поможет, дайте мне знать в комментариях, я удалю это.

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

Но если у обоих будет прозрачный фон, вам, возможно, придется сослаться на это:
Вопрос о переполнении стека по дочерней и родительской прозрачности

.flex-container {
  display: flex;
  background-image: linear-gradient(to right, rgba(255,0,0,0), rgba(255,0,0,1));
}

.flex-container > div {
  background-image: linear-gradient(to right, rgba(0,255,0,0), rgba(0,0,20,0.3));
  margin: 10px;
  padding: 20px;
  font-size: 30px;
}
<div class = "flex-container">
  <div>1</div>
  <div>2</div>
  <div>3</div>  
</div>

Если сплошной фон дети

.flex-container {
  display: flex;
  background-image: linear-gradient(to left, rgba(255,0,0,0), rgba(255,0,0,1));
}

.flex-container > div {
  background-color: #ffff1f;
  margin: 10px;
  padding: 20px;
  font-size: 30px;
}
<div class = "flex-container">
  <div>1</div>
  <div>2</div>
  <div>3</div>  
</div>

Спасибо за ответ, но я не думаю, что проблема решена. Я изменил формулировку своей проблемы и надеюсь, что на этот раз она прояснится.

Zenas Chen 09.09.2018 13:49

@ZenasChen Вы видели stackoverflow.com/questions/50574524/… Если да? это было полезно?

Abhishek Kumar 09.09.2018 14:08

да. Думаю, mix-blend-mode, упомянутый в вашей ссылке, меня вдохновляет. Возможно, мне придется написать отдельные классы для обработки такого наложения. Тем не менее, я ожидаю более простых решений, в которых я могу использовать только единый набор классов. Спасибо!

Zenas Chen 09.09.2018 14:30

@ZenasChen будут различия в цвете, если прозрачность будет рассматриваться как указанная мной ссылка. Также mix-blend-mode удобен в использовании, но будьте осторожны с его поддержкой.

Abhishek Kumar 09.09.2018 14:38

Другие вопросы по теме