Est-il possible d'utiliser CSS/CSS3 pour refléter du texte?
Plus précisément, j'ai ce caractère de ciseaux "" (✂
) que j'aimerais afficher pointant vers la gauche et non vers la droite.
Vous pouvez utiliser des transformations CSS pour y parvenir. Un retournement horizontal impliquerait de redimensionner la div comme ceci:
-moz-transform: scale(-1, 1);
-webkit-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1);
Et un retournement vertical impliquerait de redimensionner la div comme ceci:
-moz-transform: scale(1, -1);
-webkit-transform: scale(1, -1);
-o-transform: scale(1, -1);
-ms-transform: scale(1, -1);
transform: scale(1, -1);
span{ display: inline-block; margin:1em; }
.flip_H{ transform: scale(-1, 1); color:red; }
.flip_V{ transform: scale(1, -1); color:green; }
<span class='flip_H'>Demo text ✂</span>
<span class='flip_V'>Demo text ✂</span>
-moz-transform: scale(-1, 1);
-webkit-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1);
Les deux paramètres sont l’axe des X et l’axe des Y. -1 sera un miroir, mais vous pouvez l’adapter à la taille de votre choix. À l'envers et à l'envers serait (-1, -1)
.
Si vous êtes intéressé par la meilleure option disponible pour la prise en charge inter-navigateurs en 2011, voir mon ancienne réponse .
Vrai miroir:
.mirror{
display: inline-block;
font-size: 30px;
-webkit-transform: matrix(-1, 0, 0, 1, 0, 0);
-moz-transform: matrix(-1, 0, 0, 1, 0, 0);
-o-transform: matrix(-1, 0, 0, 1, 0, 0);
transform: matrix(-1, 0, 0, 1, 0, 0);
}
<span class='mirror'>Mirror Text<span>
Vous pouvez utiliser soit
.your-class{
position:absolute;
-moz-transform: scaleX(-1);
-o-transform: scaleX(-1);
-webkit-transform: scaleX(-1);
transform: scaleX(-1);
filter: FlipH;
}
ou
.your-class{
position:absolute;
transform: rotate(360deg) scaleX(-1);
}
Notez que le réglage de position
sur absolute
est très important! Si vous ne le définissez pas, vous devrez définir display: inline-block;
J'ai pavé cette solution en fouillant Internet, y compris
Cette solution semble fonctionner dans tous les navigateurs, y compris IE6 +, en utilisant scale(-1,1)
(un miroir approprié) et les propriétés filter
/-ms-filter
appropriées (si nécessaire) (IE6-8):
/* Cross-browser mirroring of content. Note that CSS pre-processors
like Less cough on the media hack.
Microsoft recommends using BasicImage as a more efficent/faster form of
mirroring, instead of FlipH or some kind of Matrix scaling/transform.
@see http://msdn.Microsoft.com/en-us/library/ms532972%28v=vs.85%29.aspx
@see http://msdn.Microsoft.com/en-us/library/ms532992%28v=vs.85%29.aspx
*/
/* IE8 only via hack: necessary because IE9+ will also interpret -ms-filter,
and mirroring something that's already mirrored results in no net change! */
@media \0screen {
.mirror {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(mirror=1)";
}
}
.mirror {
/* IE6 and 7 via hack */
*filter: progid:DXImageTransform.Microsoft.BasicImage(mirror=1);
/* Standards browsers, including IE9+ */
-moz-transform: scale(-1,1);
-ms-transform: scale(-1,1);
-o-transform: scale(-1,1); /* Op 11.5 only */
-webkit-transform: scale(-1,1);
transform: scale(-1,1);
}
Pour une compatibilité entre navigateurs, créez cette classe.
.mirror-icon:before {
-webkit-transform: scale(-1, 1);
-moz-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
transform: scale(-1, 1);
}
Et ajoutez-le à votre classe d'icônes, c'est-à-dire.
<i class="icon-search mirror-icon"></i>
obtenir une icône de recherche avec la poignée à gauche
vous pouvez utiliser "transformer" pour y parvenir. http://jsfiddle.net/aRcQ8/
css:
-moz-transform: rotate(-180deg);
-webkit-transform: rotate(-180deg);
transform: rotate(-180deg);
Il y a aussi le rotateY
pour un vrai miroir:
transform: rotateY(180deg);
Ce qui, peut-être, est encore plus clair et compréhensible.
EDIT: Ne semble pas fonctionner sur Opera bien que… malheureusement. Mais cela fonctionne bien sur Firefox. Je suppose qu'il pourrait être nécessaire de dire implicitement que nous faisons une sorte de translate3d
peut-être? Ou quelque chose comme ça.
Il suffit d'ajouter une démo de travail pour un retournement de miroir horizontal et vertical.
.horizontal-flip {
-moz-transform: scale(-1, 1);
-webkit-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1);
}
.vertical-flip {
-moz-transform: scale(1, -1);
-webkit-transform: scale(1, -1);
-o-transform: scale(1, -1);
-ms-transform: scale(1, -1);
transform: scale(1, -1);
}
<div class="horizontal-flip">
Hello, World
<input type="text">
</div>
<hr>
<div class="vertical-flip">
Hello, World
<input type="text">
</div>
Encore un exemple montrant comment le personnage pourrait être inversé. Ajoutez des préfixes de fournisseur si vous en avez besoin, mais pour le moment, tous les navigateurs modernes prennent en charge la propriété de transformation sans préfixe. La seule exception est Opera si Opera le mode Mini est activé (environ 3% d'utilisateurs dans le monde).
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Text rotation</title>
<style type="text/css" media="screen">
.scissors {
display: inline-block;
font-size: 50px;
color: red;
}
.original {
color: initial;
}
.flipped {
transform: rotateZ(180deg);
}
.upward {
transform: rotateZ(-90deg);
}
.downward {
transform: rotateZ(90deg);
}
</style>
</head>
<body>
<ul>
<li>Original: <span class="scissors original">✂</span></li>
<li>Flipped: <span class="scissors flipped">✂</span></li>
<li>Upward: <span class="scissors upward">✂</span></li>
<li>Downward: <span class="scissors downward">✂</span></li>
</ul>
</body>
</html>
Vous pouvez essayer box-reflect
box-reflect: 20px right;
voir compatibilité de la boîte de dialogue CSS de la propriété CSS? pour plus de détails
c'est ce qui a fonctionné pour moi pour <span class="navigation-pipe">></span>
display:inline-block;
-moz-transform: rotate(360deg);
-webkit-transform: rotate(360deg);
transform: rotate(360deg);
filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=4);
juste besoin d’affichage: inline-block ou block to turn. Donc, fondamentalement, la première réponse est bonne. Mais -180 n'a pas fonctionné.