Improves a11y of password protected video form

According to the WCAG success criterias 1.3.1 (Info and relationships),
3.3.2 (Labels or Instructions) and 4.1.2 (Name, Role, Value), labels
or instructions are required when content requires user input.

To do so, this commit adds a label for the password input and hide it
with a CSS visually-hidden method to not alter the design.

Resources:
- https://www.w3.org/TR/WCAG21/#labels-or-instructions
- https://www.w3.org/TR/WCAG21/#info-and-relationships
- https://www.w3.org/TR/WCAG21/#name-role-value
- https://www.w3.org/TR/WCAG20-TECHS/H44.html
- https://www.w3.org/WAI/WCAG21/Understanding/labels-or-instructions.html
- https://gomakethings.com/hidden-content-for-better-a11y/
This commit is contained in:
Damien Senger 2019-04-13 13:11:09 +02:00
parent 726e9bf5c1
commit ce07a621e5
No known key found for this signature in database
GPG key ID: A718C115E3DFF8B7
2 changed files with 450 additions and 447 deletions

View file

@ -1,128 +1,120 @@
body {
background-color: #EBEBEB;
background-image:url('../img/fond.jpg');
font-family: 'Open Sans', sans-serif;
font-weight:400;
text-align:center;
background-color: #ebebeb;
background-image: url("../img/fond.jpg");
font-family: "Open Sans", sans-serif;
font-weight: 400;
text-align: center;
}
/* Header */
header {
padding:0;
position:absolute;
text-align:right;
top:0;
width:100%;
padding: 0;
position: absolute;
text-align: right;
top: 0;
width: 100%;
}
.social {
padding-right:21px;
padding-right: 21px;
}
header .social a {
background-position:0 0;
background-repeat:no-repeat;
float:right;
height:38px;
margin-left:13px;
margin-right:0;
margin-top:13px;
overflow:hidden;
position:relative;
background-position: 0 0;
background-repeat: no-repeat;
float: right;
height: 38px;
margin-left: 13px;
margin-right: 0;
margin-top: 13px;
overflow: hidden;
position: relative;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
width:38px;
width: 38px;
}
header a:focus,
header a:hover {
background-position:0 100%;
outline:none;
background-position: 0 100%;
outline: none;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
}
.share {
background-image:url('../img/share.png');
background-image: url("../img/share.png");
}
.sharemask {
background-image:url('../img/sharemask.png');
background-position:top left;
background-repeat:no-repeat;
height:38px;
left:0;
position:absolute;
top:0;
width:38px;
z-index:10;
background-image: url("../img/sharemask.png");
background-position: top left;
background-repeat: no-repeat;
height: 38px;
left: 0;
position: absolute;
top: 0;
width: 38px;
z-index: 10;
}
.facebook {
background-image:url('../img/facebook.png');
background-image: url("../img/facebook.png");
}
.facebookmask {
background-image:url('../img/facebookmask.png');
background-position:top left;
background-repeat:no-repeat;
height:38px;
left:0;
position:absolute;
top:0;
width:38px;
z-index:10;
background-image: url("../img/facebookmask.png");
background-position: top left;
background-repeat: no-repeat;
height: 38px;
left: 0;
position: absolute;
top: 0;
width: 38px;
z-index: 10;
}
.twitter {
background-image:url('../img/twitter.png');
background-image: url("../img/twitter.png");
}
.twittermask {
background-image:url('../img/twittermask.png');
background-position:top left;
background-repeat:no-repeat;
height:38px;
left:0;
position:absolute;
top:0;
width:38px;
z-index:10;
background-image: url("../img/twittermask.png");
background-position: top left;
background-repeat: no-repeat;
height: 38px;
left: 0;
position: absolute;
top: 0;
width: 38px;
z-index: 10;
}
/* Footer */
footer {
background-image:url('../img/fondfooter.png');
background-position:top left;
background-repeat:repeat-x;
bottom:0;
color:#adadad;
padding-top:20px;
position:fixed;
text-align:center;
width:100%;
z-index:11;
background-image: url("../img/fondfooter.png");
background-position: top left;
background-repeat: repeat-x;
bottom: 0;
color: #adadad;
padding-top: 20px;
position: fixed;
text-align: center;
width: 100%;
z-index: 11;
}
.footer_wrapper {
height:28px;
height: 28px;
}
footer a{
color:#adadad;
text-decoration:none;
footer a {
color: #adadad;
text-decoration: none;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
@ -130,47 +122,42 @@ footer a{
footer a:focus,
footer a:hover {
color:#f2084a;
outline:none;
color: #f2084a;
outline: none;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
}
/* Home content */
.logo {
padding-bottom:55px;
padding-bottom: 55px;
}
.labelurl {
color:#3f3f3f;
font-size:19px;
position:relative;
color: #3f3f3f;
font-size: 19px;
position: relative;
}
.champs {
margin-bottom:70px;
margin-top:8px;
position:relative;
margin-bottom: 70px;
margin-top: 8px;
position: relative;
}
.downloadBtn {
background-color:#3A3A3A;
background-color: #3a3a3a;
border: 3px solid #a5a5a5;
border-radius:10px;
color:#dedede;
cursor:pointer;
display:inline-block;
font-weight:800;
border-radius: 10px;
color: #dedede;
cursor: pointer;
display: inline-block;
font-weight: 800;
padding: 12px 14px;
position:relative;
text-decoration:none;
position: relative;
text-decoration: none;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
@ -178,63 +165,62 @@ footer a:hover {
.downloadBtn:focus,
.downloadBtn:hover {
background-color:#f2084a;
outline:none;
background-color: #f2084a;
outline: none;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
}
.downloadBtn::-moz-focus-inner {
border:none;
border: none;
}
.URLinput{
background-color:#fff;
.URLinput {
background-color: #fff;
border: 3px solid #a5a5a5;
border-radius:10px;
color:#3F3F3F;
font-weight:800;
margin-right:8px;
min-width:426px;
border-radius: 10px;
color: #3f3f3f;
font-weight: 800;
margin-right: 8px;
min-width: 426px;
padding: 12px 12px 12px 12px;
position:relative;
position: relative;
}
.URLinput:focus {
border-color:#3A3A3A;
border-color: #3a3a3a;
outline: none;
}
.URLinput:-webkit-input-placeholder{
color:#c1cfcf;
.URLinput:-webkit-input-placeholder {
color: #c1cfcf;
}
.URLinput:-moz-placeholder {
color:#c1cfcf;
color: #c1cfcf;
}
.combatiblelink {
background-image:url('../img/compatiblerouage.png');
background-position:0 100%;
background-repeat:no-repeat;
color:#a5a5a5;
padding-bottom:10px;
padding-left:41px;
padding-top:10px;
position:relative;
text-decoration:none;
background-image: url("../img/compatiblerouage.png");
background-position: 0 100%;
background-repeat: no-repeat;
color: #a5a5a5;
padding-bottom: 10px;
padding-left: 41px;
padding-top: 10px;
position: relative;
text-decoration: none;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
z-index:10;
z-index: 10;
}
.combatiblelink:focus,
.combatiblelink:hover {
background-position:0 0;
color:#f2084a;
outline:none;
background-position: 0 0;
color: #f2084a;
outline: none;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
@ -242,26 +228,26 @@ footer a:hover {
.bookmarklet {
border: 2px dotted;
color:gray;
padding:10px 30px;
position:relative;
text-decoration:none;
z-index:10;
color: gray;
padding: 10px 30px;
position: relative;
text-decoration: none;
z-index: 10;
}
.mp3 {
background-color:#cecece;
border-radius:6px;
color:#3f3f3f;
height:26px;
margin-top:12px;
position:relative;
text-align:left;
width:622px;
background-color: #cecece;
border-radius: 6px;
color: #3f3f3f;
height: 26px;
margin-top: 12px;
position: relative;
text-align: left;
width: 622px;
}
.mp3-inner {
padding:3px;
padding: 3px;
}
.audio:not(:checked),
@ -272,7 +258,7 @@ footer a:hover {
.audio:not(:checked) + label,
.audio:checked + label {
cursor: pointer;
line-height:20px;
line-height: 20px;
padding-left: 82px;
position: relative;
}
@ -280,7 +266,7 @@ footer a:hover {
.audio:checked + label:before,
.audio:not(:checked) + label:after,
.audio:checked + label:after {
content: '';
content: "";
position: absolute;
}
.audio:not(:checked) + label:before,
@ -288,13 +274,13 @@ footer a:hover {
background: #ffffff;
border-radius: 6px;
height: 20px;
left:0;
left: 0;
top: -1px;
-webkit-transition: background-color .2s;
-moz-transition: background-color .2s;
-ms-transition: background-color .2s;
-o-transition: background-color .2s;
transition: background-color .2s;
-webkit-transition: background-color 0.2s;
-moz-transition: background-color 0.2s;
-ms-transition: background-color 0.2s;
-o-transition: background-color 0.2s;
transition: background-color 0.2s;
width: 45px;
}
.audio:not(:checked) + label:after,
@ -304,21 +290,21 @@ footer a:hover {
height: 16px;
left: 2px;
top: 1px;
-webkit-transition: all .2s;
-moz-transition: all .2s;
-ms-transition: all .2s;
-o-transition: all .2s;
transition: all .2s;
-webkit-transition: all 0.2s;
-moz-transition: all 0.2s;
-ms-transition: all 0.2s;
-o-transition: all 0.2s;
transition: all 0.2s;
width: 16px;
}
.audio:focus + label {
color:black;
color: black;
}
/* on checked */
.audio:checked + label:before {
background:#f2084a;
background: #f2084a;
}
.audio:checked + label:after {
background: #fff;
@ -332,44 +318,44 @@ footer a:hover {
border-radius: 15px;
font-size: 11px;
font-weight: bold;
height:20px;
height: 20px;
left: 3px;
line-height: 17px;
position: absolute;
-webkit-transition: all .2s;
-moz-transition: all .2s;
-ms-transition: all .2s;
-o-transition: all .2s;
transition: all .2s;
-webkit-transition: all 0.2s;
-moz-transition: all 0.2s;
-ms-transition: all 0.2s;
-o-transition: all 0.2s;
transition: all 0.2s;
width: 45px;
}
.audio:not(:checked) + label .ui:before {
background-image:url('../img/mp3hover.png');
background-position:right top;
background-repeat:no-repeat;
background-image: url("../img/mp3hover.png");
background-position: right top;
background-repeat: no-repeat;
content: "no";
left: 0;
min-width:56px;
padding-left:23px;
padding-top:2px;
-webkit-transition: all .2s;
-moz-transition: all .2s;
-ms-transition: all .2s;
-o-transition: all .2s;
transition: all .2s;
min-width: 56px;
padding-left: 23px;
padding-top: 2px;
-webkit-transition: all 0.2s;
-moz-transition: all 0.2s;
-ms-transition: all 0.2s;
-o-transition: all 0.2s;
transition: all 0.2s;
}
.audio:checked + label .ui:after {
background-image:url('../img/mp3.png');
background-position:right top;
background-repeat:no-repeat;
background-image: url("../img/mp3.png");
background-position: right top;
background-repeat: no-repeat;
color: #fff;
content: "yes";
-webkit-transition: all .2s;
-moz-transition: all .2s;
-ms-transition: all .2s;
-o-transition: all .2s;
transition: all .2s;
width:73px;
-webkit-transition: all 0.2s;
-moz-transition: all 0.2s;
-ms-transition: all 0.2s;
-o-transition: all 0.2s;
transition: all 0.2s;
width: 73px;
}
.seekOptions {
@ -382,7 +368,6 @@ footer a:hover {
display: block;
}
/* Playlists */
.playlist-entry .thumb {
float: left;
@ -413,126 +398,120 @@ footer a:hover {
font-size: 16px;
}
/* Supported websites list */
.logobis {
height:107px;
margin:0 auto 10px auto;
position:relative;
width:447px;
height: 107px;
margin: 0 auto 10px auto;
position: relative;
width: 447px;
}
.logocompatible {
background-image:url('../img/logocompatible.png');
background-position:0 0;
background-repeat:repeat-y;
display:block;
height:107px;
background-image: url("../img/logocompatible.png");
background-position: 0 0;
background-repeat: repeat-y;
display: block;
height: 107px;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
width:447px;
width: 447px;
}
.logocompatible:focus,
.logocompatible:hover {
background-position:0 100%;
outline:none;
background-position: 0 100%;
outline: none;
-webkit-transition: all 0.1s ease-in;
-moz-transition: all 0.1s ease-in;
-o-transition: all 0.1s ease-in;
}
.logocompatiblemask {
background-image:url('../img/logocompatiblemask.png');
background-position:0 100%;
background-repeat:no-repeat;
height:107px;
left:0;
position:absolute;
top:0;
width:447px;
z-index:10;
background-image: url("../img/logocompatiblemask.png");
background-position: 0 100%;
background-repeat: no-repeat;
height: 107px;
left: 0;
position: absolute;
top: 0;
width: 447px;
z-index: 10;
}
.titre {
color:#383838;
font-family: 'Open Sans', sans-serif;
font-size:48px;
font-weight:300;
color: #383838;
font-family: "Open Sans", sans-serif;
font-size: 48px;
font-weight: 300;
}
.tripleliste {
margin-left:auto;
margin-right:auto;
margin-top:80px;
position:relative;
width:800px;
margin-left: auto;
margin-right: auto;
margin-top: 80px;
position: relative;
width: 800px;
}
.tripleliste ul {
margin-bottom:1em;
margin-left:120px;
width:600px;
margin-bottom: 1em;
margin-left: 120px;
width: 600px;
}
.tripleliste ul li {
color:#383838;
float:left;
list-style-type:none;
position:relative;
text-align:left;
width:200px;
color: #383838;
float: left;
list-style-type: none;
position: relative;
text-align: left;
width: 200px;
}
html,
body {
height:100%;
margin:0;
height: 100%;
margin: 0;
}
.wrapper {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
display:table;
height:100%;
margin:auto;
padding-bottom:110px;
display: table;
height: 100%;
margin: auto;
padding-bottom: 110px;
}
.main {
display:table-cell;
vertical-align:middle;
display: table-cell;
vertical-align: middle;
}
.extractors {
padding-top:60px;
padding-top: 60px;
}
.extractors .wrapper {
padding-bottom:5em;
padding-bottom: 5em;
}
.logocompatible,
.social a {
font-size:0;
text-decoration:none;
font-size: 0;
text-decoration: none;
}
.social a {
color:#D1D1D1;
color: #d1d1d1;
}
.logocompatible {
color: #4F4F4F
color: #4f4f4f;
}
h1 {
margin:0;
margin: 0;
}
.error {
@ -540,19 +519,19 @@ h1 {
}
.error p {
text-align:justify;
text-align: justify;
}
.smaller {
font-size:smaller;
font-size: smaller;
}
.thumb {
max-width:700px;
max-width: 700px;
}
.format {
text-align:left;
text-align: left;
}
.best {
@ -560,7 +539,7 @@ h1 {
}
.monospace {
font-family:monospace;
font-family: monospace;
}
.customBitrate {
@ -591,7 +570,7 @@ h1 {
}
.supportedLocales li {
border-bottom: thin solid #E1E1E1;
border-bottom: thin solid #e1e1e1;
}
.supportedLocales li:last-child {
@ -629,20 +608,20 @@ h1 {
@media (max-width: 640px) {
.formats,
.thumb {
width:90%;
width: 90%;
}
.URLinput{
min-width:0;
.URLinput {
min-width: 0;
}
.logo {
max-width:330px;
max-width: 330px;
}
.logocompatible,
.logocompatible img {
max-width:447px;
max-width: 447px;
}
.logocompatible,
@ -650,18 +629,18 @@ h1 {
.champs,
.URLinput,
.mp3 {
height:auto;
margin:auto;
width:90%;
height: auto;
margin: auto;
width: 90%;
}
.logo {
margin-top:50px;
margin-top: 50px;
}
.logocompatible img {
height: auto;
width:100%;
width: 100%;
}
.downloadBtn {
@ -672,46 +651,46 @@ h1 {
}
footer {
display:none;
display: none;
}
.tripleliste ul,
.tripleliste {
margin-left:auto;
margin-top:auto;
width:auto;
margin-left: auto;
margin-top: auto;
width: auto;
}
.logocompatiblemask {
background:none;
background: none;
}
.logocompatible {
background-color:#4F4F4F;
background-image:none;
height:auto;
background-color: #4f4f4f;
background-image: none;
height: auto;
}
.logocompatiblemask,
.logobis {
width:auto;
width: auto;
}
.logocompatiblemask {
position:static;
position: static;
}
.logobis {
height:auto;
height: auto;
}
.titre {
margin:auto;
margin: auto;
}
.error p {
padding:0.5em;
text-align:left;
padding: 0.5em;
text-align: left;
}
.playlist-entry {
@ -723,7 +702,6 @@ h1 {
float: none;
margin-right: 0;
}
}
@media all and (display-mode: standalone) {
@ -731,3 +709,27 @@ h1 {
display: none;
}
}
/* Visually hidden, displays content only to screen-readers */
.sr-only {
border: 0;
clip: rect(0 0 0 0);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute;
white-space: nowrap;
width: 1px;
}
.sr-only.focusable:active,
.sr-only.focusable:focus {
clip: auto;
height: auto;
margin: 0;
overflow: visible;
position: static;
white-space: normal;
width: auto;
}

View file

@ -5,7 +5,8 @@
<h2>{t}This video is protected{/t}</h2>
<p>{t}You need a password in order to download this video.{/t}</p>
<form action="" method="POST">
<input class="URLinput" type="password" name="password" title="{t}Video password{/t}" />
<label class="sr-only" for="password">{t}Video password{/t}</label>
<input class="URLinput" type="password" name="password" id="password" />
<br/><br/>
<input class="downloadBtn" type="submit" value="{t}Download{/t}" />
</form>