J'essaie de centrer cet élément sur l'écran, également lorsque je survole.
Dans l'exemple ci-dessous, le div n'est pas centré, même lorsque je le survole, sachant que j'ai une transformation à 50% et que le haut/gauche est également transformé, c'est ce que j'utilise habituellement pour centrer l'élément .
* { box-sizing: border-box; } body { position: relative } .zoom { padding: 50px; background-color: green; transition: transform .2s; width: 200px; height: 200px; margin: 0 auto; transform: scale(.2) translate(-50%, -50%); position: absolute; top: 50%; left: 50%; } .zoom:hover { -ms-transform: scale(1.5); /* IE 9 */ -webkit-transform: scale(1.5); /* Safari 3-8 */ transform: scale(1.5); }
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> </head> <body> <div class="zoom"></div> </body> </html>
L'erreur est à
:hover
选择器中,因为转换中没有translate()
et vous la réinitialisez à 0, ce qui n'est pas ce que vous voulez. Parce qu'il oubliera le contenu précédent et l'écrasera.Voici une solution simple :
❌
✅
Voici une explication simple :
Solution moderne (moins de code) :
Utilisez CSS Grid https://developer.mozilla.org/ en-US/docs/Web/CSS/grid
Utilisez
place-items
et il se centrera automatiquement sans aucune transformation ni position... https://developer.mozilla.org/en-US/docs/Web/CSS/place-itemsDe plus, vous n'avez pas à vous soucier de
0.2
进行缩放,只需从scale(1)
开始,然后通过悬停更大的比例来使其更大,例如4
au début. (Donc, sans survol, cela ne produira pas cette erreur au début de la transition de 200px à 0,2scale)Mais si vous voulez que votre CSS fonctionne dans IE et les navigateurs plus anciens, alors il est préférable d'utiliser position, pan, top, left...
Mais vos utilisateurs utilisent des navigateurs modernes, donc pour une meilleure lisibilité et simplicité, il pourrait être judicieux d'utiliser Flexbox ou Grid.
Pour plus d'informations, utilisez https://caniuse.com (par exemple, prise en charge à 95 % de Grid dans n'importe quel navigateur à partir de 2020, Chrome à partir de 2017)
Voici la solution de grille CSS
N'oubliez pas que l'ordre des transformations détermine la manière dont les éléments sont affichés. Vous commencez par déplacer 50% de l'élément
top: 50%; left: 50%;
,将其置于右下象限。然后你把它变小transform:scale(0.2)
然后然后你把它向左移动现在较小尺寸translate(-50%, -50%)
.En mettant la traduction en premier, l'élément sera centré avant que ne devienne plus petit. N'oubliez pas d'inclure également
translate(-50%, -50%)
lorsque vous augmentez la taille, car les traductions ultérieures écraseront la traduction actuelle plutôt que d'y ajouter des éléments.