205 votes

Comment faire pivoter l'image d'arrière-plan dans le conteneur ?

Je veux faire pivoter l'image qui est placée dans le bouton de la barre de défilement dans Chrome. J'ai maintenant un CSS avec ce contenu :

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

Je souhaite faire pivoter l'image sans faire pivoter son contenu.

1 votes

J'aimerais aussi le faire. Il y a un exemple de quelque chose comme ça qui se passe sur iCloud - voir comment la texture de la chambre forte tourne dynamiquement : icloud.com

0 votes

Ça ressemble à une sorte de parallaxe. Je ne peux pas vraiment le dire à partir du code...

1 votes

Je suppose que vous n'avez peut-être plus besoin de réponse, mais que quelqu'un d'autre pourrait être intéressé. Voici un lien pour un tutoriel qui montre comment faire : http://www.sitepoint.com/css3-transform-background-image/

186voto

Anmol Saraf Points 1717

Très bien fait et répondu ici - 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 votes

Pour votre information, les conteneurs tournent autour de leur point central, au cas où vous auriez des difficultés à obtenir exactement la transformation que vous souhaitez.

0 votes

Fyi, cela ne fonctionne pas pour tous les éléments ; par exemple, une select ne peut pas avoir un :before .

1 votes

Sachez également que 200 % ne sont pas toujours suffisants, par exemple pour des éléments oblongs tels que 10px × 200px.

35voto

Martijn Points 5617

Méthode très simple, vous faites tourner dans un sens, et le contenu dans l'autre. Il faut cependant une équerre

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

1 votes

Merci mon frère ! Les réponses les plus simples sont généralement les meilleures.

8voto

user2129794 Points 426

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 : J'ai trouvé ceci ailleurs, mais je ne me souviens pas de la source.

5voto

Simon Seddon Points 31

Je cherchais également à faire cela. J'ai un grand carreau (littéralement une image d'un carreau) que j'aimerais faire pivoter d'environ 15 degrés et faire répéter. Vous pouvez imaginer la taille d'une image qui se répéterait sans problème, ce qui rendrait la réponse du "programme d'édition d'images" inutile.

Ma solution a été de donner l'image de la tuile non tournée (juste une copie :) à l'élément psuedo :before - de la surdimensionner - de la répéter - de mettre le conteneur overflow à hidden - et de faire tourner l'élément :before généré en utilisant les transformations css3. Et voilà !

0 votes

Je ne peux pas "imaginer que la taille d'une image qui se répéterait sans discontinuité" soit très grande...

1 votes

Que faire si vous voulez que l'image de fond de votre base soit inclinée ?

3voto

ShaPesar Points 561
#myelement
{
    position: relative;
    overflow: hidden;
    -webkit-transform: rotate(30deg);
    -moz-transform: rotate(30deg);
    -ms-transform: rotate(30deg);
    -o-transform: rotate(30deg);
    transform: rotate(30deg);
}

#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);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X