Üksikasjad PlatoBlockchaini andmeluure kohta. Vertikaalne otsing. Ai.

Üksikasjad 'detailide' kohta

Palju jutuajamist vanade ümber <details> ja <summary> elemendid viimasel ajal! ma nägin Lea Verou säutsus hiljuti tähelepaneku elemendi kohta display käitumist ja seda sorti, mis jagunes inimeste tähelepanekuteks ja kasutusmärkusteks, sealhulgas a elavnenud arutelu kas <summary> peaks olema lubatud sisaldada interaktiivseid elemente või mitte.

Ühendamiseks on palju punkte ja ma annan siin endast parima, et seda täpselt teha.

Kas saame muuta pesastatud elementide kuvamist <details> element?

Super imelik! Kui me DevToolsi lahti murrame, teatab kasutajaagendi stiilitabel meile <details> kuvatakse plokielemendina.

Üksikasjad 'detailide' kohta

Pange tähele nõutavat <summary> element ja kaks täiendavat <div>s seal sees. Saame alistada display, eks?

Üksikasjad PlatoBlockchaini andmeluure kohta. Vertikaalne otsing. Ai.
Üksikasjad 'detailide' kohta

Mida me võime oodata, on see <details> on nüüd selge kõrgusega 40vh ja kolm rida, kus kolmas rida võtab enda alla kahest esimesest järelejäänud ruumi. Nagu nii:

Avage üksikasjade element foo kokkuvõttega ja kahe alamelemendiga, millest üks on kollane ja teine ​​sinine. Sinine element võtab enda alla kokkuvõtte ja esimese lapse ülejäänud ruumi.
Üksikasjad 'detailide' kohta

Oeh, aga kolmas rida ei tee… seda.

Avage üksikasjade element foo kokkuvõttega ja kahe alamelemendiga, millest üks on kollane ja teine ​​sinine. Kokkuvõte ja kaks alamelementi on kõik ühekõrgused.
Üksikasjad 'detailide' kohta

Ilmselt on meil tegemist võrgukonteineriga, mis ei suuda oma ruudustiku üksustele ruudustiku käitumist rakendada. Kuid HTML-i spetsifikatsioon ütleb meile:

details element on eeldatavasti esitatakse kui a plokk kast. Elemendil eeldatakse ka sisemist varjupuu kahega slots.

(Rõhuasetus minu poolt)

Ja veidi hiljem:

details elemendi teine ava eeldatavasti omab style atribuudiks on määratud "display: block; content-visibility: hidden;" kui details elemendil puudub open atribuut. Kui sellel on open atribuut, style Eeldatakse, et atribuut eemaldatakse teisest ava.

(Rõhutan veelkord minu oma)

Niisiis, spetsifikatsioonis on öeldud, et teine ​​pesa - kaks täiendavat <div>s näitest — on ainult sunnitud olema plokkelemendid, kui <details> on suletud. Kui see on avatud - <details open> — need peaksid vastama ruudustiku kuvale, mis alistab kasutajaagendi stiili… eks?

See on arutelu. ma saan sellest aru slots on seadistatud display: contents vaikimisi, kuid pesastatud elementide segamine pesadesse ja nende stiilimisvõimaluse eemaldamine tundub olevat sobimatu. Kas see on spetsifikatsiooniprobleem, et sisu on pesad, või brauseri probleem, mida me ei saa alistada display kuigi nad on pukspuus? Targemad inimesed võivad mind valgustada, kuid see tundub vale teostusena.

Is <details> konteiner või interaktiivne element?

Paljud inimesed on kasutamine <details> menüüde vahetamiseks avatud ja suletud. See on tava populariseeris GitHub.

DevTools avaneb oranžiga esile tõstetud üksikasjade elemendiga.
Üksikasjad 'detailide' kohta

Tundub mõistlik. Spetsifikatsioon lubab seda kindlasti:

details element esindab avalikustamisvidin, millest kasutaja saab lisateavet või juhtnupud.

(Rõhuasetus minu poolt)

Olgu, nii et me võime seda oodata <details> on konteiner (sellel on kaudselt role=group) Ja <summary> on interaktiivne element, mis määrab konteineri open olek. Sellest alates on see mõistlik <summary> on kaudne button roll mõnes kontekstis (kuid puudub vastav WAI-ARIA roll).

Kuid Melanie Sumner kaevas veidi mis mitte ainult ei näi olevat sellega vastuolus, vaid viib järelduseni, et kasutades <details> menüüna pole ilmselt parim asi. Vaata, mis millal juhtub <details> renderdatakse ilma <summary> Element:

See teeb täpselt seda, mida spetsifikatsioon soovitab, kui see puudub a <summary> — see teeb oma:

1. summary element elemendi laps, kui mõniesindab detailide kokkuvõte või legend. Kui last pole summary element, peaks kasutajaagent esitama oma legendi (nt „Üksikasjad”).

(Rõhuasetus minu poolt)

DevTools avaneb oranžiga esile tõstetud kokkuvõtliku märgistusega.
Üksikasjad 'detailide' kohta

Melanie käis selle läbi HTML-i validaatori ja — üllatus! — see on kehtetu:

Viga, elemendi üksikasjadel puudub alamelemendi kokkuvõtte nõutav eksemplar.
Üksikasjad 'detailide' kohta

Niisiis, <details> nõuab <summary>. Ja millal <summary> on kadunud, <details> loob oma, kuigi see edastatakse kehtetu märgistusena. See kõik on äge ja kehtib siis, kui <summary> on seal:

Edusõnum W3C HTML-i validaatorilt koos üksikasjade elemendi märgistusega ja lingielementi sisaldava kokkuvõttega.
Üksikasjad 'detailide' kohta

Kõik see viib uue küsimuseni: miks on <summary> antud kaudselt button rolli, millal <details> on see, mis näib olevat interaktiivne element? Võib-olla on see veel üks juhtum, kus brauseri rakendamine on vale? Jällegi, spetsifikatsioonid liigitavad mõlemad kui interaktiivsed elemendid. Näete, kui segaseks see kõik muutub.

Mõlemal juhul on Melanie lõplik järeldus, mille kasutamist peaksime vältima <details> menüüde jaoks põhineb sellel, kuidas abitehnoloogia loeb ja teatab <details> mis sisaldavad interaktiivseid elemente. Elemendist teatatakse, kuid interaktiivsetest juhtelementidest pole juttugi, kuni te, ee, suhelda koos <details>. Alles siis tehakse teatavaks midagi linkide loendi taolist.

Pealegi varises sisu sees kokku <details> on lehesisesest otsingust välja jäetud (välja arvatud Chromiumi brauserid, mis pääsevad kirjutamise ajal ahendatud sisule juurde), muutes asjade leidmise veelgi keerulisemaks.

Peaks <summary> lubada interaktiivseid elemente?

See on küsimus, mis esitati see avatud teema. Mõte on selles, et midagi sellist oleks kehtetu:

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

<!-- or -->

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

Scott O'Hara võtab ilusti kokku miks see probleem on:

JAWSi link ei ole virtuaalse kursoriga navigeerimisel üldse leitav. Kui navigate tabeldusklahvi kaudu kokkuvõtlikule elemendile, teatab JAWS elemendi nimeks ja rolliks "näidisteksti, nupu". Kui vajutate uuesti tabeldusklahvi, teatab JAWS uuesti „näidistekst, nupp”, kuigi klaviatuuri fookus on lingil.

[...]

Kokkuvõtteks võiksin jätkata erinevate probleemidega, mis erinevatel AT-l on sisumudeliga, kuid see laiendaks seda kommentaari kaugemale sellest, mis on vajalik. tldr; kokkuvõtlik sisumudel tekitab AT-d kasutavatele inimestele väga ebajärjekindlaid ja mõnikord lihtsalt katkendlikke kogemusi.

Scott avas selle käitumise parandamiseks piletid kroom ja WebKit. Aitäh, Scott!

Siiski on see kehtiv HTML:

Eduteade W3C validaatorilt koos üksikasjade märgistusega.
Üksikasjad 'detailide' kohta

Scott läheb kaugemale a Eraldi blogi postitus. Näiteks selgitab ta, kuidas laksu andmine role=button on <summary> võib tunduda mõistlik lahendus tagamaks, et abitehnoloogia teatab sellest järjepidevalt. See lahendaks ka arutelu selle üle, kas <summary> peaks lubama interaktiivseid elemente, sest nupud ei tohi sisaldada interaktiivseid elemente. Ainus probleem on selles, et Safari siis töötleb <summary> tavalise nupuna, mis kaotab oma expanded ja collapsed osariigid. Niisiis, õige roll on välja kuulutatud, kuid nüüd pole selle olek mitte. 🙃

Kuhu me nüüd läheme?

Kas sa kardad kasutada <details>/<summary> kõigi nende probleemide ja ebakõladega? Olen seda kindlasti, kuid ainult niivõrd, et veenduda, et see pakub kasutajatele õiget kogemust ja ootusi.

Mul on lihtsalt hea meel, et need vestlused toimuvad ja et need toimuvad avalikult. Seetõttu saate kommenteerida Scotti kolme pakutud lahendust sisumudeli jaoks <summary> on määratletud, hääletage tema pileteid ja teavitage oma probleemidest ja kasutusjuhtudest, kui olete selle juures. Loodetavasti, mida paremini me mõistame, kuidas elemente kasutatakse ja mida me neilt ootame, seda paremini neid rakendatakse.

Ajatempel:

Veel alates CSSi trikid