2021-09-28 21:38:44 +01:00
---
id: 614796cb8086be482d60e0ac
2021-10-21 10:07:52 -07:00
title: Step 45
2021-09-28 21:38:44 +01:00
challengeType: 0
2021-10-21 10:07:52 -07:00
dashedName: step-45
2021-09-28 21:38:44 +01:00
---
# --description--
On the topic of visual accessibility, contrast between elements is a key factor. For example, the contrast between the text and the background of a heading should be at least 4.5:1.
Change the font color of all the anchor elements within list elements to something with a contrast ratio of at least 7:1.
# --hints--
You should use the `li > a` selector.
```js
assert.exists(new __helpers.CSSHelp(document).getStyle('li > a'));
```
You should give the `a` element a `color` property.
```js
assert.notEmpty(new __helpers.CSSHelp(document).getStyle('li > a')?.color);
```
You should give the `color` property a contrast with the background of at least 7:1. _Hint: I would use `#dfdfe2`_
```js
function luminance(r, g, b) {
const a = [r, g, b].map((v) => {
v /= 255;
return v < = 0.03928 ? v / 12.92 : Math.pow( (v + 0.055) / 1.055, 2.4 );
});
return a[0] * 0.2126 + a[1] * 0.7152 + a[2] * 0.0722;
}
function contrast(rgb1, rgb2) {
const lum1 = luminance(rgb1[0], rgb1[1], rgb1[2]);
const lum2 = luminance(rgb2[0], rgb2[1], rgb2[2]);
const brightest = Math.max(lum1, lum2);
const darkest = Math.min(lum1, lum2);
return (brightest + 0.05)
/ (darkest + 0.05);
}
const backgroundColour = [27, 27, 50];
for (let elem of document.querySelectorAll('li > a')) {
const a = getComputedStyle(elem)?.color;
const rgbA = a?.match(/(\d+),\s(\d+),\s(\d+)/);
const aColour = [rgbA[1], rgbA[2], rgbA[3]];
assert.isAtLeast(contrast(backgroundColour, aColour), 7);
}
```
# --seed--
## --seed-contents--
```html
<!DOCTYPE html>
< html lang = "en" >
< head >
< meta charset = "UTF-8" / >
< meta name = "viewport" content = "width=device-width, initial-scale=1.0" / >
< meta name = "description" content = "freeCodeCamp Accessibility Quiz practice project" / >
2022-03-14 15:54:43 +00:00
< title > Accessibility Quiz< / title >
2021-09-28 21:38:44 +01:00
< link rel = "stylesheet" href = "styles.css" / >
< / head >
< body >
< header >
< img id = "logo" src = "https://cdn.freecodecamp.org/platform/universal/fcc_primary.svg" >
< h1 > HTML/CSS Quiz< / h1 >
< nav >
< ul >
< li >< a href = " #student -info" > INFO</ a ></ li >
< li >< a href = " #html -questions" > HTML</ a ></ li >
< li >< a href = " #css -questions" > CSS</ a ></ li >
< / ul >
< / nav >
< / header >
< main >
< form method = "post" action = "https://freecodecamp.org/practice-project/accessibility-quiz" >
< section role = "region" aria-labelledby = "student-info" >
< h2 id = "student-info" > Student Info< / h2 >
< div class = "info" >
< label for = "student-name" > Name:< / label >
< input type = "text" name = "student-name" id = "student-name" / >
< / div >
< div class = "info" >
< label for = "student-email" > Email:< / label >
< input type = "email" name = "student-email" id = "student-email" / >
< / div >
< div class = "info" >
< label for = "birth-date" > D.O.B.< span class = "sr-only" > (Date of Birth)< / span > < / label >
< input type = "date" name = "birth-date" id = "birth-date" / >
< / div >
< / section >
< section role = "region" aria-labelledby = "html-questions" >
< h2 id = "html-questions" > HTML< / h2 >
< div class = "question-block" >
< p > 1< / p >
< fieldset class = "question" name = "html-question-one" >
< legend >
The legend element represents a caption for the content of its
parent fieldset element
< / legend >
< ul class = "answers-list" >
< li >
< label for = "q1-a1" >
< input type = "radio" id = "q1-a1" name = "q1" value = "true" / >
True
< / label >
< / li >
< li >
< label for = "q1-a2" >
< input type = "radio" id = "q1-a2" name = "q1" value = "false" / >
False
< / label >
< / li >
< / ul >
< / fieldset >
< / div >
< div class = "question-block" >
< p > 2< / p >
< fieldset class = "question" name = "html-question-two" >
< legend >
A label element nesting an input element is required to have a
for attribute with the same value as the input's id
< / legend >
< ul class = "answers-list" >
< li >
< label for = "q2-a1" >
< input type = "radio" id = "q2-a1" name = "q2" value = "true" / >
True
< / label >
< / li >
< li >
< label for = "q2-a2" >
< input type = "radio" id = "q2-a2" name = "q2" value = "false" / >
False
< / label >
< / li >
< / ul >
< / fieldset >
< / div >
< / section >
< section role = "region" aria-labelledby = "css-questions" >
< h2 id = "css-questions" > CSS< / h2 >
< div class = "formrow" >
< div class = "question-block" >
< label for = "customer" > Are you a frontend developer?< / label >
< / div >
< div class = "answer" >
< select name = "customer" id = "customer" required >
< option value = "" > Select an option< / option >
< option value = "yes" > Yes< / option >
< option value = "no" > No< / option >
< / select >
< / div >
< div class = "question-block" >
< label for = "css-questions" > Do you have any questions:< / label >
< / div >
< div class = "answer" >
2022-01-03 13:50:54 -08:00
< textarea id = "css-questions" name = "css-questions" rows = "5" cols = "24" placeholder = "Who is flexbox..." > < / textarea >
2021-09-28 21:38:44 +01:00
< / div >
< / div >
< / section >
< button type = "submit" > Submit< / button >
< / form >
< / main >
< footer >
< address >
< a href = "https://freecodecamp.org" > freeCodeCamp< / a > < br / >
San Francisco< br / >
California< br / >
USA
< / address >
< / footer >
< / body >
< / html >
```
```css
body {
background: #f5f6f7 ;
color: #1b1b32 ;
font-family: Helvetica;
margin: 0;
}
header {
width: 100%;
height: 50px;
background-color: #1b1b32 ;
display: flex;
}
#logo {
width: max(100px, 18vw);
background-color: #0a0a23 ;
aspect-ratio: 35 / 4;
padding: 0.4rem;
}
h1 {
color: #f1be32 ;
font-size: min(5vw, 1.2em);
}
nav {
width: 50%;
max-width: 300px;
height: 50px;
}
nav > ul {
display: flex;
justify-content: space-evenly;
}
nav > ul > li {
color: #dfdfe2 ;
margin: 0 0.2rem;
padding: 0.2rem;
display: block;
}
--fcc-editable-region--
--fcc-editable-region--
h1,
h2 {
font-family: Verdana, Tahoma;
}
h2 {
border-bottom: 4px solid #dfdfe2 ;
}
p::before {
content: "Question #";
}
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
```