QR Code Component Solution Using CSS Variables and Best Practices

Solution retrospective
I learned about BEM in this project, and next time I would like to try using a framework like Bootstrap.
What specific areas of your project would you like help with?Best practices, because there are many ways to build the same screen but its important to keep the code clean, readable and scalable.
Please log in to post a comment
Log in with GitHubCommunity feedback
- P@Islandstone89
Hi, well done.
Here are some things that could be improved. I highly recommend applying these changes before moving on to the next challenge, as this is the best way to learn.
Good luck :)
HTML:
-
Don't use words like "image" or "photo" in the alt text. Screen readers start announcing images with "image", so an alt text of "QR code image" would be read like this: "image, QR code image".The alt text must also specify where it leads (the Frontend Mentor website). A good alt text would be "QR code leading to the Frontend Mentor website."
-
I would change the heading to a
<h2>
- a page should only have one<h1>
, reserved for the main heading. As this is a card heading, it would likely not be the main heading on a page with several components. -
I would wrap the footer text in a
<p>
instead of a<span>
. -
The
<footer>
must be outside of the<main>
- both should be direct children of the<body>
.
CSS:
-
Make a habit of including a modern CSS Reset at the top of your stylesheet.
-
I recommend adding a bit of
padding
, for example16px
, on thebody
, to ensure the card doesn't touch the edges on small screens. -
Move the styles on
main
to thebody
. -
On the
body
, changeheight
tomin-height: 100svh
— this way, the content will not be cut off if it grows beneath the viewport. -
Remove all widths and heights in
px
. We rarely want to give a component a fixed size, as we need it to grow and shrink according to the screen size. -
We do want to limit the width of the card so it doesn't get too wide on larger screens. To solve this issue, give the card a max-width of around 20rem.
-
font-size
must never be in px. This is a significant accessibility issue, as it prevents the font size from scaling with the user's default browser setting. Use rem instead. -
Since all of the text should be centered, you only need to set
text-align: center
on the body, and remove it elsewhere. The children will inherit the value. -
On the image, add
display: block
,height: auto
andmax-width: 100%
- the max-width prevents it from overflowing its container. Without this, an image would overflow if its intrinsic size is wider than the container.max-width: 100%
makes the image shrink to fit inside its container. -
Remove
width: 100vw
on thefooter
. -
On
.attribution
, removewidth: 100%
andposition: absolute
. -
To create space between the
main
and thefooter
, addgap: 1rem
on thebody
.
-
- P@gtarrojo
Overall great job. Be careful with responsive design as the background color bugs a bit on mobile. You could improve your semantic HTML instead of using divs yo can use the figure tag.
Join our Discord community
Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!
Join our Discord