z-index和位置相对

时间:2017-10-27 08:01:59

标签: css css-position

我有一个模态,即使用JavaScript显示/隐藏。

在模态中,将使用JavaScript插入图像。同样在图像上方将存在一个div元素,它将模拟裁剪(获取图像的坐标)。

我在将图像保持在模态裁剪之下时遇到问题。 模态裁剪和图像需要位于模态区域的中心。

我不能使用grid或flex,因为我需要支持IE9。

.modal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  display: none;
  overflow: hidden;
  outline: 0;
}

.modal-area {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 50%;
  height: 50%;
  transform: translate(-50%, -50%);
  margin: 0 auto;
  padding: 30px;
  background-color: blueviolet;
  border-radius: 4px;
  box-shadow: 0 0 50px black;
  overflow: hidden;
}

.modal-area img {
  margin-left: auto;
  margin-right: auto;
}

.modal-crop {
  position: relative;
  background-color: aliceblue;
  left: 0;
  right: 0;
  top: 0;
  margin-left: auto;
  margin-right: auto;
  width: 200px;
  height: 200px;
  opacity: 0.2;
  z-index: 2;
}
<div class="modal">
  <div class="modal-area">
    <div class="modal-crop"></div>
    #img will be inserted here using Javascript#
  </div>
</div>

enter image description here

3 个答案:

答案 0 :(得分:1)

您的图片需要像这样定位:

.modal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
  overflow: hidden;
  outline: 0;
  min-height: 300px;
}

.modal-area {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 50%;
  height: 50%;
  transform: translate(-50%, -50%);
  margin: 0 auto;
  padding: 30px;
  background-color: blueviolet;
  border-radius: 4px;
  box-shadow: 0 0 50px black;
  overflow: hidden;
}

.modal-area img {
  margin-left: auto;
  margin-right: auto;
  position: absolute;
  top: 0;
  right: 0;
  left: 0;
  bottom: 0;
}

.modal-crop {
  position: relative;
  background-color: aliceblue;
  left: 0;
  right: 0;
  top: 0;
  margin-left: auto;
  margin-right: auto;
  height: 100%;
  opacity: 0.2;
  z-index: 2;
}
<div class="modal">
  <div class="modal-area">
    <div class="modal-crop"></div>
    <img src="https://lorempixel.com/500/500/">
  </div>
</div>

答案 1 :(得分:0)

我想我已经了解了你想要达到的目标。而且我也知道,在多层中使用绝对定位重叠元素会很麻烦(当涉及到不同的浏览器时更是如此)。

我建议您使用网格布局,这很容易设置:

HTML

<div class="modal">
    <div class="modal-area">
        <img src="http://via.placeholder.com/200x200">
        <div class="modal-crop"></div>
    </div>
</div>

CSS

.modal {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1050;
display: block;
overflow: hidden;
outline: 0;
    }


.modal-area {
  display:grid;
  grid-template-rows: auto;
  grid-template-columns: auto;
  justify-items:center;
    position: absolute;
    top: 50%;
    left: 50%;
    width: 50%;
    height: 50%;
    transform: translate(-50%, -50%);
    margin: 0 auto;
    padding: 30px;
    background-color: blueviolet;
    border-radius: 4px;
    box-shadow: 0 0 50px black;
    overflow: hidden;
}

.modal-area img {
    grid-row: 1/span 1;
    grid-column: 1/span 1;
    z-index:1;
}


.modal-crop  {
  width: 200px;
  height: 200px;
  grid-row: 1/span 1;
  grid-column: 1/span 1;
  background-color: red;
  opacity: 0.2;
  z-index:2;
}

请注意,在此解决方案中,“模态裁剪”需要设置为图像的宽度和高度。但是我在其他情况下使用了类似的解决方案,并且不难调整它以使其适用于任何图像尺寸。

有一个小提琴:https://jsfiddle.net/9odLnh7r/

答案 2 :(得分:0)

问题非常明确,但据我了解,您需要将此css规则集添加到您的图片中:

&#13;
&#13;
.modal {
  position: fixed;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  z-index: 1050;
/*  display: none; */
  overflow: hidden;
  outline: 0;
}

.modal-area {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 50%;
  height: 50%;
  transform: translate(-50%, -50%);
  margin: 0 auto;
  padding: 30px;
  background-color: blueviolet;
  border-radius: 4px;
  box-shadow: 0 0 50px black;
  overflow: hidden;
}

.modal-area img {
  margin-left: auto;
  margin-right: auto;
}

.modal-crop {
  position: relative;
  background-color: aliceblue;
  left: 0;
  right: 0;
  top: 0;
  margin-left: auto;
  margin-right: auto;
  width: 200px;
  height: 200px;
  opacity: 0.2;
  z-index: 2;
}

.centerMe {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
&#13;
<div class="modal">
  <div class="modal-area">
    <div class="modal-crop"></div>
    <img class="centerMe" src="http://www.budgetstockphoto.com/bamers/stock_photo_spectrum.jpg"> 
  </div>
</div>
&#13;
&#13;
&#13;