4

I have a small problem, I want to create 45 degree shadow for a picture. But if I use my code my object is rotating too. So I would like to ask for help with this problem.

My code:

.item {
    box-shadow: -50px 80px 4px 10px #555;
    -webkit-transform: rotate(10deg);
    -moz-transform: rotate(10deg);
    -o-transform: rotate(10deg);
    -ms-transform: rotate(10deg);
    transform: rotate(10deg);
}
seenukarthi
  • 8,241
  • 10
  • 47
  • 68
Tomas
  • 67
  • 1
  • 1
  • 8
  • 2
    Use a pseudo-element with `box-shadow` and rotate it instead of the container element. – Harry Aug 11 '15 at 12:05
  • But is it possible to create pseudo element with only CSS? – Tomas Aug 11 '15 at 12:06
  • You can use ::after or ::before, more pseudo element can be found here: http://www.w3schools.com/css/css_pseudo_elements.asp – Olli Aug 11 '15 at 12:08
  • Pseudo-elements are created through CSS :) Please have a look at [this MDN link](https://developer.mozilla.org/en-US/docs/Web/CSS/%3A%3Aafter). – Harry Aug 11 '15 at 12:08
  • 1
    Thanks You guys, i always thought they wew HTML related. Thanks again – Tomas Aug 11 '15 at 12:09

2 Answers2

8

Most flexible answer using only CSS is probably this:

.item {
    position: relative; /* or absolute */
}

.item:before {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: transparent;

    box-shadow: -50px 80px 4px 10px #555;
    -webkit-transform: rotate(10deg);
    -moz-transform: rotate(10deg);
    -o-transform: rotate(10deg);
    -ms-transform: rotate(10deg);
    transform: rotate(10deg);
}
Grzegorz Palian
  • 300
  • 2
  • 9
3

You can do it using peudo-element (I've used arbitrary values, you need to tweak it yourself) :

.item {
  margin-left: 50%;
  position: relative;
  width: 100px;
  height: 100px;
  background-color: red;
}
.item:before {
  z-index: -1;
  position: absolute;
  content: "";
  display: block;
  width: 100px;
  height: 100px;
  top: -30px;
  left: 0;
  background-color: transparent;
  box-shadow: -50px 120px 4px 10px #555;
  -webkit-transform: rotate(10deg);
  -moz-transform: rotate(10deg);
  -o-transform: rotate(10deg);
  -ms-transform: rotate(10deg);
  transform: rotate(10deg);
}
<div class="item"></div>
Mehdi Brillaud
  • 1,846
  • 2
  • 13
  • 22