suchen
HeimWeb-FrontendCSS-TutorialBeheben von Problemen aufgrund unerwarteter Änderungen an „container-type: inline-size' in Chrome

Chrome 129 führte eine Änderung im Verhalten von Containerabfragen ein, die sich auf Elemente mit Containertyp: Inline-Size auswirken. Diese Änderung ist zwar geringfügig, kann jedoch das Layout Ihrer Web-App beeinträchtigen. Ich werde durchgehen, was sich geändert hat, wie es sich zuvor verhalten hat und wie es sich ab Chrome 129 verhält.

Was hat sich geändert?

Vor Chrome 129, Containertyp: inline-size implizit:

  1. Erstellt einen enthaltenden Block für absolut positionierte Elemente
  2. Einen neuen Stapelkontext erstellt

Um dies zu veranschaulichen, betrachten Sie Folgendes:


  
    <style>
      .container {
        container-type: inline-size;
        width: 300px;
        height: 300px;
        border: 2px solid black;
        padding: 1rem;
        margin: 2rem;
        contain: layout;
      }

      .child,
      .sibling {
        position: absolute;
        display: flex;
        justify-content: center;
        align-items: center;
        color: white;
      }

      .child {
        width: 200px;
        height: 200px;
      }

      .child-1 {
        background-color: rgba(255, 0, 0, 0.7);
        top: 100px;
        left: 100px;
        z-index: 2;
      }

      .child-2 {
        background-color: rgba(0, 255, 0, 0.7);
        top: 30px;
        left: 0;
        z-index: 1;
      }

      .sibling {
        width: 150px;
        height: 150px;
        background-color: rgba(0, 0, 255, 0.7);
        top: 165px;
        left: 50px;
        z-index: 1;
      }
    </style>
  
  
    <div class="container">
      <div class="child child-1">Child 1 (z-index: 2)</div>
      <div class="child child-2">Child 2 (z-index: 1)</div>
    </div>
    <div class="sibling">Sibling (z-index: 1)</div>
  

Vor Chrome 129 wurde der obige Code wie folgt gerendert:

Resolving Issues from Unexpected Changes to `container-type: inline-size` in Chrome

Die untergeordneten Elemente des schwarz umrandeten .container-Div sind absolut positioniert. child-2 (das grüne Div) ist links positioniert: 0, richtet sich jedoch an den linken Grenzen des übergeordneten .container-Div aus. Dies liegt daran, dass in Chrome 128 und älter „container-type: inline-size“ implizit einen enthaltenden Block für absolut positionierte untergeordnete Elemente erstellt hat.

Darüber hinaus erstellt das Element „container-type: inline-size“ implizit einen neuen Stapelkontext, was dazu führt, dass Grün unten, Rot in der Mitte und Blau oben angezeigt wird.

Ab Chrome 129 werden jedoch dasselbe HTML und CSS wie folgt gerendert

Resolving Issues from Unexpected Changes to `container-type: inline-size` in Chrome

Für die untergeordneten Elemente des .container-Elements wird kein enthaltender Block erstellt, und daher werden die absolut positionierten Elemente relativ zur Webseite und nicht relativ zu ihrem Container positioniert. Dies führt dazu, dass das grüne Quadrat den Container vollständig verlässt und die linke Seite der Webseite berührt.

Da außerdem kein neuer Stapelkontext erstellt wurde, hat sich die Reihenfolge geändert, in der die Kinder und Geschwister gestapelt werden. Das grüne Quadrat befindet sich immer noch unten, aber jetzt befindet sich das blaue Quadrat in der Mitte und das rote Quadrat oben.

Warum die Änderung?

Laut dem Chromium-Team im offiziellen Chromium-Bug-Tracker handelte es sich um eine absichtliche Änderung, um einen vom Team als Designfehler in der ursprünglichen Spezifikation angesehenen Fehler zu beheben.

Die Spezifikation selbst muss noch aktualisiert werden, aber das Team hat aufgrund einer Vereinbarung innerhalb der Arbeitsgruppe die Änderung am Browserverhalten vorgenommen, bevor Änderungen an der Spezifikation vorgenommen wurden.

Zum Zeitpunkt des Verfassens dieses Artikels (3. Oktober 2024) folgen alle anderen gängigen Browser (Firefox, Safari) immer noch dem Verhalten vor Chrome 129.

Abmilderung der Änderungen

Wenn Sie lediglich den Zustand vor Chrome 129 wiederherstellen möchten (und in der Zwischenzeit die Konsistenz aller Browser aufrechterhalten möchten, bis Firefox und Safari aktualisiert werden, um der Chrome-Implementierung zu folgen), können Sie einfach „contain: layout;“ hinzufügen. auf das Element mit dem Containertyp: inline-size;.

Wenn Sie das Verhalten des enthaltenden Blocks hinzufügen, aber keinen neuen Stapelkontext erstellen möchten, können Sie alternativ position: relative zum Container-Typ hinzufügen: inline-size; Element, das einen enthaltenden Block für untergeordnete Elemente erstellt, aber keinen neuen Stapelkontext erstellt. Dies führt jedoch zu unterschiedlichem Verhalten in verschiedenen Browsern, bis andere Browser aktualisiert werden, um dem Beispiel von Chrome zu folgen.

Probieren Sie es selbst aus

Unten ist ein CodePen, mit dem Sie spielen können und der zeigt, wovon ich oben spreche. Wenn Sie das Layout „contain:“ aus dem .container-Stil entfernen und Chrome 129 oder höher verwenden, wird das Layout wie im zweiten Bild angezeigt, das ich oben bereitgestellt habe. Wenn Sie den CodePen jedoch in Firefox 131 (aktuell zum Zeitpunkt des Schreibens) anzeigen, sollte er unabhängig davon, ob „container:“-Layout festgelegt ist oder nicht, dasselbe anzeigen.

Ich konnte diese Änderung in den Versionshinweisen für Chrome 129 nicht erwähnen, und wie bereits erwähnt, wurde diese Änderung vor einer Spezifikationsänderung vorgenommen, sodass wir wirklich überrascht wurden und das Layout erheblich durcheinander gebracht haben eine unserer Web-Apps. Ich hoffe, dass diese Informationen allen anderen helfen können, die die gleichen Probleme haben.

Das obige ist der detaillierte Inhalt vonBeheben von Problemen aufgrund unerwarteter Änderungen an „container-type: inline-size' in Chrome. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Entmystifizierende Bildschirmleser: Zugrunde Formen und Best PracticesEntmystifizierende Bildschirmleser: Zugrunde Formen und Best PracticesMar 08, 2025 am 09:45 AM

Dies ist der 3. Beitrag in einer kleinen Serie, die wir in Form von Barrierefreiheit gemacht haben. Wenn Sie den zweiten Beitrag verpasst haben, lesen Sie "Verwalten des Benutzerfokus mit: Fokus-Sichtbar". In

Hinzufügen von Kastenschatten zu WordPress -Blöcken und -ElementenHinzufügen von Kastenschatten zu WordPress -Blöcken und -ElementenMar 09, 2025 pm 12:53 PM

Die CSS-Box-Shadow- und Umrisseigenschaften haben Thema gewonnen. JSON-Unterstützung in WordPress 6.1. Sei ein paar Beispiele für die Funktionsweise in realen Themen und welche Optionen wir diese Stile auf WordPress -Blöcke und Elemente anwenden müssen.

Machen Sie Ihren ersten Seltsamen -Sufle -ÜbergangMachen Sie Ihren ersten Seltsamen -Sufle -ÜbergangMar 15, 2025 am 11:08 AM

Die Sufelte Transition -API bietet eine Möglichkeit, Komponenten zu beleben, wenn sie das Dokument eingeben oder verlassen, einschließlich benutzerdefinierter Svelte -Übergänge.

Arbeiten mit GraphQL CachingArbeiten mit GraphQL CachingMar 19, 2025 am 09:36 AM

Wenn Sie kürzlich mit GraphQL gearbeitet oder seine Vor- und Nachteile überprüft haben, haben Sie zweifellos Dinge wie "GraphQL nicht unterstützen Caching" oder gehört

Edle und coole CSS -Scrollbars: Ein SchaufensterEdle und coole CSS -Scrollbars: Ein SchaufensterMar 10, 2025 am 11:37 AM

In diesem Artikel werden wir in die Welt der Scrollbars eintauchen. Ich weiß, es klingt nicht zu glamourös, aber vertrau mir, eine gut gestaltete Seite geht Hand in Hand

Show, Don ' TellShow, Don ' TellMar 16, 2025 am 11:49 AM

Wie viel Zeit damit, die Inhaltspräsentation für Ihre Websites zu entwerfen? Wenn Sie einen neuen Blog -Beitrag schreiben oder eine neue Seite erstellen, denken Sie darüber nach

Aufbau einer Ethereum -App mit Redwood.js und FaunaAufbau einer Ethereum -App mit Redwood.js und FaunaMar 28, 2025 am 09:18 AM

Mit dem jüngsten Aufstieg von Bitcoins Preis über 20.000 USD und kürzlich von 30.000, dachte ich, es lohnt

Was zum Teufel haben NPM -Befehle?Was zum Teufel haben NPM -Befehle?Mar 15, 2025 am 11:36 AM

NPM-Befehle führen verschiedene Aufgaben für Sie aus, entweder als einmalige oder als kontinuierlich ausgeführter Vorgang für Dinge wie das Starten eines Servers oder das Kompilieren von Code.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heiße Werkzeuge

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

mPDF

mPDF

mPDF ist eine PHP-Bibliothek, die PDF-Dateien aus UTF-8-codiertem HTML generieren kann. Der ursprüngliche Autor, Ian Back, hat mPDF geschrieben, um PDF-Dateien „on the fly“ von seiner Website auszugeben und verschiedene Sprachen zu verarbeiten. Es ist langsamer und erzeugt bei der Verwendung von Unicode-Schriftarten größere Dateien als Originalskripte wie HTML2FPDF, unterstützt aber CSS-Stile usw. und verfügt über viele Verbesserungen. Unterstützt fast alle Sprachen, einschließlich RTL (Arabisch und Hebräisch) und CJK (Chinesisch, Japanisch und Koreanisch). Unterstützt verschachtelte Elemente auf Blockebene (wie P, DIV),

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.