CSS 만있는 이미지 호버에 검은 색 투명 오버레이?


101

마우스가 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;
}

오버레이 div가 아닌 이미지 div에 : hover를 넣으려고 했습니까?
andi

1
참고 : 오버레이에 높은 Z- 색인을 적용하는 이유는 무엇입니까? Z- 색인은 전역이 아닙니다. 그것들을 작동시키기 위해 높거나 낮은 값을 '해킹'할 필요가 없습니다.
Jimmy Breck-McKye

1
이것이 마침내이 문제를 해결하는 데 도움이 된 것입니다. jsfiddle.net/4Dfpm 오버레이 div가 필요하지 않습니다. 이미지는 호버링시 불투명도가 떨어지고 아래 div는 검은 색 배경이 있어야합니다.
Kai Noack 2016-06-30

답변:


211

오버레이 요소 대신 의사 요소를 사용하는 것이 좋습니다. 닫힌 img요소에는 유사 요소를 추가 할 수 없기 때문에 img그래도 요소 를 래핑해야합니다 .

여기 라이브 예 - 텍스트가있는 예

<div class="image">
    <img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>

CSS의 경우 요소 에 선택적 크기 를 설정 .image하고 상대적으로 배치합니다. 반응 형 이미지를 목표로하는 경우 치수를 생략하면 여전히 작동합니다 (예제) . 차원은 img요소 자체가 아닌 부모 요소에 있어야합니다 .을 참조하십시오 .

.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;
}

A의 contentattr(data-content), 의사 요소는에서 텍스트 추가 .image요소의 data-content속성을 :

<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;
}

1
고마워 조쉬. 이 버전이 가장 마음에 듭니다. 투명한 검은 색 위에 흰색 텍스트를 표시하려면 어떻게 하시겠습니까? 다른 div를 추가하고 불투명도를 별도로 적용 하시겠습니까?
RobVious

예, 실제로 호버링 할 때만.
RobVious

1
감사합니다 이것은 내가 전에 시도한 것보다 더 나은 솔루션입니다
wingskush

캡션을 이미지 중앙에 설정하려면 어떻게해야합니까? top:30%작동 하지만 내 바이올린을 참조하십시오 . 반응 형 레이아웃의 경우 정확한 중앙으로 설정하는 것이 좋습니다. BTW :이 멋진 annswer에 감사드립니다.
p2or

3
@poor 여기에 하나의 반응 형 접근 방식이 있습니다 (업데이트 된 예제) .. 수직 센터링에 top: 50%/ transform: translateY(-50%)를 사용합니다 . 그것은이 다른 대답에 언급 된 방법 중 하나입니다 내 경우 - stackoverflow.com/questions/5703552/...
조쉬 Crozier가

44

11

당신은 가까웠습니다. 이것은 작동합니다.

.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/


또한 호환되는 브라우저에서 약간 더 부드러운 전환을 위해 CSS3 애니메이션을 사용하는 것이 좋습니다 (IE 사용자는 고통을 겪을 것입니다).
Jimmy Breck-McKye

7

다음은 추가 오버레이 div 대신 이미지 div에 : after를 사용하는 좋은 방법입니다. 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);}

2

.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); }

1

이미지의 불투명도로 재생하고 이미지의 배경색을 검은 색으로 설정하여이를 수행 할 수 있습니다. 이미지를 투명하게 만들면 더 어둡게 보입니다.

<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 }

다른 브라우저에서도 작동하도록하려면 브라우저 별 불투명도를 설정해야 할 수도 있습니다.


0

이미지 크기의 오버레이 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;}

0

내가 한 일을 참조하십시오 : 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}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.