• adamjacobbecker's avatar
    Improve accessibility (Section 508, WCAG) · a8d95d47
    adamjacobbecker authored
    This PR significantly improves Bootstrap's accessibility for users of assistive technology, such as screen readers. Some of the these changes add additional markup to the source examples, but we believe that the sacrifice in readability is worth achieving more widespread usage of accessibility best-practices.
    
    What was done
    - Added lots of [WAI-ARIA attributes](http://www.w3.org/WAI/intro/aria)
    - Added `.sr-only` helper class, that is only readable by screen readers (and invisible for all other users). This lets us - make progress bars and paginations accessible to screen reading users.
    - Advised users to always use label elements. For inline forms, they can hide them with `.sr-only`
    - Added 'Skip navigation' link
    - Added "Accessibility" section to getting-started.html.
    
    What *wasn't* done
    - Contrast issues (twbs#3572)
    - Tooltips (twbs#8469)
    - Documentation re: usage of icons, since they now live in a separate repo
    
    Major props to all that contributed: @bensheldon...
    a8d95d47
variables.less 17.31 KiB
//
// Variables
// --------------------------------------------------
// Global values
// --------------------------------------------------
// Grays
// -------------------------
@gray-darker:            lighten(#000, 13.5%); // #222
@gray-dark:              lighten(#000, 20%);   // #333
@gray:                   lighten(#000, 33.5%); // #555
@gray-light:             lighten(#000, 60%);   // #999
@gray-lighter:           lighten(#000, 93.5%); // #eee
// Brand colors
// -------------------------
@brand-primary:         #428bca;
@brand-success:         #5cb85c;
@brand-warning:         #f0ad4e;
@brand-danger:          #d9534f;
@brand-info:            #5bc0de;
// Scaffolding
// -------------------------
@body-bg:               #fff;
@text-color:            @gray-dark;
// Links
// -------------------------
@link-color:            @brand-primary;
@link-hover-color:      darken(@link-color, 15%);
// Typography
// -------------------------
@font-family-sans-serif:  "Helvetica Neue", Helvetica, Arial, sans-serif;
@font-family-serif:       Georgia, "Times New Roman", Times, serif;
@font-family-monospace:   Monaco, Menlo, Consolas, "Courier New", monospace;
@font-family-base:        @font-family-sans-serif;
@font-size-base:          14px;
@font-size-large:         ceil(@font-size-base * 1.25); // ~18px
@font-size-small:         ceil(@font-size-base * 0.85); // ~12px
@line-height-base:        1.428571429; // 20/14
@line-height-computed:    floor(@font-size-base * @line-height-base); // ~20px
@headings-font-family:    @font-family-base;
@headings-font-weight:    500;
@headings-line-height:    1.1;
// Components
// -------------------------
// Based on 14px font-size and 1.428 line-height (~20px to start)
@padding-base-vertical:          6px;
@padding-base-horizontal:        12px;
@padding-large-vertical:         10px;
@padding-large-horizontal:       16px;
@padding-small-vertical:         5px;
@padding-small-horizontal:       10px;
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
@line-height-large: 1.33; @line-height-small: 1.5; @border-radius-base: 4px; @border-radius-large: 6px; @border-radius-small: 3px; @component-active-bg: @brand-primary; @caret-width-base: 4px; @caret-width-large: 5px; // Tables // ------------------------- @table-cell-padding: 8px; @table-condensed-cell-padding: 5px; @table-bg: transparent; // overall background-color @table-bg-accent: #f9f9f9; // for striping @table-bg-hover: #f5f5f5; @table-bg-active: @table-bg-hover; @table-border-color: #ddd; // table and cell border // Buttons // ------------------------- @btn-font-weight: bold; @btn-default-color: #333; @btn-default-bg: #fff; @btn-default-border: #ccc; @btn-primary-color: #fff; @btn-primary-bg: @brand-primary; @btn-primary-border: darken(@btn-primary-bg, 5%); @btn-success-color: #fff; @btn-success-bg: @brand-success; @btn-success-border: darken(@btn-success-bg, 5%); @btn-warning-color: #fff; @btn-warning-bg: @brand-warning; @btn-warning-border: darken(@btn-warning-bg, 5%); @btn-danger-color: #fff; @btn-danger-bg: @brand-danger; @btn-danger-border: darken(@btn-danger-bg, 5%); @btn-info-color: #fff; @btn-info-bg: @brand-info; @btn-info-border: darken(@btn-info-bg, 5%); @btn-link-disabled-color: @gray-light; // Forms // ------------------------- @input-bg: #fff; @input-bg-disabled: @gray-lighter; @input-border: #ccc; @input-border-radius: @border-radius-base; @input-border-focus: #66afe9; @input-color-placeholder: @gray-light;
141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
@input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); @input-height-large: (floor(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2); @input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2); @legend-border-color: #e5e5e5; @input-group-addon-border-color: @input-border; // Dropdowns // ------------------------- @dropdown-bg: #fff; @dropdown-border: rgba(0,0,0,.15); @dropdown-fallback-border: #ccc; @dropdown-divider-bg: #e5e5e5; @dropdown-link-active-color: #fff; @dropdown-link-active-bg: @component-active-bg; @dropdown-link-color: @gray-dark; @dropdown-link-hover-color: #fff; @dropdown-link-hover-bg: @dropdown-link-active-bg; @dropdown-link-disabled-color: @gray-light; @dropdown-header-color: @gray-light; @dropdown-caret-color: #000; // COMPONENT VARIABLES // -------------------------------------------------- // Z-index master list // ------------------------- // Used for a bird's eye view of components dependent on the z-axis // Try to avoid customizing these :) @zindex-dropdown: 1000; @zindex-popover: 1010; @zindex-tooltip: 1030; @zindex-navbar-fixed: 1030; @zindex-modal-background: 1040; @zindex-modal: 1050; // Media queries breakpoints // -------------------------------------------------- // Extra small screen / phone @screen-xsmall: 480px; @screen-phone: @screen-xsmall; // Small screen / tablet @screen-small: 768px; @screen-tablet: @screen-small; // Medium screen / desktop @screen-medium: 992px; @screen-desktop: @screen-medium; // Large screen / wide desktop @screen-large: 1200px; @screen-large-desktop: @screen-large; // So media queries don't overlap when required, provide a maximum @screen-small-max: (@screen-medium - 1); @screen-tablet-max: (@screen-desktop - 1); @screen-desktop-max: (@screen-large-desktop - 1);
211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280
// Grid system // -------------------------------------------------- // Number of columns in the grid system @grid-columns: 12; // Padding, to be divided by two and applied to the left and right of all columns @grid-gutter-width: 30px; // Point at which the navbar stops collapsing @grid-float-breakpoint: @screen-tablet; // Navbar // ------------------------- // Basics of a navbar @navbar-height: 50px; @navbar-color: #777; @navbar-bg: #eee; @navbar-border-radius: @border-radius-base; @navbar-padding-horizontal: floor(@grid-gutter-width / 2); @navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2); // Navbar links @navbar-link-color: #777; @navbar-link-hover-color: #333; @navbar-link-hover-bg: transparent; @navbar-link-active-color: #555; @navbar-link-active-bg: darken(@navbar-bg, 10%); @navbar-link-disabled-color: #ccc; @navbar-link-disabled-bg: transparent; // Navbar brand label @navbar-brand-color: @navbar-link-color; @navbar-brand-hover-color: darken(@navbar-link-color, 10%); @navbar-brand-hover-bg: transparent; // Navbar toggle @navbar-toggle-hover-bg: #ddd; @navbar-toggle-icon-bar-bg: #ccc; @navbar-toggle-border-color: #ddd; // Inverted navbar // // Reset inverted navbar basics @navbar-inverse-color: @gray-light; @navbar-inverse-bg: #222; // Inverted navbar links @navbar-inverse-link-color: @gray-light; @navbar-inverse-link-hover-color: #fff; @navbar-inverse-link-hover-bg: transparent; @navbar-inverse-link-active-color: @navbar-inverse-link-hover-color; @navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%); @navbar-inverse-link-disabled-color: #444; @navbar-inverse-link-disabled-bg: transparent; // Inverted navbar brand label @navbar-inverse-brand-color: @navbar-inverse-link-color; @navbar-inverse-brand-hover-color: #fff; @navbar-inverse-brand-hover-bg: transparent; // Inverted navbar search // Normal navbar needs no special styles or vars @navbar-inverse-search-bg: lighten(@navbar-inverse-bg, 25%); @navbar-inverse-search-bg-focus: #fff; @navbar-inverse-search-border: @navbar-inverse-bg; @navbar-inverse-search-placeholder-color: #ccc;
281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350
// Inverted navbar toggle @navbar-inverse-toggle-hover-bg: #333; @navbar-inverse-toggle-icon-bar-bg: #fff; @navbar-inverse-toggle-border-color: #333; // Navs // ------------------------- @nav-link-hover-bg: @gray-lighter; @nav-disabled-link-color: @gray-light; @nav-disabled-link-hover-color: @gray-light; @nav-open-link-hover-color: #fff; @nav-open-caret-border-color: #fff; // Tabs @nav-tabs-border-color: #ddd; @nav-tabs-link-hover-border-color: @gray-lighter; @nav-tabs-active-link-hover-bg: @body-bg; @nav-tabs-active-link-hover-color: @gray; @nav-tabs-active-link-hover-border-color: #ddd; @nav-tabs-justified-link-border-color: #ddd; @nav-tabs-justified-active-link-border-color: @body-bg; // Pills @nav-pills-active-link-hover-bg: @component-active-bg; @nav-pills-active-link-hover-color: #fff; // Pagination // ------------------------- @pagination-bg: #fff; @pagination-border: #ddd; @pagination-active-bg: #f5f5f5; @pagination-active-color: @gray-light; @pagination-disabled-color: @gray-light; // Pager // ------------------------- @pager-border-radius: 15px; @pager-disabled-color: @gray-light; // Jumbotron // ------------------------- @jumbotron-bg: @gray-lighter; @jumbotron-heading-color: inherit; @jumbotron-lead-color: inherit; // Form states and alerts // ------------------------- @state-warning-text: #c09853; @state-warning-bg: #fcf8e3; @state-warning-border: darken(spin(@state-warning-bg, -10), 3%); @state-danger-text: #b94a48; @state-danger-bg: #f2dede; @state-danger-border: darken(spin(@state-danger-bg, -10), 3%);
351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
@state-success-text: #468847; @state-success-bg: #dff0d8; @state-success-border: darken(spin(@state-success-bg, -10), 5%); @state-info-text: #3a87ad; @state-info-bg: #d9edf7; @state-info-border: darken(spin(@state-info-bg, -10), 7%); // Tooltips // ------------------------- @tooltip-max-width: 200px; @tooltip-color: #fff; @tooltip-bg: #000; @tooltip-arrow-width: 5px; @tooltip-arrow-color: @tooltip-bg; // Popovers // ------------------------- @popover-bg: #fff; @popover-max-width: 276px; @popover-border-color: rgba(0,0,0,.2); @popover-fallback-border-color: #ccc; @popover-title-bg: darken(@popover-bg, 3%); @popover-arrow-width: 10px; @popover-arrow-color: #fff; @popover-arrow-outer-width: (@popover-arrow-width + 1); @popover-arrow-outer-color: rgba(0,0,0,.25); @popover-arrow-outer-fallback-color: #999; // Labels // ------------------------- @label-default-bg: @gray-light; @label-success-bg: @brand-success; @label-info-bg: @brand-info; @label-warning-bg: @brand-warning; @label-danger-bg: @brand-danger; @label-color: #fff; @label-link-hover-color: #fff; // Modals // ------------------------- @modal-inner-padding: 20px; @modal-title-padding: 15px; @modal-title-line-height: @line-height-base; @modal-content-bg: #fff; @modal-content-border-color: rgba(0,0,0,.2); @modal-content-fallback-border-color: #999; @modal-backdrop-bg: #000; @modal-header-border-color: #e5e5e5; @modal-footer-border-color: @modal-header-border-color; // Alerts // ------------------------- @alert-padding: 15px; @alert-border-radius: @border-radius-base; @alert-link-font-weight: bold;
421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490
@alert-bg: @state-warning-bg; @alert-text: @state-warning-text; @alert-border: @state-warning-border; @alert-success-bg: @state-success-bg; @alert-success-text: @state-success-text; @alert-success-border: @state-success-border; @alert-danger-bg: @state-danger-bg; @alert-danger-text: @state-danger-text; @alert-danger-border: @state-danger-border; @alert-info-bg: @state-info-bg; @alert-info-text: @state-info-text; @alert-info-border: @state-info-border; // Progress bars // ------------------------- @progress-bg: #f5f5f5; @progress-bar-color: #fff; @progress-bar-bg: @brand-primary; @progress-bar-success-bg: @brand-success; @progress-bar-warning-bg: @brand-warning; @progress-bar-danger-bg: @brand-danger; @progress-bar-info-bg: @brand-info; // List group // ------------------------- @list-group-bg: #fff; @list-group-border: #ddd; @list-group-border-radius: @border-radius-base; @list-group-hover-bg: #f5f5f5; @list-group-active-color: #fff; @list-group-active-bg: @component-active-bg; @list-group-active-border: @list-group-active-bg; @list-group-link-color: #555; @list-group-link-heading-color: #333; // Panels // ------------------------- @panel-bg: #fff; @panel-border: #ddd; @panel-border-radius: @border-radius-base; @panel-heading-bg: #f5f5f5; @panel-footer-bg: #f5f5f5; @panel-primary-text: #fff; @panel-primary-border: @brand-primary; @panel-primary-heading-bg: @brand-primary; @panel-success-text: @state-success-text; @panel-success-border: @state-success-border; @panel-success-heading-bg: @state-success-bg; @panel-warning-text: @state-warning-text; @panel-warning-border: @state-warning-border; @panel-warning-heading-bg: @state-warning-bg; @panel-danger-text: @state-danger-text; @panel-danger-border: @state-danger-border; @panel-danger-heading-bg: @state-danger-bg; @panel-info-text: @state-info-text;
491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560
@panel-info-border: @state-info-border; @panel-info-heading-bg: @state-info-bg; // Thumbnails // ------------------------- @thumbnail-caption-color: @text-color; @thumbnail-bg: @body-bg; @thumbnail-border: #ddd; @thumbnail-border-radius: @border-radius-base; // Wells // ------------------------- @well-bg: #f5f5f5; // Accordion // ------------------------- @accordion-border-color: #e5e5e5; // Badges // ------------------------- @badge-color: #fff; @badge-link-hover-color: #fff; @badge-bg: @gray-light; @badge-active-color: @link-color; @badge-active-bg: #fff; @badge-font-weight: bold; @badge-line-height: 1; @badge-border-radius: 10px; // Breadcrumbs // ------------------------- @breadcrumb-bg: #f5f5f5; @breadcrumb-color: #ccc; @breadcrumb-active-color: @gray-light; // Carousel // ------------------------ @carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6); @carousel-control-color: #fff; @carousel-control-width: 15%; @carousel-control-opacity: .5; @carousel-control-font-size: 20px; @carousel-indicator-active-bg: #fff; @carousel-indicator-border-color: #fff; @carousel-caption-color: #fff; // Close // ------------------------ @close-color: #000; @close-font-weight: bold; @close-text-shadow: 0 1px 0 #fff; // Code // ------------------------ @code-color: #c7254e; @code-bg: #f9f2f4;
561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597
@pre-bg: #f5f5f5; @pre-color: @gray-dark; @pre-border-color: #ccc; @pre-scrollable-max-height: 340px; // Type // ------------------------ @text-muted: @gray-light; @abbr-border-color: @gray-light; @headings-small-color: @gray-light; @blockquote-small-color: @gray-light; @blockquote-border-color: @gray-lighter; @page-header-border-color: @gray-lighter; // Miscellaneous // ------------------------- // Hr border color @hr-border: @gray-lighter; // Horizontal forms & lists @component-offset-horizontal: 180px; // Container sizes // -------------------------------------------------- // Small screen / tablet @container-tablet: 728px; // Medium screen / desktop @container-desktop: 940px; // Large screen / wide desktop @container-large-desktop: 1170px;