Search code examples
htmlcssbackground-image

CSS background image w/ rotate, repeat and opacity


I am trying to make a nice background with an image but I want the image repeated to fill the screen, with opacity set to 0.5 and it rotated 45 degrees. I have tried a number of things to accomplish this but have had no luck. Anyone have any ideas?

In this Codepen, I have the image rotated and opaque but cannot get background-repeat to work.

.background {
  height: 500px;
  width: 500px;
  position: relative;
  display: inline-block;
  padding: 100px;
  border: black 3px solid;
}

.background::before {
  content: "";
  position: absolute;
  overflow: hidden;
  width: 100px;
  height: 100px;
  left: 0;
  top: 0;
  z-index: -1;
  opacity: 0.5;
  background: url(https://cambridgewords.files.wordpress.com/2019/11/funny.jpg);
  background-size: contain;
  transform: rotate(45deg);
  background-repeat: repeat;
  opacity: 0.5;
}
<span class='background'>HElloWorld</span>


Solution

  • You can do it like below:

    .background {
      height: 500px;
      width: 500px;
      position: relative;
      z-index:0;
      display: inline-block;
      overflow:hidden; /* hide the overflow here not on the pseudo element */
      padding: 100px;
      border: black 3px solid;
    }
    
    .background::before {
      content: "";
      position: absolute;
      z-index: -1;
      /* 141% ~ sqrt(2)x100% to make sure to cover all the area after the rotation */
      width: 141%;
      height:141%;
      /**/
      /* to center*/
      left: 50%;
      top: 50%;
      /* */
      background: url(https://cambridgewords.files.wordpress.com/2019/11/funny.jpg);
      background-size: 100px 100px; /* size of the image*/
      transform:translate(-50%,-50%) rotate(45deg); /* center the element then rotate */
      opacity: 0.5;
    }
    <span class='background'>
        HElloWorld
      </span>