Gestalten Sie HTML und mit modernem CSS
Geschrieben von Rob O'Leary✏️
Die
Wie werden und zusammenarbeiten?
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:
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>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>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
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
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
/* open state */ details[open]::details-content { block-size: auto; }
Der Standardstil ist ziemlich einfach:
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
<details> <summary>Do you want to know more?</summary> <h3>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
- 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,
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; }
Ä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
<details> <summary>Do you want to know more?</summary> <h3>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
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
/* 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
/* open state */ details[open]::details-content { block-size: auto; }
>@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 */
}
}

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Versuchen wir, hier einen Begriff zu prägen: "Statischer Formanbieter". Sie bringen Ihre HTML

Zu Beginn eines neuen Projekts erfolgt die SASS -Zusammenstellung im Blinzeln eines Auges. Dies fühlt sich gut an, besonders wenn es mit Browsersync kombiniert ist, das nachlädt

In der Zusammenfassung der Plattformnachrichten in dieser Woche stellt Chrome ein neues Attribut für das Laden, Zugänglichkeitspezifikationen für Webentwickler und die BBC -Bewegungen ein

Ich schaue mir das HTML -Element zum ersten Mal an. Ich habe es für eine Weile dessen bewusst, aber Haven ' Es wurde es noch nicht für einen Dreh genommen. Es hat einige ziemlich cool und

Buy or Build ist eine klassische Technologiedebatte. Das Aufbau von Dingen selbst ist vielleicht billiger, weil Ihre Kreditkartenrechnung keine Werbebuchung gibt, aber

Für eine Weile war iTunes der große Hund im Podcasting. Wenn Sie also "Abonnieren Sie Podcast" verlinkt haben, um zu mögen:

Es gibt eine Menge Analyseplattformen, mit denen Sie Besucher- und Nutzungsdaten auf Ihren Websites verfolgen können. Vielleicht vor allem Google Analytics, das weit verbreitet ist

Der Dokumentkopf ist vielleicht nicht der glamouröseste Teil einer Website, aber was darauf einfließt
