Как "подкрасить" изображение с помощью css
Я пытаюсь подкрасить изображение с атрибутом фона следующим образом:
.image-holder:hover {
opacity: 1;
transition: opacity 1s, background 1s;
background: #EBEFF7;
}
.image-holder {
height: 250px;
width: 200px;
opacity: 0.5;
transition: opacity 1s, background 1s;
}
<div class="image-holder">
<img src="https://dummyimage.com/200x200/fff/000000.png" />
</div>
Ответы
Ответ 1
В зависимости от того, поддерживает ли ваш браузер фильтр, в вашем распоряжении много вариантов, caniuse.com выглядит многообещающе http://caniuse.com/#search=css%20filter: -
filter: blur(5px);
filter: brightness(0.4);
filter: contrast(200%);
filter: drop-shadow(16px 16px 20px blue);
filter: grayscale(50%);
filter: hue-rotate(90deg);
filter: invert(75%);
filter: opacity(25%);
filter: saturate(30%);
filter: sepia(60%);
Ответ 2
Я использовал несколько комбинированных фильтров для тонирования изображения полностью. Тонирование невозможно напрямую (с фильтрами), но вы можете нарисовать его сепию, адаптировать насыщенность и яркость и получить желаемый цвет, используя оттенок-поворот... Я думаю, что это было что-то вроде этого...
img {
filter: sepia(100%) saturate(300%) brightness(70%) hue-rotate(180deg);
}
Вам нужно будет адаптировать его к вашим потребностям... Надеюсь, что это поможет.
С наилучшими пожеланиями, Алекс
Ответ 3
Использование :before
селектором вы можете оттенять изображения разными цветами
.image-holder {
height: 200px;
width: 200px;
position:relative;
}
.image-holder:before {
content: "";
display: block;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(0,255,255, 0.5);
transition: all .3s linear;
}
.image-holder:hover:before {
background: none;
}
<div class="image-holder">
<img src="http://lorempixel.com/200/200" />
</div>
Ответ 4
Изменение непрозрачности родительского контейнера меняет всех детей. сделайте отдельный div, чтобы контролировать оттенок. Я забивал что-то вместе, но главное.
.image-holder {
position: relative;
max-height: 250px;
max-width: 200px;
}
.image-holder img {
display: block;
opacity: 0.5;
max-width: 100%;
max-height: inherit;
}
.tint {
position: absolute;
max-height: 250px;
max-width: 200px;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: 0;
opacity: 0;
background: #00f;
transition: opacity 1s;
}
.image-holder:hover .tint {
opacity: 1;
}
<div class="image-holder">
<div class='tint'></div>
<img src="http://lorempixel.com/200/200" />
</div>
Ответ 5
Это не совсем настоящий оттенок, но мне легче добиться цветового слоя поверх изображения. Хитрость заключается в том, чтобы использовать абсолютный слой с цветом RGBA над изображением. Это прекрасно работает для моих общих случаев.
Попробовать!
.mycontainer{
position:relative;
width:50%;
margin:auto;
}
.overtint {
position:absolute;
background-color: rgba(255,0,0,0.6);
width:100%; height:100%;
}
img{ width:100%;}
a:hover .overtint {
background-color: rgba(0,255,0,0.6);
transition-duration: .5s;
}
<div class="mycontainer">
<a href="#">
<div class="overtint"></div>
<img src="https://via.placeholder.com/300x150">
</a>
</div>