Page d'accueil » Codage » CSS - marginauto; - Comment ça marche

    CSS - marginauto; - Comment ça marche

    En utilisant marge: auto centrer un bloc horizontalement est une technique bien connue. Mais vous êtes-vous déjà demandé pourquoi ou comment cela fonctionne? Pour répondre à cette question, nous devons d’abord examiner le fonctionnement de margin: auto. Aussi dans le mix, c'est quoi auto peut éventuellement faire dans les marges, si cela fonctionne pour le centrage vertical, et quelques autres problèmes.

    Mais d'abord, qu'est-ce que auto effectivement faire?

    La définition de auto varie avec éléments, types d'éléments et le contexte. En marge, auto peut signifier l’une des deux choses suivantes: occuper l’espace disponible ou 0 px. Ces deux seront définir différentes dispositions pour un élément.

    "auto" Prend l'espace disponible

    C'est l'utilisation la plus courante de la marge auto nous rencontrons souvent. En assignant auto aux marges gauche et droite d'un élément, ils occupent également l'espace horizontal disponible dans le conteneur de l'élément - et l'élément est ainsi centré.

    Cependant, cela ne fonctionnera que pour les marges horizontales (plus sur le Pourquoi plus tard), et aussi ne fonctionnera pas avec flotté et éléments en ligne et par lui-même, il ne peut pas fonctionner dans absolu et éléments positionnés fixes (nous verrons cependant comment les faire fonctionner).

    Faux Float en occupant l'espace disponible

    Puisque auto Dans les marges de droite et de gauche, l’espace "disponible" est réparti de manière égale. Que pensez-vous qu'il se passera lorsque la valeur auto est donné à un seul de ceux?

    Une marge gauche ou droite avec auto occupera tout l’espace "disponible", donnant l’impression que l’élément a été vidé à droite ou à gauche.

    “auto” Calculé à 0px

    Comme indiqué précédemment, auto ne fonctionnera pas dans les éléments floated, inline et absolute. Tous ces éléments ont déjà décidé de leurs dispositions, donc il ne sert à rien d'utiliser auto pour les marges et s'attendre à ce qu'il soit centré comme ça.

    Cela ira à l'encontre du but initial d'utiliser quelque chose comme flotte. Par conséquent auto aura une valeur de 0px dans ces éléments.

    auto De plus, il ne fonctionnera pas sur un élément de bloc typique s'il n'a pas de largeur. Tous les exemples que je vous ai montrés jusqu'ici ont des largeurs.

    Une largeur de valeur auto aura 0px les marges. La largeur d'un élément de bloc couvre généralement son conteneur lorsqu'il est auto ou 100% et donc une marge auto sera calculé pour 0px dans ce cas.

    Qu'advient-il des marges verticales avec la valeur auto?

    auto dans les deux marges supérieure et inférieure est toujours calculé à 0px (sauf pour les éléments absolus). La spécification W3C le dit comme ceci:

    “Si “haut de la marge” ou “marge inférieure” est “auto”, leur valeur utilisée est 0 "

    Le pourquoi, enfin c'est un mystère. Cela pourrait être dû au flux de page vertical typique, où la taille de la page augmente en hauteur. Donc, centrer un élément verticalement dans son conteneur ne le fera pas apparaître centré, par rapport à la page elle-même, contrairement à ce qui se fait horizontalement (dans la plupart des cas).

    Et c'est peut-être pour cette même raison qu'ils ont décidé d'ajouter une exception pour les éléments absolus pouvant être centrés verticalement sur toute la hauteur de la page..

    Cela pourrait aussi être dû à l’effet d’effondrement de la marge (un effondrement d’éléments adjacents” marges) qui est une autre exception pour les marges verticales.

    Cependant, ce dernier cas semble être un cas improbable - puisque des éléments qui ne s'affaissent pas - tels que Floats, et des éléments avec débordement autre que visible, toujours attribuer des marges verticales 0px pour auto.

    Centrer les éléments absolument positionnés

    Comme il se trouve qu’il existe une exception pour les éléments en position absolue, nous”ll utilisera auto valeur de centrer verticalement et horizontalement. Mais avant cela, nous devons savoir quand marge: auto fonctionne réellement comme nous le voulons dans un élément absolument positionné.

    C'est ici qu'une autre spécification du W3C entre en scène:

    "Si les trois “la gauche”, “largeur”, et “droite” sont “auto”: Premier set any “auto” valeurs pour “marge gauche” et “marge droite” à 0… "

    "Si aucun des trois n'est “auto”: Si les deux “marge gauche” et “marge droite” sont “auto”, résoudre l'équation sous la contrainte supplémentaire que les deux marges obtiennent des valeurs égales "

    Cela dit à peu près cela pour horizontal auto les marges de saisir des espaces égaux, le valeurs pour la gauche, largeur et droite ne devrait pas être auto , leur valeur par défaut. Il suffit donc de leur donner de la valeur dans un élément absolument positionné. la gauche et droite avoir dû valeurs égales pour un centrage parfait.

    La spécification mentionne également quelque chose de similaire pour les marges verticales.

    “Si les trois “Haut”, “la taille”, et “bas” sont auto, réglé “Haut” à la position statique… ”

    “Si aucun des trois n'est “auto”: Si les deux “haut de la marge” et “marge inférieure” sont “auto”, résoudre l'équation sous la contrainte supplémentaire que les deux marges obtiennent des valeurs égales… ”

    Par conséquent, pour qu'un élément absolu soit centré verticalement, ses Haut, la taille, et bas les valeurs ne devraient pas être auto.

    Maintenant, en combinant tout cela, c’est ce que nous”vous obtiendrez:

    Conclusion

    Si vous souhaitez jamais vider un élément de votre page vers la droite ou la gauche sans que les éléments suivants l'enveloppent (comme ce qui se passe avec float), souvenez-vous qu'il est possible d'utiliser auto pour les marges.

    Convertir un élément en absolu pour qu'il puisse être centré verticalement n'est peut-être pas une bonne idée. Il existe d'autres options telles que flexbox et transformation CSS qui conviennent mieux à ceux.