Je cherchais des propriétés css que je n'avais jamais utilisées et j'ai appris à connaître la propriété zoom
de css3
Quelles sont les similitudes et les différences entre elles?
Quand utiliser le zoom et quand l'échelle? Les deux font à peu près le même travail.
Quel est le plus efficace à utiliser et pourquoi?
les deux redimensionnent l'objet mais transform-Origin par défaut pour redimensionner son centre et pour zoomer en haut à gauche je pense;
lorsque nous les utilisons pour la mise à l'échelle en survol, le zoom est redimensionné et réduit à nouveau à la dimension d'origine, tandis que l'échelle ne diminue que lors du survol. - >> jsfiddle montrant l'effet de survol **
*
{
-webkit-transition-duration: 0.3s;
-moz-transition-duration: 0.3s;
-ms-transition-duration: 0.3s;
-o-transition-duration: 0.3s;
transition-duration: 0.3s;
}
box, box2
{
display: inline-block;
width: 100px;
height: 100px;
margin: 20px;
}
box
{
background: #b00;
}
box:hover
{
zoom: 1.1;
}
box2
{
background: #00b;
}
box2:hover
{
-webkit-transform: scale(1.1);
-moz-transform: scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
<box></box>
<box2></box2>
div {
display: inline-block;
height: 50px;
width: 50px;
}
.one {
background: #07a;
-webkit-transform: scale(2);
-moz-transform: scale(2);
-ms-transform: scale(2);
-o-transform: scale(2);
transform: scale(2);
transform-Origin: top top;
}
.two {
background: #eee;
zoom: 200%;
margin-left:100px;
}
.three {
background: #07a;
transform-Origin: top left;
transition:all 0.6s ease;
}
.three:hover{
-webkit-transform: scale(2);
-moz-transform: scale(2);
-ms-transform: scale(2);
-o-transform: scale(2);
transform: scale(2);
}
.four {
background: #eee;
transition:all 0.6s ease;
}
.four:hover{
zoom: 200%;
}
<h4>Already zoomed and scalled</h4>
<div class="one"></div>
<div class="two"></div>
<hr>
<h4>Zoomed and Scalled on hover</h4>
<div class="three"></div>
<div class="four"></div>
La transformation est plus prévisible que le zoom sur les navigateurs.
Le zoom affecte le positionnement différemment selon les navigateurs.
exemple: position:absolute; left:50px; zoom: 50%;
left
.25px
. Effectivement, cela fait left = left * zoom
. Mais les valeurs calculées par DevTools dans DevTools continueront d'afficher left: 50px
, Même si cela n'est pas vrai en raison du zoom.La transformation est gérée de la même manière dans tous les navigateurs (autant que je sache).
exemple: position:absolute; left:50px; transform: scale(0.5)
left
serait effectivement réglé sur 25px
dans les deux Chrome et IE. (encore une fois, les valeurs calculées ne refléteront toujours pas cela, elles afficheront left:50px
)left
, utilisez simplement transform-Origin: 0 0
. Cela garantira que la gauche est toujours de 50 pixels.Démo: http://jsfiddle.net/4z728fmk/ montre 2 cases où la petite est zoomée ou réduite à 50%. Ressemble à ça:
edit: img mis à jour le 16/06/2016 avec Firefox (rien n'a changé dans Chrome ou IE depuis la dernière fois)
Complémentaire à la réponse de Drkawashima:
zoom
ne fonctionne pas du tout dans Firefox. Voir caniusezoom: 1;
était la déclaration puissante qui a aidé à déboguer IE6. Il a conféré à l'élément auquel il avait été appliqué un "commutateur" interne à ce navigateur nommé hasLayout (pas une propriété CSS, mais simplement un concept comme "clearfix"). Tu trouveras position: relative; zoom: 1;
beaucoup dans les vieux projetszoom
ne fonctionne pas avec les animations css ni transition
propriety: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_animated_properties