Multipage Website, SEMANTIC html, scss, vanillaJS
Design comparison
Solution retrospective
- @font-face integration
- pixel-pretty-close
- clean and efficient code
- good accessibility
- flexbox & grid
This project brought me to a whole new level and I am excited to share my solution to you'll! One thing that I have to admit, though: I have used some magic numbers in order to position the svg images correctly and without losing their shadows etc. Because most of the provided images were only for desktop, some design software skills (Figma, Adobe XD etc) can help here, so that you can export the svg's from the design files properly (it's not as easy as it sounds, in my experience).
If you don't know, what I mean by magic numbers: https://css-tricks.com/magic-numbers-in-css/
All in all, this is a great challenge to level up your HTML and CSS skills, that for sure!
What is your opinion? :)
Community feedback
- @pikapikamartPosted about 3 years ago
Hey, really awesome job on this one. This is the first one I think I saw a solution for this challenge, really really awesome design. Layout in desktop looks great it is really responsive and the mobile state looks really great as well.
I don't know if I can review the other pages, but here are for the homepage:
- First, there is a bug on your console, try to fix that because if you open dev tools while refreshing the site, it won't since debugger won't allow it until the bug is fixed.
- Don't use the
h1
to wrap the website-logo-link, just let thea
tag or adiv
to wrap it. - You could wrap the website-link inside the
nav
since it acts as the homepage-link for the site and there are no other links that takes the user to the home other than it. - Adjust the
:focus-visible
state for thebutton
tags since it is hard to tell where I am at when navigating through them. - It would be great to have an
aria-current="page"
attribute to whatever page you are in so that users will know what page they are at. - For the hero-sections
svg
you don't usearia-label
to it, to add like analt
text to it, you would need to create antitle
element inside thesvg
describing the looks of thesvg
. Also usingsmartphone
is not descriptive enough, since the image is using the payapi, you might want to include that keyword to it. fieldset
is not need inside theform
since there is only 1input
also since you are not adding alegend
inside it, you don't really need that on this one.- Adding a custom validation on the
input
would be really great. input
lacks alabel
associated with it, since there is no visible text, thelabel
will only be a screen-readerlabel
associated to it.button
should have atype="submit"
to it, always be explicit on how yourbutton
will act especially when it is inside aform
. Since by defaultbutton
inside aform
turns totype="submit"
and imagine you have a close-button inside theform
without usingtype= button"
.- Same goes for the company
svg's
usetitle
element inside to describe what is the name of the company and notaria-label
. Also you can useul
on those since they are "list" of links. about us
on the section with the company logos should be usinga
tag and notbutton
.- The 3 icons-img before the
cta
are only decoration. Those decorative images on the site could have use an extraaria-hidden="true"
attribute so that they will be totally hidden alongside with thealt=""
- Same with the
form
inside thecta
take note of the suggested above in the firstform
.
FOOTER
- Website-logo-link
a
tag lacksaria-label
or screen-reader only text on it. Describe where this link would take the user. - Website-logo
svg
should use the screen-reader onlytitle
element inside it and the text-content will be the name of the site,pay api
. - Same as well, you can nest the website-link inside the
nav
but those social media links should not be since they are not your website's navigational links. - Those social media should be sitting on their own parent container not with the
nav
but usingul
on it is great. - Each
a
tag that wraps social media, it should have eitheraria-label
attribute or screen-reader element inside it. The value for whatever method you will use should be the name of the social media likearia-label="facebook"
on the facebook linka
tag. This way, users will know where this link would take them. - Each
svg
inside the social media link should be hidden since they are only decoration so usearia-hidden="true"
attribute on them, remove thearia-label
.
MOBILE
- Hamburger menu should be using a
button
element since it is a control. Interactive components uses interactive elements. By usingdiv
you are making it not-accessible.
SUPPOSING BUTTON IS USED
- The
button
will be using the method I mentioned usingaria-label
attribute or screen-reader element inside. The value will describe what does thebutton
do. The value could bearia-label="navigational dropdown menu"
. - The
button
should have a defaultaria-expanded="false"
attribute on it. It will be set totrue
if the user toggles thebutton
. - The placement for the
button
and the dropdown is incorrect. The dropdown should be placed "after" thebutton
so that after the user has toggled thebutton
the focus will be next on the dropdown because on the current setup, you would need to backward navigate since thebutton
is after the dropdown.
For now, homepage only. But again, this is really great and really awesome seeing this challenge.
Marked as helpful1@daniel-hennigPosted about 3 years ago@pikamart hi Raymart, thank you so much for taking the time and giving me such a high valuable and precise feedback!😍 This challenge brought me to a new level, but your suggestions even more!🚀
I'll fix all these by tomorrow and let you know once I'm finish, so that you see that I take your feedback very seriously😊
1@daniel-hennigPosted about 3 years ago@pikamart hi Raymart, issues are (hopefully) fixed now.
4th bullet point (adjusting
:focus-visible
state on buttons): What do you mean by hard to tell where you are while navigate through? When I navigate through the website, the button's background-color (and color on all secondary buttons) change, just as in the design. Or do I miss something?On line 16 of index.html, I have the attribute
<title>
and<aria-current = true>
. Do I really need both, or can I stick with justaria-current
? What is best practice on that?Just a note: Third bullet point (wrapping the logo within the nav): You're definitely right here, but since it needs too many adjustments on other parts, I'll let this one as it is, BUT I'll consider this on future projects.
Thanks again, I am so excited to use these new skills for future projects right away!
1@pikapikamartPosted about 3 years ago@daniel-hennig Hey, glad that you find the suggestion useful^^
- About the
:focus-visible
, yep you got the design right but it is still somewhat hard to tell when I am at right now, well for me since my eyesight sometimes is not that great when looking at screens but it is great when I don't look at great, this eyes. That is why on the:focus-visible
state of thebutton
you can make a customizedoutline
withoutline-offset
, example is
element:focus-visible { outline: 2px dashed black; outline-offset: 3px; }
This way, it will be easy to see when I tab through the page since there is an outline that is much visible.
-
Great, that
aria-current="page"
will work just fine, stick to using that whenever you have a multi-page site. This way, when screen-reader users navigated through the navlinks, they will be informed that they are in this specific page of the site. -
Okay, but make sure to add the website-logo-link in the
nav
if there are no visiblehome
link, but if you have like ahome
link, then you don't need to add the website-logo-link inside thenav
.
Again, awesome implementation of the feedback again^
Marked as helpful1@daniel-hennigPosted about 3 years ago@pikamart Thank you so much, Raymart, these are really useful suggestions! I updated the Website and GitHub-code with the
:focus-visible
outlines. All your suggestions are already incorporated into the new project, which will come very soon.🙏1
Please log in to post a comment
Log in with GitHubJoin 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