Come ruotare l'immagine di sfondo nel contenitore?


160

Voglio ruotare l'immagine che si trova nel pulsante della barra di scorrimento in Chrome. Ora ho un CSS con questo contenuto:

::-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;
}

Vorrei ruotare l'immagine senza ruotarne il contenuto.


1
Vorrei fare anche questo. C'è un esempio di qualcosa del genere che sta accadendo su iCloud: guarda come la trama del vault ruota dinamicamente: icloud.com
Subcreation

sembra un po 'una cosa di parallasse. non potevo davvero dirlo dal codice ...
Sheriffderek,

Immagino che forse non hai più bisogno e rispondi, ma forse qualcun altro sarebbe interessato. Ecco un link per un tutorial che mostra come farlo: http://www.sitepoint.com/css3-transform-background-image/
Ayoub M.

Purtroppo tutte le soluzioni fornite non funzionano nelle barre di scorrimento. Ho finito per creare 4 immagini separate.
amebe,

Risposte:


141

Molto ben fatto e risposto qui - 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
Cordiali saluti, i contenitori ruotano attorno al loro punto centrale, nel caso in cui si riscontrino problemi nell'ottenere esattamente la trasformazione desiderata.
Nick Larsen,

a proposito, non funziona per tutti gli elementi; per esempio, a selectnon può avere a :before.
Yann Dìnendal,

1
Inoltre, attenzione che il 200% potrebbe non essere sufficiente in tutti i casi, ad esempio su elementi oblunghi come 10px × 200px.
Henrik Christensen,

4
Sì, ma questo non sta ruotando lo sfondo. Questo è falso con un'approssimazione. Se in realtà è necessario ruotare lo sfondo, ciò non sarà di aiuto.
dev_willis

22

Metodo molto semplice, si ruota in un modo e il contenuto nell'altro. Richiede un quadrato però

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

1
Grazie fratello! Le risposte più semplici sono in genere le migliori
Meruna 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")
})

PS: L'ho trovato da qualche altra parte ma non ricordo la fonte


5

Stavo cercando di fare anche questo. Ho una grande piastrella (letteralmente un'immagine di una piastrella) che vorrei ruotare di circa 15 gradi e che ho ripetuto. Puoi immaginare la dimensione di un'immagine che si ripeterebbe senza soluzione di continuità, rendendo inutile la risposta al "programma di modifica delle immagini".

La mia soluzione è stata quella di dare l'immagine psyo non ruotata (solo una copia :) a psuedo: prima dell'elemento - sovradimensionarlo - ripeterlo - impostare l'overflow del contenitore su nascosto - e ruotare l'elemento generato: before usando le trasformazioni css3. Bosh!


non riesco a "immaginare la dimensione di un'immagine che si ripeterebbe senza soluzione di continuità" essendo molto grande ...
Sheriffderek,

1
cosa succede se si desidera inclinare l'immagine di sfondo di base?
Jason,

4

Aggiornamento 2020, maggio:

Impostazione position: absolutee quindi transform: rotate(45deg)fornirà uno sfondo:

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>

Risposta originale:

Nel mio caso, la dimensione dell'immagine non è così grande che non posso averne una copia ruotata. Quindi, l'immagine è stata ruotata con photoshop. Un'alternativa alle photoshopimmagini rotanti è lo strumento online anche per le immagini rotanti . Una volta ruotato, sto lavorando con rotated-imagela backgroundproprietà.

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

In bocca al lupo...

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.