¿Cómo rotar la imagen de fondo en el contenedor?


160

Quiero rotar la imagen que se coloca en el botón de la barra de desplazamiento en Chrome. Ahora tengo un CSS con este contenido:

::-webkit-scrollbar-button:vertical:decrement
{
    background-image:url(images/arrowup.png) ;
    -webkit-transform:rotate(120deg);
    -moz-transform:rotate(120deg);
    background-repeat:no-repeat;
    background-position:center;
    background-color:#ECEEEF;
    border-color:#999;
}

Deseo rotar la imagen sin rotar su contenido.


1
Me gustaría hacer esto también. Hay un ejemplo de algo como esto suceda en iCloud - ver cómo gira la bóveda de textura dinámica: icloud.com
subcreación

eso se parece un poco a una cosa de paralaje. aunque realmente no podía distinguir el código ...
sheriffderek

Supongo que tal vez ya no necesites y respondas, pero tal vez alguien más esté interesado. Aquí hay un enlace para un tutorial que muestra cómo hacerlo: http://www.sitepoint.com/css3-transform-background-image/
Ayoub M.

Lamentablemente, todas las soluciones proporcionadas no funcionan en las barras de desplazamiento. Terminé creando 4 imágenes separadas.
amoebe

Respuestas:


141

Muy bien hecho y respondido aquí: http://www.sitepoint.com/css3-transform-background-image/

#myelement:before
{
    content: "";
    position: absolute;
    width: 200%;
    height: 200%;
    top: -50%;
    left: -50%;
    z-index: -1;
    background: url(background.png) 0 0 repeat;
    -webkit-transform: rotate(30deg);
    -moz-transform: rotate(30deg);
    -ms-transform: rotate(30deg);
    -o-transform: rotate(30deg);
    transform: rotate(30deg);
}

2
Para su información, los contenedores rotan sobre su punto central, en caso de que tenga problemas para obtener exactamente la transformación que desea.
Nick Larsen

para tu información, no funciona para todos los elementos; por ejemplo, a selectno puede tener a :before.
Yann Dìnendal

1
Además, tenga en cuenta que el 200% puede no ser suficiente en todos los casos, es decir, en elementos oblongos como 10px × 200px.
Henrik Christensen

44
Sí, pero esto no está girando el fondo. Esto lo está fingiendo con una aproximación. Si realmente necesita girar el fondo, esto no ayudará.
dev_willis

22

Método muy fácil, rotas en un sentido y los contenidos en el otro. Aunque requiere un cuadrado

#element{
    background : url('someImage.jpg');
}
#element:hover{
    transform: rotate(-30deg);
}
#element:hover >*{
    transform: rotate(30deg);
}

1
¡Gracias hermano! Las respuestas más simples suelen ser las mejores
Merunas Grincalaitis

7

CSS:

.reverse {
  transform: rotate(180deg);
}

.rotate {
  animation-duration: .5s;
  animation-iteration-count: 1;
  animation-name: yoyo;
  animation-timing-function: linear;
}

@keyframes yoyo {
  from { transform: rotate(  0deg); }
  to   { transform: rotate(360deg); }
}

Javascript:

$(buttonElement).click(function () {
  $(".arrow").toggleClass("reverse")

  return false
})

$(buttonElement).hover(function () {
  $(".arrow").addClass("rotate")
}, function() {
  $(".arrow").removeClass("rotate")
})

PD: he encontrado esto en otro lugar pero no recuerdo la fuente


5

Estaba buscando hacer esto también. Tengo una imagen de mosaico grande (literalmente una imagen de mosaico) que me gustaría rotar solo unos 15 grados y he repetido. Puede imaginar el tamaño de una imagen que se repetiría sin problemas, haciendo que la respuesta del 'programa de edición de imágenes' sea inútil.

Mi solución fue dar la imagen de mosaico sin rotar (solo una copia :) a psuedo: before element - oversize it - repetirlo - establecer el contenedor de desbordamiento en hidden - y rotar el generado: before element usando css3 transforma. ¡Tonterías!


No puedo "imaginar el tamaño de una imagen que se repetiría a la perfección" siendo muy grande ...
sheriffderek

1
¿Qué pasa si desea que su imagen de fondo base se incline?
Jason

4

Actualización 2020, mayo:

Configuración position: absolutey luego transform: rotate(45deg)proporcionará un fondo:

div {
  height: 200px;
  width: 200px;
  outline: 2px dashed slateBlue;
  overflow: hidden;
}
div img {
  position: absolute;
  transform: rotate(45deg);
  z-index: -1;
  top: 40px;
  left: 40px;
}
<div>
  <img src="https://placekitten.com/120/120" />
  <h1>Hello World!</h1>
</div>

Respuesta original

En mi caso, el tamaño de la imagen no es tan grande que no puedo tener una copia rotada. Entonces, la imagen ha sido rotada con photoshop. Una alternativa a las photoshopimágenes giratorias es la herramienta en línea también para imágenes giratorias . Una vez girado, estoy trabajando con el rotated-imageen la backgroundpropiedad.

div.with-background {
    background-image: url(/img/rotated-image.png);
    background-size:     contain;
    background-repeat:   no-repeat;
    background-position: top center;
}

Buena suerte...

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.