suchen
HeimWeb-FrontendCSS-TutorialGestalten Sie HTML und mit modernem CSS

Geschrieben von Rob O'Leary✏️

Die

und HTML-Elemente, die zusammenfassend als Offenlegungs-Widget bezeichnet werden, sind nicht einfach zu formatieren. Aufgrund der Einschränkungen erstellen Benutzer oft ihre eigene Version mit einer benutzerdefinierten Komponente. Mit der Weiterentwicklung von CSS sind diese Elemente jedoch einfacher anzupassen. In diesem Artikel beschreibe ich, wie Sie das Erscheinungsbild und Verhalten eines Offenlegungs-Widgets anpassen können.

Wie werden
und zusammenarbeiten?

ist ein HTML-Element, das ein Offenlegungs-Widget erstellt, in dem zusätzliche Informationen ausgeblendet sind. Ein Offenlegungs-Widget wird normalerweise als dreieckige Markierung mit etwas Text dargestellt.

Wenn der Benutzer auf das Widget klickt oder sich darauf konzentriert und die Leertaste drückt, wird es geöffnet und zeigt zusätzliche Informationen an. Die Dreiecksmarkierung zeigt nach unten, um anzuzeigen, dass es sich im geöffneten Zustand befindet:

Styling HTML <details> und <summary> mit modernem CSS“ /></p>

<p><img src=

Wie funktioniert die Offenlegungsanimation?

Zuerst fügen wir interpolate-size hinzu, damit wir zu einer Höhe von auto: übergehen können

<details>
  <summary>Do you want to know more?</summary>
  <h3 id="Additional-info">Additional info</h3>
  <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p>
</details>

Als nächstes wollen wir den geschlossenen Stil beschreiben. Wir möchten, dass der „Zusatzinfo“-Inhalt eine Höhe von Null hat und sicherstellen, dass kein Inhalt sichtbar ist, d. h. wir möchten einen Überlauf verhindern.

Wir verwenden das Pseudoelement ::details-content, um auf versteckte Inhalte zu zielen. Ich verwende die Blockgröße-Eigenschaft anstelle der Höhe, da es eine gute Angewohnheit ist, logische Eigenschaften zu verwenden. Wir müssen content-visibility in den Übergang einbeziehen, da der Browser content-visibility:hiden für den Inhalt einstellt, wenn er sich im geschlossenen Zustand befindet – die Abschlussanimation funktioniert nicht, ohne ihn einzuschließen:

<details>
  <summary>Do you want to know more?</summary>
  <h3 id="Additional-info">Additional info</h3>
  <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p>
</details>

Die Animation funktioniert immer noch nicht wie erwartet, da die Eigenschaft „Inhaltssichtbarkeit“ eine diskrete animierte Eigenschaft ist. Dies bedeutet, dass keine Interpolation erfolgt; Der Browser wechselt zwischen den beiden Werten, sodass der geänderte Inhalt während der gesamten Animationsdauer angezeigt wird. Wir wollen das nicht.

Wenn wir „transition-behavior:allow-discrete;“ einbeziehen, kehrt sich der Wert ganz am Ende der Animation um, sodass wir unseren allmählichen Übergang erhalten.

Außerdem kommt es zu einem Inhaltsüberlauf, indem wir die Blockgröße auf 0 setzen, wenn sich das Offenlegungs-Widget in einem Zwischenzustand befindet. Wir zeigen den größten Teil des Inhalts beim Öffnen an. Um dies zu verhindern, fügen wir overflow:hiden hinzu.

Zuletzt fügen wir den Stil für den offenen Zustand hinzu. Wir möchten, dass der Endzustand die Größe auto:
hat

details {
    interpolate-size: allow-keywords;
}

Das sind die groben Striche. Wenn Sie eine ausführlichere Videoerklärung bevorzugen, sehen Sie sich die exemplarische Vorgehensweise von Kevin Powell an, um zu erfahren, wie Sie

und .

Gibt es beim Animieren eines Offenlegungs-Widgets weitere Überlegungen?

Das Offenlegungs-Widget kann horizontal wachsen, wenn der Inhalt „Zusätzliche Informationen“ breiter ist als die Inhalt. Dies kann zu einer unerwünschten Layoutverschiebung führen. In diesem Fall möchten Sie möglicherweise eine Breite für

festlegen.

Wie bei jeder Animation sollten Sie Benutzer berücksichtigen, die empfindlich auf Bewegungen reagieren. Sie können die Medienabfrage „Preferences-Reduced-Motion“ verwenden, um diesem Szenario gerecht zu werden:

/* closed state */
details::details-content {
  block-size: 0;

  transition: content-visibility, block-size;
  transition-duration: 750ms;

  transition-behavior: allow-discrete;
  overflow: hidden;
}

Implementierung eines exklusiven
Gruppe (exklusives Akkordeon)

Ein häufiges UI-Muster ist eine Akkordeonkomponente. Es besteht aus einem Stapel von Offenlegungs-Widgets, die erweitert werden können, um ihren Inhalt anzuzeigen. Um dieses Muster zu implementieren, benötigen Sie lediglich mehrere aufeinanderfolgende

Elemente. Sie können sie so gestalten, dass sie visuell darauf hinweisen, dass sie zusammengehören:

/* open state */
details[open]::details-content {
  block-size: auto;
}

Der Standardstil ist ziemlich einfach:

Styling HTML <details> und <summary> mit modernem CSS“ /> </p>

<p>Alle <Details> belegt eine eigene Zeile. Sie sind eng beieinander positioniert (ohne Rand oder Polsterung) und werden aufgrund ihrer Nähe als Gruppe wahrgenommen. Wenn Sie hervorheben möchten, dass sie gruppiert sind, können Sie einen Rahmen hinzufügen und ihnen dieselben Hintergrundstile zuweisen, wie im folgenden Beispiel gezeigt:</p>

<p><iframe height=

Eine Variation dieses Musters besteht darin, das Akkordeon exklusiv zu machen, sodass jeweils nur eines der Offenlegungs-Widgets geöffnet werden kann. Sobald einer geöffnet wird, schließt der Browser den anderen. Sie können exklusive Gruppen über das Namensattribut von

erstellen. Der gleiche Name bildet eine semantische Gruppe:

<details>
  <summary>Do you want to know more?</summary>
  <h3 id="Additional-info">Additional info</h3>
  <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p>
</details>

Überlegen Sie vor der Verwendung exklusiver Akkordeons, ob dies für Benutzer hilfreich ist. Wenn Benutzer wahrscheinlich mehr Informationen nutzen möchten, müssen sie die Elemente häufig öffnen, was frustrierend sein kann.

Diese Funktion wird derzeit in allen modernen Browsern unterstützt, sodass Sie sie sofort verwenden können.

Gestaltung der Zusammenfassungsmarkierung

Ein Offenlegungs-Widget wird normalerweise mit einer kleinen dreieckigen Markierung daneben angezeigt. In diesem Abschnitt behandeln wir den Prozess der Gestaltung dieses Markers.

Die Markierung ist mit der verknüpft. Element. Das Hinzufügen des Pseudoelements [::marker](https://developer.mozilla.org/docs/Web/CSS/::marker) bedeutet, dass wir das Markierungsfeld direkt formatieren können. Allerdings beschränken wir uns auf einen kleinen Satz von CSS-Eigenschaften:

  • Alle Schriftarteigenschaften
  • Farbe
  • Leerzeichen
  • text-combine-upright, [unicode-bidi](https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-bidi) und Richtungseigenschaften
  • Inhalt
  • Alle Animations- und Übergangseigenschaften

Wie bereits erwähnt, ähnelt einem [

  • ](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/li); Es unterstützt die Kurzschrifteigenschaft im Listenstil und ihre Langschrifteigenschaften. Auch wenn das vielleicht ein wenig wirr ist, lassen sich die Gestaltungsoptionen anhand einiger Beispiele leichter verstehen.
  • Bevor wir uns mit Beispielen befassen, ein kurzes Wort zur Browserunterstützung. Zum Zeitpunkt des Verfassens dieses Artikels ist Safari der einzige große Browser, der das Formatieren des Markers nicht vollständig unterstützt:

    • Die Safari-Unterstützung ist derzeit auf die Gestaltung der Farb- und Schriftgrößeneigenschaften des ::marker-Pseudoelements beschränkt. Safari unterstützt das nicht standardmäßige Pseudoelement ::-webkit-details-marker
    • Safari unterstützt das Stylen der Eigenschaften im Listenstil überhaupt nicht. Siehe CanIUse als Referenz

    Ändern der Farbe und Größe einer Markierung

    Angenommen, wir wollten die Farbe der dreieckigen Markierung in Rot ändern und sie um 50 % vergrößern. Wir können Folgendes tun:

    details {
        interpolate-size: allow-keywords;
    }
    

    Styling HTML <details> und <summary> mit modernem CSS“ /> </p>

<p>Dies sollte in allen Browsern funktionieren. Hier ist das CodePen-Beispiel.</p><h4>
  
  
  Anpassen des Abstands der Markierung
</h4>

<p>Standardmäßig befindet sich die Markierung neben dem Textinhalt von <summary> und sie befinden sich im selben Begrenzungsrahmen. Die List-Style-Position ist auf inside gesetzt. Im geöffneten Zustand befindet sich die „Zusatzinformation“ direkt unter der Markierung. Vielleicht möchten Sie den Abstand und die Ausrichtung ändern: </p>

<p><img src=

    Ändern des Markierungstextes/-bildes

    Wenn Sie den Inhalt des Markers ändern möchten, können Sie die content-Eigenschaft des Pseudoelements ::marker verwenden. Basierend auf Ihren Vorlieben können Sie es auf Text einstellen. Für mein Beispiel habe ich das Reißverschluss-Mund-Emoji für den geschlossenen Zustand und das Offener-Mund-Emoji für den geöffneten Zustand verwendet:

    details {
        interpolate-size: allow-keywords;
    }
    

    Um ein Bild für die Markierung zu verwenden, können Sie die content-Eigenschaft des Pseudoelements ::marker oder die list-style-image-Eigenschaft von

    :
    verwenden

    /* closed state */
    details::details-content {
      block-size: 0;
    
      transition: content-visibility, block-size;
      transition-duration: 750ms;
    
      transition-behavior: allow-discrete;
      overflow: hidden;
    }
    

    Im folgenden Beispiel verwenden wir zwei Pfeilsymbole von Material Symbols für die Markierung. Der nach rechts zeigende Pfeil steht für den geschlossenen Zustand und der nach unten zeigende Pfeil für den offenen Zustand:

    Diese Beispiele funktionieren wie erwartet in Chrome und Firefox, Safari ignoriert die Stile jedoch. Sie können dies als eine schrittweise Verbesserung betrachten und damit Schluss machen. Wenn Sie jedoch in allen Browsern das gleiche Erscheinungsbild wünschen, können Sie die Markierung ausblenden und dann Ihr eigenes Bild als Ersatz hinzufügen. Das gibt Ihnen mehr Freiheit:

    /* open state */
    details[open]::details-content {
      block-size: auto;
    }
    

    Sie können den Status mithilfe eines neuen Markierungssymbols, beispielsweise eines Inline-Bilds oder über Pseudoelemente, visuell anzeigen. Die zeigt bereits (meistens) den Erweiterungs-/Reduzierungsstatus an. Wenn Sie also eine Inline-Grafik verwenden, sollte diese als dekorativ behandelt werden. Ein leeres Alt-Attribut bewirkt Folgendes:

    <details>
      <summary>Do you want to know more?</summary>
      <h3 id="Additional-info">Additional info</h3>
      <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p>
    </details>
    

    Wenn Sie möchten, können Sie die Markierung auch am Ende der positionieren:

    details {
        interpolate-size: allow-keywords;
    }
    

    Es ist jedoch wichtig zu beachten, dass das Ausblenden der Markierung bei Bildschirmleseprogrammen zu Problemen bei der Barrierefreiheit führt. Firefox, VoiceOver, JAWS und NVDA haben alle ein Problem mit der konsistenten Ankündigung des umgeschalteten Status des Offenlegungs-Widgets, wenn die Markierung entfernt wird. Leider ist der Stil an den Staat gebunden. Es ist besser, dies zu vermeiden.

    Gestalten Sie den Abschnitt „Zusätzliche Informationen“ von

    Vielleicht möchten Sie den Abschnitt „Zusätzliche Informationen“ des Offenlegungs-Widgets formatieren, ohne Stile in die zu verlieren. Da Sie eine variable Anzahl von Elementen in einem

    haben können, wäre es schön, eine Sammelregel zu haben:

    /* closed state */
    details::details-content {
      block-size: 0;
    
      transition: content-visibility, block-size;
      transition-duration: 750ms;
    
      transition-behavior: allow-discrete;
      overflow: hidden;
    }
    

    Mein Ziel ist es, die Element mit der Funktion :not(). Bedenken Sie jedoch, dass dies auf jedes Element und nicht auf den Inhalt als einzelnen Abschnitt abzielt!

    /* open state */
    details[open]::details-content {
      block-size: auto;
    }
    

    Styling HTML <details> und <summary> mit modernem CSS“ /> </p>

<p>Alternativ können Sie das Pseudoelement ::details-content verwenden, das auf den gesamten Abschnitt abzielt. Aus diesem Grund möchten Sie dies zum Animieren der Öffnungs- und Schließzustandsübergänge verwenden:<br>
</p>

<pre class=>@media (prefers-reduced-motion) { /* styles to apply if a user's device settings are set to reduced motion */ details::details-content { transition-duration: 0.8s; /* slower speed */ } }

    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
    Verwenden von Seiten CMS für statische Site Content ManagementVerwenden von Seiten CMS für statische Site Content ManagementMay 13, 2025 am 09:24 AM

    Ich weiß, ich weiß: Es gibt eine Menge von Content -Management -Systemoptionen, und während ich mehrere getestet habe, war keiner wirklich derjenige, den Sie wirklich wissen? Seltsame Preismodelle, schwierige Anpassungen, einige werden sogar ein Ganzes &

    Die ultimative Anleitung zum Verknüpfen von CSS -Dateien in HTMLDie ultimative Anleitung zum Verknüpfen von CSS -Dateien in HTMLMay 13, 2025 am 12:02 AM

    Das Verknüpfen von CSS -Dateien mit HTML kann durch die Verwendung von Elementen in einem HTML erreicht werden. 1) Verwenden Sie Tags, um lokale CSS -Dateien zu verknüpfen. 2) Mehrere CSS -Dateien können durch Hinzufügen mehrerer Tags implementiert werden. 3) Externe CSS -Dateien verwenden absolute URL -Links wie z. 4) Stellen Sie die korrekte Verwendung von Dateipfaden und CSS -Dateiladeauftrag sicher und optimieren Sie die Leistung können mit CSS -Präprozessor zusammengeführt werden, um Dateien zu verschmelzen.

    CSS Flexbox vs Grid: Eine umfassende ÜberprüfungCSS Flexbox vs Grid: Eine umfassende ÜberprüfungMay 12, 2025 am 12:01 AM

    Die Auswahl von Flexbox oder Grid hängt von den Layoutanforderungen ab: 1) Flexbox ist für eindimensionale Layouts wie die Navigationsleiste geeignet. 2) Das Gitter eignet sich für zweidimensionale Layouts wie Zeitschriftenlayouts. Die beiden können im Projekt verwendet werden, um den Layout -Effekt zu verbessern.

    So füge CSS -Dateien ein: Methoden und Best PracticesSo füge CSS -Dateien ein: Methoden und Best PracticesMay 11, 2025 am 12:02 AM

    Der beste Weg, um CSS -Dateien einzubeziehen, besteht darin, Tags zu verwenden, um externe CSS -Dateien in den HTML -Teil einzuführen. 1. Verwenden Sie Tags, um externe CSS -Dateien einzuführen, wie z. 2. Für kleine Anpassungen können Inline -CSS verwendet werden, sollten jedoch mit Vorsicht verwendet werden. 3. Große Projekte können CSS -Präprozessoren wie SASS oder weniger verwenden, um andere CSS -Dateien über @import zu importieren. 4. Für die Leistung sollten CSS -Dateien zusammengeführt und CDN verwendet und mit Tools wie CSSNano komprimiert werden.

    Flexbox vs Grid: Soll ich sie beide lernen?Flexbox vs Grid: Soll ich sie beide lernen?May 10, 2025 am 12:01 AM

    Ja, youShouldlearnbothflexBoxandgrid.1) FlexBoxiSidealfore-dimensional, flexibelayoutslikenAvigationMenus.2) GridexcelStwo-dimensional, komplexDesignsuchasmagazinelayouts.3) Kombininierungs-Botenhances-Flexible-und-und -Anteilungskraft, und -forsfossivität,

    Orbitalmechanik (oder wie ich eine CSS -Keyframes -Animation optimiert habe)Orbitalmechanik (oder wie ich eine CSS -Keyframes -Animation optimiert habe)May 09, 2025 am 09:57 AM

    Wie sieht es aus, Ihren eigenen Code neu zu gestalten? John Rhea nimmt eine alte CSS -Animation auseinander, die er geschrieben hat, und geht durch den Denkprozess der Optimierung.

    CSS -Animationen: Ist es schwierig, sie zu erstellen?CSS -Animationen: Ist es schwierig, sie zu erstellen?May 09, 2025 am 12:03 AM

    CsSanimationsarenotinherenthardbutRequirePractICEANDUnDing-fordertofcsPropertiesandTimingfunktionen.1) StartwithsimpleanimationslikescalingabuttononoversKeyFrames.2) useaSingFunctionslikecubic-BezierForteffects, SuchasabouNects, SuchasabouNects,, zu

    @Keyframes CSS: Die am häufigsten verwendeten Tricks@Keyframes CSS: Die am häufigsten verwendeten TricksMay 08, 2025 am 12:13 AM

    @KeyFramesispopulardUeToitSverSatility und PowerIncreatingsmoothcsSanimations.KectrickSinclude: 1) DefiningsmoothTransitionSbetTates, 2) AnimatingMultipleProperTiesimultan, 3) mit VendorprefixesforBrowserCompatible, 4) Kombinieren, 4) Kombinieren, 4) Kombinieren, 4) Kombinieren, 4) Kombinieren

    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

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heißer Artikel

    Mandragora: Flüstern des Hexenbaum
    3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
    Nordhold: Fusionssystem, erklärt
    3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

    Heiße Werkzeuge

    EditPlus chinesische Crack-Version

    EditPlus chinesische Crack-Version

    Geringe Größe, Syntaxhervorhebung, unterstützt keine Code-Eingabeaufforderungsfunktion

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    Herunterladen der Mac-Version des Atom-Editors

    Herunterladen der Mac-Version des Atom-Editors

    Der beliebteste Open-Source-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    SAP NetWeaver Server-Adapter für Eclipse

    SAP NetWeaver Server-Adapter für Eclipse

    Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.