CSS边框不透明度受半透明叠加影响

时间:2017-11-25 14:38:53

标签: html css css3 hover border

我有这个项目:

https://jsfiddle.net/3xw9aqew/

当用户将鼠标悬停在灰色框上时,会出现带有绿色边框/轮廓的红色叠加层。但是,此边框将应用于在悬停时应用了不透明度值的叠加层。

.image-container:hover .overlay {
            opacity: 0.3;
        }

我希望叠加层是半透明的,允许看到下面的图像,但我希望它周围的边框是坚固的,所以它是一个标准的"绿色"颜色。这是叠加层的CSS:

.overlay {
            position: absolute;
            top: 0;
            bottom: 0;
            left: 0;
            right: 0;
            height: 100%;
            width: 100%;
            opacity: 0;
            transition: .5s ease;
            background-color: red;
            border:10px solid green;
            box-sizing:border-box;
        }

我怎样才能实现这个目标?

1 个答案:

答案 0 :(得分:0)

对于预期的行为,将所需的透明度直接应用于background-color属性值,而不是整个包含元素。这可以通过调整rgba值来完成,如下面的嵌入式代码段所示。

  

opacity适用于整个元素,包括其内容,   即使该值不是由子元素继承的。就这样   元素及其子元素都具有相同的不透明度   元素的背景,即使它们有不同的不透明度   彼此。

opacity - CSS | MDN

.overlay {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  width: 100%;
  opacity: 1;
  transition: .5s ease;
  background-color: transparent;
  border: 10px solid transparent;
  box-sizing: border-box;
}

.image-container:hover .overlay {
  background-color: rgba(255, 0, 0, 0.3);
  border: 10px solid green;
}

Updated JSFiddle

代码段示范:



var imgContainer = document.getElementById("imgContainer");
var lorem = document.querySelector(".hdr-left");
var ipsum = document.querySelector(".hdr-right");

//When clicking on imgContainer toggle between class to change colour and position
imgContainer.addEventListener('click', function() {
  lorem.classList.toggle("hdr-color-white");
  ipsum.classList.toggle("hdr-color-white");
  lorem.classList.toggle('hdr-left-middle');
  ipsum.classList.toggle('hdr-right-middle');
});

body {
  max-width: 100%;
  overflow-x: hidden;
  background: yellow;
  font-family: sans-serif;
}

.container {
  width: 85%;
  max-width: 700px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}

img {
  width: 100%;
  max-width: 920px;
}

p {
  font-size: 18px;
  color: blue;
  font-weight: bold
}

p.left {
  position: absolute;
  top: 0;
  bottom: 0px;
  right: -32%;
  transform: rotate(-90deg);
}

p.right {
  position: absolute;
  top: 0;
  bottom: 0;
  left: -32%;
  transform: rotate(90deg);
}

h2 {
  font-size: 5em;
  position: absolute;
  text-transform: uppercase;
  letter-spacing: 2px;
  font-weight: bold;
  margin: 0;
  z-index: 5;
  color: blue;
  transition: all 0.5s ease-in-out;
}

.hdr-color-white {
  color: white;
}

.hdr-left {
  left: -12%;
  top: -35%;
}

.hdr-left-middle {
  left: 7%;
  top: 40%;
}

.hdr-right {
  right: -10%;
  top: 110%;
}

.hdr-right-middle {
  right: 7%;
  top: 40%;
}


/*Hovers*/

.container:hover {
  cursor: pointer
}

.container:hover>p {
  color: red;
}

.container .image-container:hover {}


/*Hovers Ends*/


/*Overlay*/

.image-container {
  position: relative;
  width: 100%;
  padding: 10px;
  box-sizing: border-box;
}

.image {
  display: block;
  width: 100%;
  height: auto;
  outline: 5px solid blue;
}

.container .image-container:hover>.image {
  outline: none;
}

.overlay {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  height: 100%;
  width: 100%;
  opacity: 1;
  transition: .5s ease;
  background-color: transparent;
  border: 10px solid transparent;
  box-sizing: border-box;
}

.image-container:hover .overlay {
  background-color: rgba(255, 0, 0, 0.3);
  border: 10px solid green;
}


/*Overlay  Ends*/

<div class="container">

  <!--Rotated Text-->
  <p class="right">Harolds</p>
  <p class="left">Harolds</p>
  <!--//Rotated Text-->

  <h2 class="hdr-left hdr-color" id="lorem">Lorem</h2>

  <div class="image-container" id="imgContainer">
    <img src="http://via.placeholder.com/980x550" alt="gucci" class="image">
    <!--colour overlay-->
    <div class="overlay"></div>
    <!--//colour overlay-->
  </div>

  <h2 class="hdr-right hdr-color" id="ipsum">Ipsum</h2>

</div>
&#13;
&#13;
&#13;