Che cos'è solo SR in Bootstrap 3?


748

A cosa serve la classe sr-only? È importante o posso rimuoverlo? Funziona bene senza.

Ecco il mio esempio:

<div class="btn-group">
    <button type="button" class="btn btn-info btn-md">Departments</button>
    <button type="button" class="btn btn-info dropdown-toggle btn-md" data-toggle="dropdown">
    <span class="caret"></span>
    <span class="sr-only">Toggle Dropdown</span>
    </button>
    <ul class="dropdown-menu" role="menu">
        <li><a href="#">Sales</a></li>
        <li><a href="#">Technical</a></li>
        <li class="divider"></li>
        <li><a href="#">Show all</a></li>
    </ul>
</div>

Risposte:


772

Secondo la documentazione di bootstrap , la classe viene utilizzata per nascondere le informazioni destinate solo agli screen reader dal layout della pagina renderizzata.

Gli screen reader avranno problemi con i moduli se non includi un'etichetta per ogni input. Per questi moduli incorporati, puoi nascondere le etichette usando la classe solo .sr.

Ecco un esempio di stile utilizzato:

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  border: 0;
}

È importante o posso rimuoverlo? Funziona bene senza.

È importante, non rimuoverlo.

Dovresti sempre prendere in considerazione gli screen reader a fini di accessibilità. L'uso della classe nasconderà comunque l'elemento, quindi non dovresti vedere una differenza visiva.

Se sei interessato a leggere sull'accessibilità:


12

2
@katranci nell'articolo a cui fai riferimento manca un paio di punti, ad esempio problemi con i contenuti rtl. La risposta qui sembra migliore.
Christophe,

1
@Christophe Consiglierei ancora quell'articolo per capire il concetto. Anche se non spiega i problemi con il contenuto di RTL, elenca diverse tecniche che include ancheclipping
katranci,

9
Per essere onesti, la lingua è molto confusa: the class is used to hide information used for screen readers? Si nasconde dagli screen reader? O semplicemente non viene visualizzato nel browser? È più chiaro se la documentazione dice qualcosa del tipo "la classe solo per sr indica che l'elemento è solo per gli screen reader e non viene visualizzato nel browser".
Stack0verflow,

2
Non penso che sia affatto confuso, dice chiaramente che la classe viene utilizzata per nascondere le informazioni, che devono solo essere visualizzate dagli screen reader.
Lee,

34

Come ha detto JoshC, la classe viene utilizzata per nascondere le informazioni utilizzate per gli screen reader. Ma non solo per nascondere le etichette, potresti considerare di nascondere all'utente vedente un link interno "salta al contenuto principale" che è auspicabile per gli utenti non vedenti se hai una navigazione complessa o annunci prima del contenuto principale.

Se vuoi che il tuo sito interagisca ancora di più con gli screen reader, usa gli attributi ARIA standardizzati W3C e ti consiglio vivamente di visitare il corso online di Google , che richiederà solo fino a 1-2 ore o almeno guardare un video di 40 minuti di Google .

Secondo l'Organizzazione mondiale della sanità, 285 milioni di persone hanno problemi di vista. Quindi rendere accessibile un sito Web è importante.

AGGIORNAMENTO 2019:

Come sviluppatori dovremmo creare contenuti accessibili che funzionino semplicemente per tutti gli screen reader pronti all'uso e non specificamente. Questo non è sempre possibile, ma fai attenzione usando le regolazioni "solo screen reader" e ARIA . Non farlo se non lo capisci completamente. L'implementazione errata potrebbe essere molto peggio che non usarla in alcun modo. Si prega di leggere l' accessibilità-guida-sviluppatore su cattivi esempi di ARIA . Lì troverai anche componenti / widget completamente accessibili che non richiedono alcun intervento "solo screen reader".


5
Altre informazioni dell'OMS : "Si stima che 285 milioni di persone siano ipovedenti in tutto il mondo: 39 milioni sono ciechi e 246 non vedenti. Circa il 90% dei non vedenti del mondo vive in contesti a basso reddito. L'82% delle persone che vivono con la cecità sono dai 50 anni in su. "
Cato Minor,

29

L'ho trovato nell'esempio della barra di navigazione e l'ho semplificato.

<ul class="nav">
  <li><a>Default</a></li>
  <li><a>Static top</a></li>
  <li><b><a>Fixed top <span class="sr-only">(current)</span></a></b></li>
</ul>

Vedi quale è selezionato ( sr-onlyparte nascosta):

  • Predefinito
  • Top statico
  • Parte superiore fissa

Si sente quale è selezionato se si utilizza l'utilità per la lettura dello schermo:

  • Predefinito
  • Top statico
  • Parte superiore fissa (corrente)

Come risultato di questa tecnica i non vedenti dovrebbero navigare più facilmente sul tuo sito web.


3
Come un cieco legge quel testo attuale? Esiste un tipo speciale di schermo disponibile per loro?
Santosh,

6
Usano uno screen reader, come menzionato in questa risposta. È un programma che legge il contenuto dello schermo, quindi " Senti quale è selezionato se usi l'utilità per la lettura dello schermo :".
IronSean,

È possibile utilizzare l'estensione Chrome ChromeVox per ottenere l'esperienza dello screen reader. È così semplice
Hrvoje Golcic,

12

.sr-onlyè un nome di classe specificamente utilizzato per gli screen reader. Puoi usare qualsiasi nome di classe, ma .sr-onlyè abbastanza comunemente usato. Se non ti interessa sviluppare tenendo conto della conformità, è possibile rimuoverlo. Non avrà alcun effetto sull'interfaccia utente se rimossa perché il CSS per questa classe non è visibile ai browser desktop e dei dispositivi mobili.

Sembra che ci siano alcune informazioni mancanti qui sull'uso di .sr-onlyspiegare il suo scopo ed essere per gli screen reader. Innanzitutto, è molto importante tenere sempre presente gli utenti con difficoltà. La perdita di valore è lo scopo della conformità 508: https://www.section508.gov/ , ed è bello che bootstrap ne tenga conto. Tuttavia, l'uso di .sr-onlynon è tutto ciò che deve essere preso in considerazione per la conformità 508. Hai l'uso del colore, la dimensione dei caratteri, l'accessibilità tramite la navigazione, i descrittori, l'uso di aria e molto altro ancora.

Ma per quanto riguarda .sr-only: cosa fa effettivamente il CSS? Esistono diverse varianti leggermente diverse del CSS utilizzato per .sr-only. Uno dei pochi che uso è di seguito:

.sr-only {
    position: absolute;
    margin: -1px 0 0 -1px;
    padding: 0;
    display: block;
    width: 1px;
    height: 1px;
    font-size: 1px;
    line-height: 1px;
    overflow: hidden;
    clip: rect(0,0,0,0);
    border: 0;
    outline: 0;
    }

Il CSS di cui sopra nasconde i contenuti nei browser desktop e mobili inclusi in questa classe, ma è visto da uno screen reader come JAWS: http://www.freedomscientific.com/Products/Blindness/JAWS . Esempio di markup è il seguente:

<a href="#" target="_blank">
    Click to Open Site
    <span class="sr-only">This is an external link</span>
</a>

Inoltre, se un elemento DOM ha una larghezza e un'altezza di 0, l'elemento non viene visto dal DOM. Questo è il motivo per cui utilizza il CSS sopra width: 1px; height: 1px;. Usando display: nonee impostando il tuo CSS su height: 0e width: 0, l'elemento non viene visto dal DOM ed è quindi problematico. L'uso dei CSS di cui sopra width: 1px; height: 1px;non è tutto ciò che fai per rendere il contenuto invisibile ai browser desktop e mobili (senza overflow: hidden, il tuo contenuto verrebbe comunque visualizzato sullo schermo) e visibile agli screen reader. Nascondere il contenuto dal browser desktop e mobile viene fatto aggiungendo un offset da width: 1pxe height: 1pxprecedentemente menzionato usando:

position: absolute;
margin: -1px 0 0 -1px; 
overflow: hidden;

Infine, per avere un'ottima idea di ciò che uno screen reader vede e inoltra al suo utente danneggiato, disattiva lo stile di pagina per il tuo browser. Per Firefox, puoi farlo andando a:

View > Page Style > No Style

Spero che le informazioni che ho fornito qui siano di ulteriore utilità per qualcuno oltre alle altre risposte.


7

Assicura che l'oggetto venga visualizzato (o dovrebbe essere) solo ai lettori e dispositivi simili. Dà più senso al contesto con altri elementi con l' attributo aria-hidden = "true" .

<div class="alert alert-danger" role="alert">
  <span class="glyphicon glyphicon-exclamation-sign" aria-hidden="true"></span>
  <span class="sr-only">Error:</span>
  Enter a valid email address
</div>

Glyphicon verrà visualizzato su tutti gli altri dispositivi, la parola Errore: sui lettori di testo.


1
La mia impressione è che aria-label = "Error" farebbe la stessa cosa ma sarebbe più semplice?
Kevin,

6

La .sr-onlyclasse nasconde un elemento a tutti i dispositivi trannescreen readers:

Vai al contenuto principale Combina .sr-only con .sr-only-focusable per mostrare di nuovo l'elemento quando è focalizzato

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.