Wie kann man ein Hintergrundbild mit CSS spiegeln?

224

Wie kann man ein Hintergrundbild mit CSS spiegeln? Ist es möglich?

Derzeit verwende ich dieses Pfeilbild in einem background-imagevon liin CSS

Geben Sie hier die Bildbeschreibung ein

Ein: visitedIch muss diesen Pfeil horizontal drehen. Ich kann dies tun, um ein weiteres Bild des Pfeils zu erstellen, aber ich bin nur neugierig zu wissen, ob es möglich ist, das Bild in CSS umzudrehen:visited

Jitendra Vyas
quelle
3
gute Frage! Dies kann in vielen verschiedenen Fällen nützlich sein.
AshBrad
@AshBrad - Danke für die Kommentare. Ja, es könnte unter vielen Bedingungen nützlich sein
Jitendra Vyas

Antworten:

234

Sie können es mit CSS horizontal spiegeln ...

a:visited {
    -moz-transform: scaleX(-1);
    -o-transform: scaleX(-1);
    -webkit-transform: scaleX(-1);
    transform: scaleX(-1);
    filter: FlipH;
    -ms-filter: "FlipH";
}

jsFiddle .

Wenn Sie stattdessen vertikal spiegeln möchten ...

a:visited {
    -moz-transform: scaleY(-1);
    -o-transform: scaleY(-1);
    -webkit-transform: scaleY(-1);
    transform: scaleY(-1);
    filter: FlipV;
    -ms-filter: "FlipV";
}

Quelle .

Alex
quelle
1
Wenn ich nur Web-Kit-Browser in Betracht ziehe, ist dann nur -webkit-transform: scaleX(-1);genug?
Jitendra Vyas
@Jitendra Es sollte sein, plus die Eigenschaft ohne Herstellerpräfix.
alex
25
@alex - ein Problem dabei. Es dreht auch den Text um, der sich in der befindet, <a>und ich möchte nur das Hintergrundbild umdrehen. Der Code, den Sie geben, ist, das ganze Element
umzudrehen
3
@Jitendra Es sieht nicht so aus, als könntest du einfach das Hintergrundbild umdrehen. Sie können das Symbol jedoch in a platzieren spanund dann umdrehen.
alex
1
@alex - OK, wenn ich diesen Code <li><a href="#"><span>text</span></a></li>verwende, wird auch der Text umgedreht, was das Gegenteil von Ihrem Give-Code ist, um den Text zu entpacken, damit ich den Entpackungscode für li a span { }in CSS schreiben kann
Jitendra Vyas
86

Ich fand heraus, dass ich nur den Hintergrund und nicht das ganze Element umdrehen konnte, nachdem ich einen Hinweis auf Alex 'Antwort gesehen hatte. Danke alex für deine antwort

HTML

<div class="prev"><a href="">Previous</a></div>
<div class="next"><a href="">Next</a></div>

CSS

.next a, .prev a {
    width:200px;
    background:#fff
}
 .next {
    float:left
}
 .prev {
    float:right
}
 .prev a:before, .next a:before {
    content:"";
    width:16px;
    height:16px;
    margin:0 5px 0 0;
    background:url(http://i.stack.imgur.com/ah0iN.png) no-repeat 0 0;
    display:inline-block 
}
 .next a:before {
    margin:0 0 0 5px;
    transform:scaleX(-1);
}

Siehe Beispiel hier http://jsfiddle.net/qngrf/807/

Jitendra Vyas
quelle
7
@Jitendra Kannst du bitte die Jsfiddle URL überprüfen? Ich denke, es hat nicht den gleichen Code, den Sie in Ihrer Antwort gepostet haben + es funktioniert nicht ..
sachinjain024
3
jsfiddle Code, den Sie posten, dreht Text um? ist es was du willst oder nur ein Hintergrundbild?
Mandza
1
Ihre jsfiddle ist nicht mit dem Code identisch. Können Sie sie bitte aktualisieren?
Royi Namir
1
@JitendraVyas Hallo von 2016! Ich habe überlegt, eine Bearbeitung vorzuschlagen, um die jsfiddle-URL zu reparieren, da sie immer noch auf einen anderen Code verweist als in Ihrer Antwort hier. Möchten Sie den Beitrag bearbeiten oder den Link entfernen? Danke :)
totalNotLizards
-webkit-transform:scaleX(-1);für Chrom
Wesley Smith
19

Laut w3schools: http://www.w3schools.com/cssref/css3_pr_transform.asp

Die Transformationseigenschaft wird in Internet Explorer 10, Firefox und Opera unterstützt. Internet Explorer 9 unterstützt eine Alternative, die Eigenschaft -ms-transform (nur 2D-Transformationen). Safari und Chrome unterstützen eine Alternative, die -webkit-transform-Eigenschaft (3D- und 2D-Transformationen). Opera unterstützt nur 2D-Transformationen.

Dies ist eine 2D-Transformation, daher sollte sie mit den Herstellerpräfixen unter Chrome, Firefox, Opera, Safari und IE9 + funktionieren.

Andere verwendete Antworten: Vorher, um zu verhindern, dass der innere Inhalt umgedreht wird. Ich habe dies in meiner Fußzeile verwendet (um das Bild aus meiner Kopfzeile vertikal zu spiegeln):

HTML:

<footer>
<p><a href="page">Footer Link</a></p>
<p>&copy; 2014 Company</p>
</footer>

CSS:

footer {
background:url(/img/headerbg.png) repeat-x 0 0;

/* flip background vertically */
-webkit-transform:scaleY(-1);
-moz-transform:scaleY(-1);
-ms-transform:scaleY(-1);
-o-transform:scaleY(-1);
transform:scaleY(-1);
}

/* undo the vertical flip for all child elements */
footer * {
-webkit-transform:scaleY(-1);
-moz-transform:scaleY(-1);
-ms-transform:scaleY(-1);
-o-transform:scaleY(-1);
transform:scaleY(-1);
}

Am Ende drehen Sie das Element um und drehen dann alle untergeordneten Elemente erneut um. Funktioniert auch mit verschachtelten Elementen.

jdforsythe
quelle
1
Danke für die Antwort! Dieser funktionierte am besten für mich, da die anderen entweder auch alle Kinder umgedreht haben oder einen komplexeren Trick benötigten, um den Flip umzukehren.
Austin Salgat
Wenn diese Antwort alles in Ihrem Zielelement umdreht, drücken Sie es einfach in ein anderes Element. Mit anderen Worten, wickeln Sie den Inhalt, den Sie nicht spiegeln möchten, in ein neues <div> -Element ein.
Onosa
5

Sie können sowohl vertikal als auch horizontal gleichzeitig spiegeln

    -moz-transform: scaleX(-1) scaleY(-1);
    -o-transform: scaleX(-1) scaleY(-1);
    -webkit-transform: scaleX(-1) scaleY(-1);
    transform: scaleX(-1) scaleY(-1);

Und mit der Übergangseigenschaft können Sie einen coolen Flip bekommen

    -webkit-transition: transform .4s ease-out 0ms;
    -moz-transition: transform .4s ease-out 0ms;
    -o-transition: transform .4s ease-out 0ms;
    transition: transform .4s ease-out 0ms;
    transition-property: transform;
    transition-duration: .4s;
    transition-timing-function: ease-out;
    transition-delay: 0ms;

Eigentlich dreht es das ganze Element um, nicht nur dasbackground-image

SNIPPET

function flip(){
	var myDiv = document.getElementById('myDiv');
	if (myDiv.className == 'myFlipedDiv'){
		myDiv.className = '';
	}else{
		myDiv.className = 'myFlipedDiv';
	}
}
#myDiv{
  display:inline-block;
  width:200px;
  height:20px;
  padding:90px;
  background-color:red;
  text-align:center;
  -webkit-transition:transform .4s ease-out 0ms;
  -moz-transition:transform .4s ease-out 0ms;
  -o-transition:transform .4s ease-out 0ms;
  transition:transform .4s ease-out 0ms;
  transition-property:transform;
  transition-duration:.4s;
  transition-timing-function:ease-out;
  transition-delay:0ms;
}
.myFlipedDiv{
  -moz-transform:scaleX(-1) scaleY(-1);
  -o-transform:scaleX(-1) scaleY(-1);
  -webkit-transform:scaleX(-1) scaleY(-1);
  transform:scaleX(-1) scaleY(-1);
}
<div id="myDiv">Some content here</div>

<button onclick="flip()">Click to flip</button>

Fi Ras
quelle
Das "gleichzeitig vertikal und horizontal drehen" hat den gleichen Effekt wie das Drehen des Bildes um 180 Grad, funktioniert
einwandfrei