Черный прозрачный наложения на изображения при наведении курсора с помощью CSS?
Я пытаюсь добавить прозрачное черное наложение на изображение всякий раз, когда мышь нависает над изображением только с помощью CSS. Это возможно? Я попробовал это:
http://jsfiddle.net/Zf5am/565/
но я не могу заставить div появиться.
<div class="image">
<img src="http://www.newyorker.com/online/blogs/photobooth/NASAEarth-01.jpg" alt="" />
<div class="overlay" />
</div>
.image {
position: relative;
border: 1px solid black;
width: 200px;
height: 200px;
}
.image img {
max-width: 100%;
max-height: 100%;
}
.overlay {
position: absolute;
top: 0;
left: 0;
display: none;
background-color: red;
z-index: 200;
}
.overlay:hover {
display: block;
}
8 ответов:
я бы предложил использовать псевдо-элемент вместо элемента наложения. Потому что псевдо-элементы не могут быть добавлены на заключенный
imgэлементы, вам все равно нужно будет обернутьimgэлемент хотя.ЖИВОЙ ПРИМЕР ЗДЕСЬ--ПРИМЕР С ТЕКСТОМ
<div class="image"> <img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" /> </div>что касается CSS, set необязательные измерения на
.imageэлемент, и относительно его позиции. Если вы стремитесь для отзывчивого изображения просто опустите размеры, и это все равно будет работать (пример). Просто стоит отметить, что размеры должны быть на родительском элементе, а не на элемент посмотреть..image { position: relative; width: 400px; height: 400px; }отдай ребенка
imgэлемент шириной100%родителя и добавитьvertical-align:topдля устранения проблем выравнивания базовой линии по умолчанию..image img { width: 100%; vertical-align: top; }что касается псевдо-элемента, установите значение содержимого и абсолютно позиционировать его относительно
.imageэлемент. Ширина/высота100%будет гарантировать, что это работает с переменнымimgгабариты. Если вы хотите перевести элемент, установите непрозрачность0и добавьте свойства/значения перехода..image:after { content: '\A'; position: absolute; width: 100%; height:100%; top:0; left:0; background:rgba(0,0,0,0.6); opacity: 0; transition: all 1s; -webkit-transition: all 1s; }используйте непрозрачность
1при наведении указателя мыши на псевдо-элемент для облегчения перехода:.image:hover:after { opacity: 1; }
если вы хотите добавить текст при наведении:
для простейшего подхода просто добавьте текст в качестве псевдо-элемента
contentзначение:.image:after { content: 'Here is some text..'; color: #fff; /* Other styling.. */ }это должны работа в большинстве случаев, однако, если у вас есть больше чем один
imgэлемент, возможно, вы не хотите, чтобы один и тот же текст появлялся при наведении. Поэтому вы можете установить текст вdata-*атрибут и поэтому имеют уникальный текст для каждогоimgэлемент..image:after { content: attr(data-content); color: #fff; }С
contentстоимостьюattr(data-content), псевдо элемент добавляет текст из тега.imageэлемент :<div data-content="Text added on hover" class="image"> <img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" /> </div>вы можете добавить некоторые стиль и сделать что-то вроде этого:
в приведенном выше примере
:afterпсевдо элемент служит в качестве черного наложения, в то время как:beforeпсевдо элемент-это заголовок / текст. Поскольку элементы не зависят друг от друга, можно использовать отдельные стили для более оптимального позиционирования..image:after, .image:before { position: absolute; opacity: 0; transition: all 0.5s; -webkit-transition: all 0.5s; } .image:after { content: '\A'; width: 100%; height:100%; top: 0; left:0; background:rgba(0,0,0,0.6); } .image:before { content: attr(data-content); width: 100%; color: #fff; z-index: 1; bottom: 0; padding: 4px 10px; text-align: center; background: #f00; box-sizing: border-box; -moz-box-sizing:border-box; } .image:hover:after, .image:hover:before { opacity: 1; }
CSS3 filter
хотя эта функция реализована только в webkit, и она не имеет совместимость с браузерами, но стоит взглянуть на:
.image img { max-width: 100%; max-height: 100%; -webkit-transition: .2s all; } .image img:hover { -webkit-filter: brightness(50%); }ссылки
- https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html
- http://www.html5rocks.com/en/tutorials/filters/understanding-css/
- https://developer.mozilla.org/en-US/docs/Web/CSS/filter
- http://davidwalsh.name/css-filters
- http://net.tutsplus.com/tutorials/html-css-techniques/say-hello-to-css3-filters/
похожие темы на так
Вы были близки. Это будет работать:
.image { position: relative; border: 1px solid black; width: 200px; height: 200px; } .image img { max-width: 100%; max-height: 100%; } .overlay { position: absolute; top: 0; left: 0; right:0; bottom:0; display: none; background-color: rgba(0,0,0,0.5); } .image:hover .overlay { display: block; }вам нужно поставить
:hoverна изображение, и сделать.overlayпокройте все изображение, добавивright:0;иbottom:0.jsfiddle: http://jsfiddle.net/Zf5am/569/
вот хороший способ использования :после на изображении div, вместо дополнительного наложения div:http://jsfiddle.net/Zf5am/576/
<div class="image"> <img src="http://www.newyorker.com/online/blogs/photobooth/NASAEarth-01.jpg" alt="" /> </div> .image {position:relative; border:1px solid black; width:200px; height:200px;} .image img {max-width:100%; max-height:100%;} .image:hover:after {content:""; position:absolute; top:0; left:0; bottom:0; right:0; background-color: rgba(0,0,0,0.3);}
.overlayне было высоты или ширины и никакого контента, и вы не можете навести курсор наdisplay:none.вместо этого я дал div тот же размер и положение, что и
.imageи измененияRGBAзначение на режиме висения.http://jsfiddle.net/Zf5am/566/
.image { position: absolute; border: 1px solid black; width: 200px; height: 200px; z-index:1;} .image img { max-width: 100%; max-height: 100%; } .overlay { position: absolute; top: 0; left: 0; background:rgba(255,0,0,0); z-index: 200; width:200px; height:200px; } .overlay:hover { background:rgba(255,0,0,.7); }
вы можете сделать это, играя с непрозрачностью изображения и установив цвет фона изображения на черный. Сделав изображение прозрачным, оно станет темнее.
<div class="image"> <img src="http://www.newyorker.com/online/blogs/photobooth/NASAEarth-01.jpg" alt="" /> </div>CSS:
.image { position: relative; border: 1px solid black; width: 200px; height: 200px; background: black; } .image img { max-width: 100%; max-height: 100%; } .image img:hover { opacity: .5 }возможно, вам придется установить непрозрачность для конкретного браузера, чтобы сделать эту работу в других браузерах тоже.
Я бы дал минимальную высоту и минимальную ширину вашему наложению div размера изображения и изменил цвет фона при наведении
.overlay { position: absolute; top: 0; left: 0; z-index: 200; min-height:200px; min-width:200px; background-color: none;} .overlay:hover { background-color: red;}
смотрите, что я здесь сделал:http://jsfiddle.net/dyarbrough93/c8wEC/
во-первых, вы никогда не устанавливали размеры наложения, то есть он не показывался в первую очередь. Во-вторых, я рекомендую просто изменить Z-индекс слоя при наведении курсора на изображение. Измените непрозрачность / цвет наложения в соответствии с вашими потребностями.
.image { position: relative; width: 200px; height: 200px;} .image img { max-width: 100%; max-height: 100%; } .overlay { position: absolute; top: 0; left: 0; background-color: gray; z-index: -10; width: 200px; height: 200px; opacity: 0.5} .image:hover .overlay { z-index: 10}
Comments