Il existe un problème dans Google Chrome : lorsqu'un élément est placé dans un conteneur Flexbox contenant des éléments Flex adjacents code>center aligner le contenu dans différentes directions par rapport à la fenêtre.
Ce n'est pas un problème dans Firefox, IE11, Edge ou Safari car les éléments se développent toujours vers le bas.
Je suis curieux :
Mise à jour 1 : si possible, j'ai soumis le numéro 739860 sur le outil de suivi des bogues de Chrome pour demander des informations/explications aux développeurs de Chromium.
Deux exemples sont insérés ci-dessous. La suite de tests complète décrivant le problème peut être trouvée avec ce stylo : https://codepen.io/jameswilson/full/xrpRPg/ J'ai choisi d'utiliser slipToggle dans cet exemple afin que le mouvement de dépliage/pliage soit animé et accrocheur. Le même comportement se produit avec l'onglet Détails, mais il n'y a pas encore de support entre navigateurs et le développement/réduction est trop saccadé.
示例 1:Chrome 针对对齐 Flexbox 之间的空格的展开/折叠行为
$('button').click(function() { $(this).next().slideToggle(); })body { marge : 30px ; famille de polices : sans-serif ; } de côté, à part div, résumé, principal, bouton, détails p, bouton + p { arrière-plan : rgba(0,0,0,.09) ; bordure : aucune ; remplissage : 20 px ; marge : 0 ; } .flexconteneur { affichage : flexible ; } de côté { flexion : 1 ; position : relative ; largeur maximale : 25 % ; fond : crème à la menthe ; affichage : flexible ; direction flexible : colonne ; position : relative ; } de côté.espace-entre { justifier-contenu : espace entre les deux ; } à part.centre { justifier-contenu : centre ; } principal { flexion : 3 ; position : relative ; largeur maximale : 75 % ; fond : bleu alice ; alignement vertical : haut ; hauteur : 100 % ; } principal > * + * { marge supérieure : 20 px ; } bouton + p { affichage : aucun ; }示例 2:Chrome 对居中对齐的 Flexbox 的展开/折叠行为
$('button').click(function() { $(this).next().slideToggle(); })body { marge : 30px ; famille de polices : sans-serif ; } de côté, à part div, résumé, principal, bouton, détails p, bouton + p { arrière-plan : rgba(0,0,0,.09) ; bordure : aucune ; remplissage : 20 px ; marge : 0 ; } .flexconteneur { affichage : flexible ; } de côté { flexion : 1 ; position : relative ; largeur maximale : 25 % ; fond : crème à la menthe ; affichage : flexible ; direction flexible : colonne ; position : relative ; } de côté.espace-entre { justifier-contenu : espace entre les deux ; } à part.centre { justifier-contenu : centre ; } principal { flexion : 3 ; position : relative ; largeur maximale : 75 % ; fond : bleu alice ; alignement vertical : haut ; hauteur : 100 % ; } principal > * + * { marge supérieure : 20 px ; } bouton + p { affichage : aucun ; }
Ajoutez ce code à votre conteneur Flex :
溢出锚:无
Cela désactivera une fonctionnalité de Chrome appelée « ancrage par défilement » qui provoque l'agrandissement de la boîte vers le haut (Revised Code Pen).
Dans Chrome, la direction haut/bas de la zone extensible est déterminée par la position de défilement dans la fenêtre, et non par la mise en page elle-même.
Pour améliorer l'expérience utilisateur, Chrome adopte une approche unique face à ce comportement.
Fondamentalement, ils lient un élément DOM à la position de défilement actuelle. Le mouvement de cet élément spécifique (« ancre ») sur l'écran déterminera les ajustements de la position de défilement (le cas échéant).
Ils appellent cette méthode « ancrage par défilement ». L'algorithme est expliqué sur cette page :https://github.com/WICG/ScrollAnchoring/blob/master/explainer.md
Ce comportement est actuellement unique à Chrome, maisGoogle fait pression pour une standardisation.
Selon la documentation de l'ancre de défilement, l'application de
overflow-anchor: none
à l'élément approprié désactivera les ajustements de l'ancre de défilement.Plus d'informations :