:在旋转元素后调整大小

时间:2015-02-12 10:56:33

标签: html css css3 shadow pseudo-element

我有一个:before和a:after元素(用于阴影),带有一个变换:旋转应用于它。 :在调整视口大小之前保持原位,然而:在稍微上下移动之后。如果旋转被移除,它将在调整大小时保持原位。如何通过漫游来调整大小?

我在:之前和之后放置了一个z-index:1,以便查看问题

它是影子#3

http://codepen.io/mildrenben/details/jEYpyP/

HTML:

<h2>Shadow #3</h2>
<div class="row shadow-3">
  <div class="shadow-box">
    <img>
  </div>
  <div class="shadow-box">
    <img>
  </div>
  <div class="shadow-box">
    <img>
  </div>
  <div class="shadow-box">
    <img>
  </div>
</div>

CSS:

html, body {
  width: 100%;
  height: 100%;
}
.row {
  height: 160px;
  width: 80%;
  margin: 0 auto 60px;
  display: block;
    img:nth-of-type(1) {
      content: url(http://marshall.org/wp-content/themes/marshall/img/featured-space-policy.jpg);
    }
    img:nth-of-type(2) {
      content: url(http://i.dailymail.co.uk/i/pix/2014/09/04/1409790551890_wps_28_Astronaut_Reid_Wiseman_po.jpg);
    }
    img:nth-of-type(3) {
      content: url(http://cdn2.collective-evolution.com/assets/uploads/2014/08/life_in_space-728x400.jpg);
    }
    img:nth-of-type(4) {
      content: url(http://s.ngm.com/2007/10/space-travel/img/space_feature.jpg);
    }
}

img {
  width: 23%;
  margin: 0 1% 0 0;
  height: 100%;
  transition: all 0.2s ease-in-out;
  cursor: pointer;
}

.shadow-box {
  width: 23%;
  margin: 0 1% 0 0;
  height: 100%;
  transition: all 0.2s ease-in-out;
  cursor: pointer;
  display: inline-block;
  img {
    width: 100%;
    height: 100%;
    &:hover {
      transform: translateY(-4px);
    }
  }
}

.shadow-box:before, .shadow-box:after {
  content: '';
  z-index: 1;
  position: absolute;
  width: 8%;
  height: 110px;
  background: red;
  transform: skew(-10deg) rotate(-6deg) translate(calc(3% + 10px), 31px);
  transition: all 0.2s ease-in-out;
}

.shadow-box:after {
  transform: skew(10deg) rotate(6deg) translate(126%, -146px);
}

.shadow-box:hover:before, .shadow-box:hover:after {
  box-shadow: 0 20px 20px lighten($black, 40%);
}

1 个答案:

答案 0 :(得分:1)

我不认为使用翻译是这里的方式,我将容器设置为位置:相对;然后使用绝对定位来定位阴影事物:http://jsfiddle.net/bpma9ko4/

这里有相关部分:

.shadow-box {
  width: 45%;
  margin: 0 1% 0 0;
  height: 100%;
  transition: all 0.2s ease-in-out;
  cursor: pointer;
  display: inline-block;
  position: relative;
}

.shadow-box:before, .shadow-box:after {
  content: '';
  z-index: 1;
  position: absolute;
  width: 40%;
  height: 110px;
  background: red;
  transform: skew(-10deg) rotate(-6deg);
  transition: all 0.2s ease-in-out;
  top: 20px;
  left: 20px;
}

.shadow-box:after {
  transform: skew(10deg) rotate(6deg);
  right: 20px;
  left: auto;
}

在您的示例中,当我删除翻译时,右侧的红色框位于图像下方(在新行上),然后您尝试使用翻译将其拖动,但对我来说,这是一种更直接的方式,如果您只需使用顶部/左/右属性将其放在图像上即可。

注意:我的示例已经过简化,没有阴影和其他内容,它会缩减到与问题相关的部分。

整个代码:

&#13;
&#13;
html, body {
  width: 100%;
  height: 100%;
}
.row {
  height: 160px;
  width: 80%;
  margin: 0 auto 60px;
  display: block;
    img:nth-of-type(1) {
      content: url(http://marshall.org/wp-content/themes/marshall/img/featured-space-policy.jpg);
    }
    img:nth-of-type(2) {
      content: url(http://i.dailymail.co.uk/i/pix/2014/09/04/1409790551890_wps_28_Astronaut_Reid_Wiseman_po.jpg);
    }
    img:nth-of-type(3) {
      content: url(http://cdn2.collective-evolution.com/assets/uploads/2014/08/life_in_space-728x400.jpg);
    }
    img:nth-of-type(4) {
      content: url(http://s.ngm.com/2007/10/space-travel/img/space_feature.jpg);
    }
}

img {
  width: 100%;
  margin: 0 1% 0 0;
  height: 100%;
  transition: all 0.2s ease-in-out;
  cursor: pointer;
}

.shadow-box {
  width: 45%;
  margin: 0 1% 0 0;
  height: 100%;
  transition: all 0.2s ease-in-out;
  cursor: pointer;
  display: inline-block;
    position: relative;
}

.shadow-box:before, .shadow-box:after {
  content: '';
  z-index: 1;
  position: absolute;
  width: 40%;
  height: 110px;
  background: red;
  transform: skew(-10deg) rotate(-6deg);
  transition: all 0.2s ease-in-out;
    top: 20px;
    left: 20px;
}

.shadow-box:after {
  transform: skew(10deg) rotate(6deg);
    right: 20px;
    left: auto;
}

.shadow-box:hover:before, .shadow-box:hover:after {
  box-shadow: 0 20px 20px lighten($black, 40%);
}
&#13;
<h2>Shadow #3</h2>
<div class="row shadow-3">
  <div class="shadow-box">
    <img src="http://placehold.it/466x180">
  </div>
  <div class="shadow-box">
    <img src="http://placehold.it/466x180">
  </div>
  <div class="shadow-box">
    <img src="http://placehold.it/466x180">
  </div>
  <div class="shadow-box">
      <img src="http://placehold.it/466x180">
  </div>
</div>
&#13;
&#13;
&#13;