mirror of
https://github.com/tenrok/bootstrap.git
synced 2026-06-17 19:21:23 +03:00
SVG accessibility fixes (#27826)
* SVG accessibility fixes - add `focusable="false"` to all SVGs, to stop IE from including the `<svg>` in its default focus cycle - completely hide decorative SVGs using `aria-hidden="true"` - add `role="img"` to meaningful/"content" SVGs, ensure they have an appropriate `<title>` and/or `aria-label` - simplify placeholder default title * Simplify usage of placeholder.svg in the docs - in most cases, no need for separate/redundant text and title (now that we make text itself part of the alternative text explicitly) - no need (expect in rare cirumstances) to describe the placeholder image (unless the look of the image is important/the actual content, as is the case with the image thumbnail class) * Simplify example.html rewriting of <svg> to <img> code sample - as the `alt` for the placeholder isn't really important, just add an ellipsis instead (otherwise, to be correct, we'd have to construct the whole "title+text" construct like we do now in the placeholder.svg itself * Change svgo configuration to retain role attribute and add/force focusable=false - regarding `focusable=false`, see https://github.com/svg/svgo/issues/1011 (which would be the "proper" SVGO fix) and the (hacky) solution https://github.com/svg/svgo/pull/817
This commit is contained in:
@@ -14,7 +14,7 @@ Below is an example of a single media object. Only two classes are required—th
|
||||
|
||||
{% capture example %}
|
||||
<div class="media">
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0">Media heading</h5>
|
||||
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
|
||||
@@ -38,14 +38,14 @@ Media objects can be infinitely nested, though we suggest you stop at some point
|
||||
|
||||
{% capture example %}
|
||||
<div class="media">
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0">Media heading</h5>
|
||||
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
|
||||
|
||||
<div class="media mt-3">
|
||||
<a class="mr-3" href="#">
|
||||
{% include icons/placeholder.svg width="64" height="64" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" %}
|
||||
</a>
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0">Media heading</h5>
|
||||
@@ -63,7 +63,7 @@ Media in a media object can be aligned with flexbox utilities to the top (defaul
|
||||
|
||||
{% capture example %}
|
||||
<div class="media">
|
||||
{% include icons/placeholder.svg width="64" height="64" class="align-self-start mr-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="align-self-start mr-3" %}
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0">Top-aligned media</h5>
|
||||
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
|
||||
@@ -75,7 +75,7 @@ Media in a media object can be aligned with flexbox utilities to the top (defaul
|
||||
|
||||
{% capture example %}
|
||||
<div class="media">
|
||||
{% include icons/placeholder.svg width="64" height="64" class="align-self-center mr-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="align-self-center mr-3" %}
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0">Center-aligned media</h5>
|
||||
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
|
||||
@@ -87,7 +87,7 @@ Media in a media object can be aligned with flexbox utilities to the top (defaul
|
||||
|
||||
{% capture example %}
|
||||
<div class="media">
|
||||
{% include icons/placeholder.svg width="64" height="64" class="align-self-end mr-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="align-self-end mr-3" %}
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0">Bottom-aligned media</h5>
|
||||
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.</p>
|
||||
@@ -107,7 +107,7 @@ Change the order of content in media objects by modifying the HTML itself, or by
|
||||
<h5 class="mt-0 mb-1">Media object</h5>
|
||||
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
|
||||
</div>
|
||||
{% include icons/placeholder.svg width="64" height="64" class="ml-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="ml-3" %}
|
||||
</div>
|
||||
{% endcapture %}
|
||||
{% include example.html content=example %}
|
||||
@@ -119,21 +119,21 @@ Because the media object has so few structural requirements, you can also use th
|
||||
{% capture example %}
|
||||
<ul class="list-unstyled">
|
||||
<li class="media">
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1">List-based media object</h5>
|
||||
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
|
||||
</div>
|
||||
</li>
|
||||
<li class="media my-4">
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1">List-based media object</h5>
|
||||
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
|
||||
</div>
|
||||
</li>
|
||||
<li class="media">
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" title="Generic placeholder image" %}
|
||||
{% include icons/placeholder.svg width="64" height="64" class="mr-3" %}
|
||||
<div class="media-body">
|
||||
<h5 class="mt-0 mb-1">List-based media object</h5>
|
||||
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in faucibus.
|
||||
|
||||
Reference in New Issue
Block a user