Več podrobnosti o `details` PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.

Več podrobnosti na `podrobnosti`

Veliko klepeta okoli starega <details> in <summary> elementi v zadnjem času! videl sem Lea Verou je nedavno tvitnila opazko o elementih display vedenje in to nekako razcepljeno na več opažanj in opomb o uporabi ljudi, vključno z a oživela razprava o tem, ali <summary> smejo vsebovati interaktivne elemente ali ne.

Veliko je točk, ki jih je treba povezati, in dal bom vse od sebe, da naredim točno to.

Ali lahko spremenimo prikaz elementov, ugnezdenih v <details> element?

Super čudno! Če odpremo DevTools, nam to pove slogovna tabela uporabniškega agenta <details> je prikazan kot element bloka.

Več podrobnosti na `podrobnosti`

Upoštevajte zahtevano <summary> element in dva dodatna <div>je tam notri. Lahko preglasimo display, prav?

Več podrobnosti o `details` PlatoBlockchain Data Intelligence. Navpično iskanje. Ai.
Več podrobnosti na `podrobnosti`

To lahko pričakujemo <details> zdaj ima eksplicitno višino 40vh in tri vrstice, kjer tretja vrstica zavzame preostali prostor, ki ostane od prvih dveh. Všečkaj to:

Element odprtih podrobnosti s povzetkom foo in dvema podrejenima elementoma, enim rumenim in enim modrim. Modri ​​element zavzame preostali prostor, ki ga pustita povzetek in prvi podrejeni element.
Več podrobnosti na `podrobnosti`

Uf, ampak tretja vrsta ne … dela … tega.

Element odprtih podrobnosti s povzetkom foo in dvema podrejenima elementoma, enim rumenim in enim modrim. Povzetek in dva podrejena elementa so enako visoki.
Več podrobnosti na `podrobnosti`

Očitno imamo opravka z mrežnim vsebnikom, ki ne more uporabiti mrežnega vedenja za svoje mrežne elemente. Toda specifikacija HTML nam pove:

details element je se pričakuje, da bo prikazan kot a blok škatla. Element naj bi imel tudi notranjo senčno drevo z dvema reže.

(poudarek moj)

In malo kasneje:

details drugi element reža se pričakuje, da bo imel svoje style atribut nastavljen na "display: block; content-visibility: hidden;" ko details element nima open atribut. Ko ima open atribut, the style Pričakuje se, da bo atribut odstranjen iz drugega reža.

(spet moj poudarek)

Torej, specifikacija pravi drugo režo - dve dodatni <div>s iz primera — so le prisiljeni v blokovne elemente, ko <details> je zaprto. Ko je odprto - <details open> — morajo biti v skladu z mrežnim prikazom, ki preglasi slog uporabniškega agenta ... kajne?

To je razprava. Razumem slots nastavljeni na display: contents privzeto, toda zatikanje ugnezdenih elementov v reže in odstranjevanje možnosti njihovega oblikovanja se zdi napačno. Ali je težava s specifikacijami, da so vsebine reže, ali težava z brskalnikom, ki jih ne moremo preglasiti display čeprav so v škatli? Pametnejši ljudje me lahko razsvetlijo, vendar se zdi, da je to napačna izvedba.

Is <details> vsebnik ali interaktivni element?

Veliko ljudi je uporabo <details> za preklapljanje med meniji odprto in zaprto. To je praksa populariziral GitHub.

Orodja za razvijalce se odprejo z oranžno označenim elementom podrobnosti.
Več podrobnosti na `podrobnosti`

Zdi se razumno. Specifikacije to zagotovo dovoljujejo:

details element predstavlja gradnik za razkritje, iz katerega lahko uporabnik pridobi dodatne informacije ali kontrole.

(poudarek moj)

V redu, to lahko pričakujemo <details> je posoda (ima implicitno role=group) in <summary> je interaktivni element, ki nastavi vsebnik open država. Smiselno je od takrat <summary> ima implicit button Vloga v nekaterih kontekstih (vendar brez ustrezne vloge WAI-ARIA).

Ampak Melanie Sumner je nekaj kopala kar se zdi ne le v nasprotju s tem, ampak vodi do zaključka, da uporaba <details> ker meni verjetno ni najboljša stvar. Poglejte, kaj se zgodi, ko <details> je upodobljeno brez <summary> Element:

Naredi natanko to, kar predlaga specifikacija, ko manjka a <summary> — naredi svoje:

1. summary podrejeni element elementa, če kateripredstavlja povzetek ali legenda podrobnosti. Če ni otroka summary element, mora uporabniški agent zagotoviti lastno legendo (npr. »Podrobnosti«).

(poudarek moj)

Orodja za razvijalce se odprejo z oranžno označeno oznako povzetka.
Več podrobnosti na `podrobnosti`

Melanie je to pognala skozi validator HTML in — presenečenje! — ni veljavno:

Napaka, v podrobnostih elementa manjka zahtevani primerek povzetka podrejenega elementa.
Več podrobnosti na `podrobnosti`

Torej, <details> zahteva <summary>. In kdaj <summary> manjka, <details> ustvari svojo lastno, čeprav je posredovana kot neveljavna oznaka. Vse je hunky-dory in velja, ko <summary> je tam:

Sporočilo o uspehu iz validatorja HTML W3C z oznako za element podrobnosti in povzetek, ki vsebuje element povezave.
Več podrobnosti na `podrobnosti`

Vse to vodi do novega vprašanja: zakaj je <summary> podan implicit button vlogo, ko <details> je tisto, kar se zdi interaktivni element? Morda je to še en primer, ko je implementacija brskalnika napačna? Potem spet specifikacija oba kategorizira kot interaktivni elementi. Vidite lahko, kako popolnoma zmedeno postane vse to.

Kakor koli že, Melanijin končni sklep, ki bi se ga morali izogibati <details> za menije temelji na tem, kako pomožna tehnika bere in napove <details> ki vsebujejo interaktivne elemente. Element je najavljen, vendar ni omenjenih interaktivnih kontrol razen tega, dokler vi, ee, interakcijo z <details>. Šele takrat bo objavljeno nekaj podobnega seznamu povezav.

Poleg tega je vsebina znotraj zrušena <details> je izključen iz iskanja po strani (razen v brskalnikih Chromium, ki lahko dostopajo do strnjene vsebine v času pisanja), zaradi česar je stvari še težje najti.

Če bi <summary> omogočite interaktivne elemente?

To je vprašanje, postavljeno v ta odprta tema. Ideja je, da bi bilo nekaj takega neveljavno:

<details>
  <summary><a href="...">Link element</a></summary>
</details>

<!-- or -->

<details>
  <summary><input></summary>
</details>

Scott O'Hara lepo povzame zakaj je to problem:

JAWS med navigacijo z virtualnim kazalcem sploh ne odkrije povezave. Če se do elementa povzetka pomaknete prek tipke Tab, JAWS napove »primer besedila, gumb« kot ime in vlogo elementa. Če znova pritisnete tipko Tab, JAWS ponovno napove »primer besedila, gumb«, čeprav je fokus tipkovnice na povezavi.

[...]

O različnih težavah, ki jih imajo različni AT z modelom vsebine za povzetek, bi lahko še našteval ... toda to bi samo razširilo ta komentar čez tisto, kar je potrebno. tldr; model povzetka vsebine ustvarja zelo nedosledne in včasih preprosto zlomljene izkušnje za ljudi, ki uporabljajo AT.

Scott je odprl vstopnice, da bi popravil to vedenje krom in WebKit. Hvala, Scott!

Kljub temu je veljaven HTML:

Sporočilo o uspehu validatorja W3C z oznako podrobnosti.
Več podrobnosti na `podrobnosti`

Scott gre dlje v a ločena blog post. Na primer, pojasnjuje, kako klofuta role=button on <summary> se morda zdi razumen popravek za zagotovitev, da ga podporna tehnika dosledno oznanja. To bi tudi rešilo razpravo o tem, ali <summary> bi moral omogočati interaktivne elemente, ker gumbi ne smejo vsebovati interaktivnih elementov. Edina težava je, da Safari potem zdravi <summary> kot standardni gumb, ki izgubi svojo expanded in collapsed države. Torej, pravilna vloga je napovedana, zdaj pa njeno stanje ni. 🙃

Kam gremo zdaj?

Ali se bojite uporabljati <details>/<summary> z vsemi temi težavami in nedoslednostmi? Zagotovo sem, vendar le toliko, da zagotovim, da tisto, kar je v njem, zagotavlja pravo vrsto izkušenj in pričakovanj za uporabnike.

Vesel sem, da se ti pogovori odvijajo in da potekajo na prostem. Zaradi tega lahko komentirate tri Scottove predlagane rešitve za model vsebine za <summary> je definiran, glasujte za njegove vstopnice in poročajte o svojih težavah in primerih uporabe, ko ste že pri tem. Upajmo, da bolje ko razumemo, kako se elementi uporabljajo in kaj od njih pričakujemo, bolje se izvajajo.

Časovni žig:

Več od Triki CSS