响应式悬停盒响应式图像

时间:2017-02-13 19:40:03

标签: javascript jquery html css hover

我一直在使用教程制作一个悬停框来查看一组图像 可以找到该文章here

让它完美运行,除了我想要我的图像和悬停以响应窗口大小(只是通过宽度很好),我已经尝试查找如何做到这一点。似乎它可能是使用%而不是固定值的情况,但没有经验足以知道如何执行标记。即使我让图像重新调整大小,悬浮盒也不会重新调整大小。

是否可以在现有CSS中添加内容以实现此目的。



ul.img-list {
  list-style-type: none;
  margin: 0;
  padding: 0;
  text-align: center;
}

ul.img-list li {
  display: inline-block;
  height: 150px;
  margin: 0 1em 1em 0;
  position: relative;
  width: 150px;
}

span.text-content {
  background: rgba(0,0,0,0.5);
  color: white;
  cursor: pointer;
  display: table;
  height: 150px;
  left: 0;
  position: absolute;
  top: 0;
  width: 150px;
  opacity: 0;
  -webkit-transition: opacity 500ms;
  -moz-transition: opacity 500ms;
  -o-transition: opacity 500ms;
  transition: opacity 500ms;
}

span.text-content span {
  display: table-cell;
  text-align: center;
  vertical-align: middle;
}

ul.img-list li:hover span.text-content {
  opacity: 1;
}

<ul class="img-list">
  <li>
    <a href="#">
      <img src="http://placehold.it/150x150">
      <span class="text-content"><span>Text</span></span>
    </a>
  </li>
</ul>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

你只能使用宽度来保持图像比例。

你可以使用display:block来表示a和img,并使用flex来居中文本。

对于您所寻找的响应行为不太确定,您可以在li上使用%宽度或混合使用%width + min-width和max-width。

%宽度设置为50%(和最大/最小宽度)的示例,它可以是任何其他值和单位。

ul.img-list {
  list-style-type: none;
  margin: 0;
  padding: 0;
  text-align: center;
}

ul.img-list li {
  display: inline-block;
  vertical-align:top;
  margin: 0;
  position: relative;
  width:50%;
  max-width:100vh;
  min-width:60vh;
}
ul.img-list li a, ul.img-list li a img {
  display:block;
  width:100%;
  }
span.text-content {
  background: rgba(0,0,0,0.5);
  color: white;
  cursor: pointer;
  display:flex;
  left: 0;
  right:0;
  position: absolute;
  top: 0;
  bottom:0;
  opacity: 0;
  -webkit-transition: opacity 500ms;
  -moz-transition: opacity 500ms;
  -o-transition: opacity 500ms;
  transition: opacity 500ms;
}

span.text-content span {
  margin:auto;
}

ul.img-list li:hover span.text-content {
  opacity: 1;
}
* {
  margin:0;
  padding:0;
  }
<ul class="img-list">
  <li>
    <a href="#">
      <img src="http://placehold.it/150x150">
      <span class="text-content"><span>Text</span></span>
    </a>
  </li>
</ul>

答案 1 :(得分:1)

您也可以这样做,使用伪元素在图像上显示叠加内容。这种方法是完全响应的。

&#13;
&#13;
.wrapper {
  width: 100%;
  overflow: auto;
  padding: 1%;
  box-sizing: border-box;
  background: rgba(0, 0, 0, 0.1);
  border-radius: 8px;
}

/* Columns floated left */
.col-4 {
  width: 33.3%;
  float: left;
  padding: 1%;
  box-sizing: border-box;
  height: auto;
  overflow: hidden;
}

/* Container to make absolute positioning easier on psuedo element */
.image_container {
  position: relative;
  overflow: auto;
  padding: 0;
  margin: 0;
}

.image_container img {
  width: 100%;
  display: block;
}

/* Structure for ::before element */
#img_1::before,
#img_2::before,
#img_3::before {
  background: rgba(0, 0, 0, 0.5);
  position: absolute;
  left: 0;
  right: 0;
  height: 100%;
  width: 100%;
  box-sizing: border-box;
  display: block;
  opacity: 0;
  color: white;
  padding: 10px;
  transition: 0.5s ease;
}

/* Hover state for container to show ::before on mouseover */
.image_container:hover#img_1::before,
.image_container:hover#img_2::before,
.image_container:hover#img_3::before {
  opacity: 1;
  cursor: pointer;
}

/* Text for ::before elements */
#img_1::before {
  content: 'Image Title 1';
}
#img_2::before {
  content: 'Image Title 2';
}
#img_3::before {
  content: 'Image Title 3';
}
&#13;
<div class="wrapper">
  <div class="col-4">
    <div class="image_container" id="img_1">
      <img src="https://images.unsplash.com/reserve/B6PfiQ8QoSzmsZYOCkSB__DSC0530-1.jpg?dpr=1&auto=format&fit=crop&w=1500&h=1004&q=80&cs=tinysrgb&crop=">
    </div>
  </div>
  <div class="col-4">
    <div class="image_container" id="img_2">
      <img src="https://images.unsplash.com/photo-1418985991508-e47386d96a71?dpr=1&auto=format&fit=crop&w=1500&h=1000&q=80&cs=tinysrgb&crop=">
    </div>
  </div>
  <div class="col-4">
    <div class="image_container" id="img_3">
      <img src="https://images.unsplash.com/photo-1476362555312-ab9e108a0b7e?dpr=1&auto=format&fit=crop&w=1500&h=1000&q=80&cs=tinysrgb&crop=">
    </div>
  </div>
</div>
&#13;
&#13;
&#13;

您还可以将图片设置为background-image的{​​{1}},以便您在需要时更好地控制叠加层中的文字。