Maggiori dettagli su `dettagli` PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.

Maggiori dettagli su `dettagli`

Un sacco di chiacchiere intorno al vecchio <details> ed <summary> elementi ultimamente! vidi Lea Verou ha recentemente twittato un'osservazione sull'elemento display comportamento e questo si è in qualche modo frammentato in più osservazioni e note di utilizzo da parte della gente, tra cui a discussione ravvivata se <summary> dovrebbe essere consentito contenere o meno elementi interattivi.

Ci sono molti punti da collegare e farò del mio meglio qui per fare esattamente questo.

Possiamo modificare la visualizzazione degli elementi nidificati nel file <details> elemento?

Super strano! Se apriamo DevTools, ce lo dice il foglio di stile dell'agente utente <details> è visualizzato come elemento di blocco.

Maggiori dettagli su `dettagli`

Notare il richiesto <summary> elemento e i due aggiuntivi <div>è lì dentro. Possiamo ignorare il display, destra?

Maggiori dettagli su `dettagli` PlatoBlockchain Data Intelligence. Ricerca verticale. Ai.
Maggiori dettagli su `dettagli`

Quello che potremmo aspettarci è quello <details> ora ha un'altezza esplicita di 40vh e tre righe in cui la terza riga occupa lo spazio rimanente dalle prime due. Come questo:

Apri elemento dettagli con un riepilogo di foo e due elementi figlio, uno giallo e uno blu. L'elemento blu occupa il resto dello spazio lasciato dal sommario e dal primo figlio.
Maggiori dettagli su `dettagli`

Ugh, ma la terza fila non... fa... quello.

Apri elemento dettagli con un riepilogo di foo e due elementi figlio, uno giallo e uno blu. Il riepilogo e i due elementi figlio hanno tutti la stessa altezza.
Maggiori dettagli su `dettagli`

Apparentemente ciò con cui abbiamo a che fare è un contenitore della griglia che non è in grado di applicare il comportamento della griglia ai suoi elementi della griglia. Ma le specifiche HTML ci dicono:

Il details elemento è dovrebbe rendere come a scatola di blocco. L'elemento dovrebbe anche avere un interno albero delle ombre con due slot.

(enfasi mia)

E poco dopo:

Il details il secondo elemento fessura dovrebbe avere il suo style attributo impostato su "display: block; content-visibility: hidden;" quando il details l'elemento non ha un open attributo. Quando ha il open attributo, il style l'attributo dovrebbe essere rimosso dal secondo fessura.

(Enfasi mia, di nuovo)

Quindi, le specifiche dicono il secondo slot, i due aggiuntivi <div>s dall'esempio: vengono forzati a essere elementi di blocco solo quando <details> è chiuso. Quando è aperto - <details open> — dovrebbero essere conformi alla visualizzazione della griglia che sovrascrive lo stile dell'agente utente... giusto?

Questo è il dibattito. Lo capisco slots Sono impostati display: contents per impostazione predefinita,, ma bloccare gli elementi annidati negli slot e rimuovere la possibilità di modellarli sembra fuori luogo. È un problema di specifiche che i contenuti sono slot o un problema di browser che non possiamo ignorare display anche se sono nel bosso? Le persone più intelligenti possono illuminarmi ma sembra un'implementazione errata.

Is <details> un contenitore o un elemento interattivo?

Molte persone lo sono utilizzando <details> per alternare i menu aperto e chiuso. È una pratica reso popolare da GitHub.

DevTools si apre con l'elemento dei dettagli evidenziato in arancione.
Maggiori dettagli su `dettagli`

Sembra ragionevole. La specifica lo consente sicuramente:

Il details elemento rappresenta un widget di informativa da cui l'utente può ottenere informazioni aggiuntive o controlli.

(enfasi mia)

Va bene, quindi potremmo aspettarcelo <details> è il contenitore (ha un implicito role=group) e <summary> è un elemento interattivo che imposta il contenitore open stato. Ha senso da allora <summary> ha un implicito button ruolo in alcuni contesti (ma nessun ruolo WAI-ARIA corrispondente).

Ma Melanie Sumner ha scavato un po' ciò non solo sembra contraddirlo, ma porta alla conclusione che l'uso <details> come menu probabilmente non è la cosa migliore. Guarda cosa succede quando <details> è reso senza il <summary> elemento:

Fa esattamente ciò che le specifiche suggeriscono quando manca a <summary> — fa suo:

Il primo summary elemento figlio dell'elemento, eventualirappresenta il riepilogo o la legenda dei dettagli. Se non c'è bambino summary elemento, lo user agent dovrebbe fornire la propria legenda (es. “Dettagli”).

(enfasi mia)

DevTools si apre con il markup di riepilogo evidenziato in arancione.
Maggiori dettagli su `dettagli`

Melanie lo ha eseguito attraverso un validatore HTML e - sorpresa! — non è valido:

Errore, nei dettagli dell'elemento manca un'istanza richiesta del riepilogo dell'elemento figlio.
Maggiori dettagli su `dettagli`

Così, <details> richiede il <summary>. E quando <summary> manca, <details> crea il proprio, anche se viene inoltrato come markup non valido. È tutto hunky-dory e valido quando <summary> è lì:

Messaggio di successo dal validatore HTML W3C con il markup per un elemento di dettagli e un riepilogo che contiene un elemento di collegamento.
Maggiori dettagli su `dettagli`

Tutto ciò porta a una nuova domanda: perché è <summary> dato un implicito button ruolo quando <details> è quello che sembra essere l'elemento interattivo? Forse questo è un altro caso in cui l'implementazione del browser non è corretta? Poi di nuovo, le specifiche classificano entrambi come elementi interattivi. Puoi vedere quanto tutto ciò diventi completamente confuso.

Ad ogni modo, la conclusione finale di Melanie che dovremmo evitare di usare <details> per i menu si basa su come la tecnologia assistiva legge e annuncia <details> che contengono elementi interattivi. L'elemento viene annunciato, ma non si fa menzione di controlli interattivi oltre a quello fino a quando tu, ehm, interagire con <details>. Solo allora verrà annunciato qualcosa come un elenco di collegamenti.

Inoltre, il contenuto all'interno di un è crollato <details> è escluso dalla ricerca in-page (tranne nei browser Chromium, che possono accedere al contenuto compresso al momento della scrittura), rendendo le cose ancora più difficili da trovare.

Qualora <summary> consentire elementi interattivi?

Questa è la domanda posta in questo thread aperto. L'idea è che qualcosa del genere non sarebbe valido:

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

<!-- or -->

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

Scott O'Hara riassume bene perché questo è un problema:

Il collegamento non è affatto rilevabile da JAWS durante la navigazione con il cursore virtuale. Se si naviga verso l'elemento di riepilogo tramite il tasto Tab, JAWS annuncia "testo di esempio, pulsante" come nome e ruolo dell'elemento. Se si preme nuovamente il tasto Tab, JAWS annuncia di nuovo "testo di esempio, pulsante" anche se lo stato attivo della tastiera è sul collegamento.

[...]

C'è altro che potrei approfondire con i vari problemi che AT diversi hanno con il modello di contenuto per il riepilogo ... ma ciò estenderebbe questo commento oltre ciò che è necessario. tld; il modello di contenuto riepilogativo produce esperienze molto incoerenti e talvolta semplicemente interrotte per le persone che usano AT.

Scott ha aperto i ticket per correggere questo comportamento in cromo ed WebKit. Grazie, Scott!

Eppure, è HTML valido:

Messaggio di successo dal validatore W3C con markup dei dettagli.
Maggiori dettagli su `dettagli`

Scott va oltre in a post del blog separato. Ad esempio, spiega come schiaffeggiare role=button on <summary> potrebbe sembrare una soluzione ragionevole per garantire che sia costantemente annunciato dalla tecnologia assistiva. Ciò risolverebbe anche il dibattito sull'eventualità <summary> dovrebbe consentire elementi interattivi perché i pulsanti non possono contenere elementi interattivi. L'unico problema è che Safari poi tratta <summary> come un pulsante standard, che perde il suo expanded ed collapsed stati. Quindi, viene annunciato il ruolo corretto, ma ora il suo stato non lo è. 🙃

Dove andiamo adesso?

Hai paura di usare <details>/<summary> con tutti questi problemi e incongruenze? Di certo lo sono, ma solo nella misura in cui mi assicuro che ciò che contiene fornisca il giusto tipo di esperienza e aspettative per gli utenti.

Sono solo contento che queste conversazioni stiano avvenendo e che si stiano svolgendo all'aperto. Per questo motivo, puoi commentare le tre soluzioni proposte da Scott per come funziona il modello di contenuto <summary> è definito, vota i suoi biglietti e segnala i tuoi problemi e casi d'uso mentre ci sei. Si spera che meglio comprendiamo come vengono utilizzati gli elementi e cosa ci aspettiamo che facciano, meglio vengono implementati.

Timestamp:

Di più da Trucchi CSS