
Raymart Pamplona
@pikapikamartAll comments
- @DeanFHardy@pikapikamart
Hey, nice work on this one. The desktop layout looks good, however layout issues appears when resizing the browser from desktop view to mobile view as the layout is not responsive. Also, when you zoom out on your end, the components gets huge.
Ivan already gave great feedback on this one, just going to add some as well:
- Yep, when you code mobile first, resizing the browser using dev tools into a phone's size should always be done so that you'll really see the layout being shown into that size. Actually at first, I find it a bit confusing to do mobile first, but some challenges taken, i'm sure that you'll get the hang of it.
- Never use
position
absolute a large container on your site, on your end, using it on themain
tag. The reason for this is that,position: absolute
removes the element from the flow, if the container doesn't have explicit sizes, it makes the container doesn't "capture" the child element. Try to inspect your site in dev tools, hover on thebody
tag, you'll notice that it doesn't have any size because its child element is being absolute. For this one, you can just remove all these stylings on themain
tag:
position top left bottom right margin width height
Then to properly center the content, add these first on the
body
tag:align-items: center; display: flex; justify-content: center; min-height: 100vh; # makes sure that it has sufficient height padding: # add some to prevent component touching the sides of the browser place-content: center;
Then again on the
main
tag, you can just add:flex-basis: 100%; max-width: 500px; # convert to rem and change the size depends on the design;
This makes the component more responsive. You can add
min-height
on themain
as well if you want if you like a more consistent sizing.- Now, if you follow those above, you will notice that some or lots of element are being out of place because those elements are using the same stylings on the
main
. Again, remove all those stylings I mentioned earlier on each element and let themain
container handle their positioning. If you need to place elements, don't always jump toposition: absolute
this should be the last case you want. Try searching or maybe looking up other website's submission as well to get some ideas when you are coding :> - Do not use
id
attributes to target an element on your css, usingid
creates problem due to specificity, always useclass
so that it could be more manageable and reusable. - As you may know, an
h1
is needed for every webpage, theh1
describes the main content per each page. On this one, since there are no visibleh1
on the page, theh1
will be instead a screen-reader onlyh1
. Meaning, it won't be seen visually, but it is there. Have a look at this simple fiddle that I have about screen-reader text. Comments are already included, but if you have any queries, just let me know okay. - Instead of
h4
, useh2
on the "Advice" text. When you are using heading tags, make sure that they are on the proper level, when you useh4
, make sure thath1, h2, h3
are all present before theh4
. - When you need to make a text capitalized, you don't write them as it is like "ADVICE" on the
html
, this will make screen-reader read the word letter-by-letter and not by word. Use lowercase on them and just usetext-transform: uppercase
on the css. - If you want to align those items inside the
main
tag in the center, you can add:
align-items: center; display: flex; flex-direction: column;
On the
main
tag.- Remember when using
img
tag, always add analt
attribute. When you don't include it, screen-reader will instead announce something different from the file path. So always include it. - Since the divider
img
is just being used as decoration, addingalt=""
andaria-hidden="true"
on it would be nice. This makes theimg
tag be hidden for screen-readers as they are not really meaningful content of the site, always use this when image are not informative. - Instead of
input
, usingbutton
would be much better and correct for this one sinceinput
are used inside ofform
right. - Using
button
on that one, I would suggest the.circle
selector to be the actualbutton
, just style it to be circular. Also, since there are no visible text on thatbutton
( if you used ), you should always add a label-text on it on what thebutton
is supposed to do. For example, you can addaria-label="Change quote text"
. This way, when user traverses thebutton
using screen-reader, they will be notified on what thisbutton
does. - If you are new to some of these ideas, maybe adding more will be confusing right now. But some ideas to make the app more accessible would be, shifting focus on the quote after the
button
is toggled or an alternative,aria-live
would be use on thequote
so that it will be easier to maintain response.
Those might be lot but you'll encounter them on your way. Just let me know if you need help and see if I can help. Again, great job for this one.
Marked as helpful - @AnazAnoiar69@pikapikamart
Hey, great work on this one. The desktop layout looks really nice, the site is responsive and the mobile state looks really nice as well.
Others already gave their feedback which is nice to see, just going to add some suggestions as well and don't mind me if I re-iterate some ideas mentioned already:>
- For the
scss
part, you don't really need to use:
body { .... other selectors }
You can just directly target the selectors like
.container
, this way you reduce specificity. Also, if you like, you can search aboutbem
convention. This will help you manage css selectors and create more generic classes. For example, you will have something like:.cards{ &__container {} &__list{} &__item{} }
This way, you can group them properly if you think about it.
- Adding
max-width
on thebody
tag to prevent the layout from stretching. If you try to zoom out on your browser, you'll see that the layout stretches, addingmax-width
will prevent that, just make sure to addmargin: 0 auto
so that thebody
will be centered. - These two text:
Reliable, efficient delivery Powered by Technology
Are just one single phrase, meaning instead of using
p
tag for the first one, use a singleh1
to wrap both lines and just addmax-width
on theh1
so that it will limit and create that 2 lines.- The overall
font-sizes
could be bigger, right now some text are small and they are smaller than the design as well. - Remember to only use a single
h1
for a site. Theh1
typically use on the hero heading like the 2 lines above on the site. So each of the card titles could be replace by justh2
. - Each images could use an
aria-hidden="true"
attribute so that it will be totally hidden.
Those only. Again, great job on this one.
- For the
- @AchrefFast@pikapikamart
Hey, really nice work on this one. Overall, the layout for both desktop and mobile state looks really great. The reply also works great as well the upvote and downvote.
For some suggestions, here are some:
- If you try to click the first upvote of the first comment, you can't point to it , I think it is because of the
h1
being sr-hidden. You can addclip: rect(0 0 0 0);
on theh1
to fix it. - For each of the upvote and downvote, currently it doesn't have any informative text inside it and
+
or-
alone is not enough. What you can do is that, add ansr-only
text inside it to which could bedownvote comment
andupvote comment
, depends on where it is placed. - Also, I would suggest changing the html placement for each of the post. The post's body should be placed before the ratings so that when a user navigates on the component, they will traverse the user, the user's post before the rating. Because it would be confusing to first traverse the upvotes/downvotes when the content is not first reviewed by the user.
- Adding an
aria-live
attribute on the element wrapping the counts so that assistive tech will announce the update to the user on what happened. You can add extra text if you want, ansr-only
text. Also, you could change thespan
to justp
tag. - For each of the person's
img
, since their name is already present, it would great to use their name as thealt
value since it makes sense to do so. - Actually, if this were a real app, each person would be a hyperlink right. Maybe making them wrapped inside
a
tag? Each person'simg
and name. Could be right. - Whenever you wrap a text, always use meaningful elements and not
div
. Changing all thosediv
that wraps a text should be replaced byp
tag. - For the reply
button
, the arrow-svg should have anaria-hidden="true"
attribute on it since it is only a decorative image. - Again for the reply
button
, addingaria-expanded
attribute would make it more accessible. This way, when a user toggles it, assistive tech will inform the user that it shows or expanding something. - For the reply
form
, using the user's name on the user's avataralt
attribute would be nice. - Adding
label
for thetextarea
would be great. Remember to always addlabel
for eachinput
ortextarea
element. This way, when a user is using a different language, those label text will be changed as well since attribute's data is static, theplaceholder
won't be translated. Thelabel
will besr-only
on this one. - There is a confusing part on the
textarea
. Initially, it should be empty right because a user is still not typing anything, but since you are already adding the@_name
on field, a user can press thereply
to send that reply even if they haven't add anything on thetextarea
and it will be much confusing since it is usingrequired
and to be honest, I can't think of an approach on this one, so maybe just letting you know about this? :>> - When clicking now either the reply or cancel
button
it would be nice again to have anaria-live
element or maybe you can add a toast-notification on this one. The toast's text-content will vary on the user's choice, it could be likesuccessfully replied to {person's name}
or could be likereply cancelled
. Just remember to add anaria-live="polite"
on the element so that it will be announced. - When toggling the delete
button
, it would be nice to set the focus to the modal. This way, user will immediately be informed on what is the content. Right now, if you use keyboard to toggle the delete, then tab again, the user won't traversed on the modal like what it should do. So when a user toggles the delete, add thearia-expanded
attribute then shift the focus in the modal, so that if they tab again, they will tab inside the modal. Another feature to add as well is to have a trap focus inside the modal. Meaning they can only tab on the two options, this way the user won't be confused on where they are at now. - To be honest, there are lots of added
aria-live
on this one or some toast, for the successfully deleting a reply and adding a comment as well.
Just in general, if there are lots of state in your app that requires to send an update to the user, an
aria-live
would be nice or sometimes changing the focus on the pop-up element is really nice.Aside from those, great job again on this one.
Marked as helpful - If you try to click the first upvote of the first comment, you can't point to it , I think it is because of the
- @Kamasah-Dickson@pikapikamart
Hey, nice work on this one. For desktop layout, I think it looks fine, just needed for the proper
font-weight
to be used and also the svg's outline is overflowing, on the original, the outline should be cut. The mobile state looks fine as well.On your questions:
- Yep, working with images sometimes is hard specially when you need to
position: absolute
something but I think that you did great on this one! - For the breakpoints, it depends sometimes on the design of the project that you are creating, sometimes it doesn't need to use breakpoints especially when you created the component really responsive. For me, when I use breakpoint, I typically go with
768px
for the tablet and1000px
on desktop state, I always start now with mobile first approach. Sometimes this changes because like I said, it depends on the layout. - You can if you want and there's nothing wrong with that. I use that when there is only a single component of the page and I want the whole
body
to occupy the full height.
Here are some other suggestions for the site:
- When including images on your site that acts only as decorative images, you should always use an empty value for the
alt
attribute and adding an extraaria-hidden="true"
attribute on theimg
would be nice. On this one, the lady illustration should be using those attributes I mentioned since it is only decorative. - Just a remined, only use descriptive
alt
values for images that are really meaningful on the site and when adding the text, the text should not include words that relates to graphic such asillustration, image, icon
since theimg
tag is already a graphic and no need to describe it as one. - Change those FAQ question from using
h2
into usingbutton
or maybe just use adetails
element on this one. When creating applications or websites, if a component is interactive, always use interactive elements likebutton
. I saw that you are using thediv
as a toggle for the content which should not be the case. - Those arrow-images should be hidden as well since it is only a decorative image. Use the above method I mentioned to hide it.
- For each question's answer, those are only being hidden visually by the
overflow
andmax-height
but a user can still traverse those. If you need to hide an element, adding thevisibility: hidden
should be done andvisibility: visible
if it needs to be shown.
Aside from those, great job again on this one. Let me know if you need any help.
- Yep, working with images sometimes is hard specially when you need to
- @beshoyyatef@pikapikamart
Hey, nice work on this one. For the layout, on desktop view maybe adjusting the
padding
would be nice. If you look at the design, there is a fixedpadding
on the left and right side for each of the landmark elements, you can follow that to improve the ui. Some text as well got smaller after the hero section. For mobile state, I think it looks fine.Here are some suggestions besides Divine Obeten feedback:
- For the the site-logo-link, always remember to add either
aria-label
or ansr-only
text inside it so that a user will know where the link would take them. You do this when there are no text-content inside the anchor. For this one, you can use likearia-label="homepage"
on thea
tag. - Always add the site name on the site's logo because that logo is one of the meaningful element on the site. Use
alt="Huddle"
. - You can include the site-logo-link inside the
nav
if you want since it is being treated as link. But to be honest, I think you can just replace thenav
by just adiv
since the link/s inside is not much, thenav
would be much better on the links inside thefooter
tag. - Don't use
height: 100vh
on an element, this will make the element's height not consistent. Try going into dev tools at the bottom, you will notice that the hero section's height got small because of this property. Instead, usemin-height: 100vh
so that the container will respond properly. - I would change those
section
tags into justdiv
becausesection
alone is not that informative as a landmark element. By navigating using screen-reader, when it traverses thesection
tag, it won't announce it as a landmark even if you are traversing it as a landmark compared to likemain
,header
andfooter
.div
would be fine^^ - Don't use
br
tag to cut the text, you can just addmax-width
on the text-element. - For the hero-image, you can add an
aria-hidden="true"
attribute on theimg
tag so that it will be completely hidden for other assistive tech. You can this as well on the svg's that are used across the page.
FOOTER
-
On the logo, you are trying to make it white right, adding
background-color
toimg
won't work. What you can do is that add the svg's code itself on your html, then change thefill
property of either thesvg
orpath
I think to the color that you want and this will changed the svg's color. -
Same goes again for the logo-link, use a text that describes where the link would take and use the site's name as the
alt
value. -
Those 6 links are all related to one another and using a single
ul
to wrap them would be better and also, you can wrap thatul
tag bynav
tag since those are the site's navigational links. -
Those social media links could be wrapped inside a
ul
tag as well since they are list of links. -
Since you are adding a
hover
state for the social media, you are implying that those are interactive, hence wrapping those inside their owna
tag would be better, added as well thesr-only
text oraria-label
pointing on where it would take the user. -
Lastly, if you pushed an update to your solution, clicking again the
generate report
so that it will clear up some issue if you fixed it.
Aside from those, great job again on this one.
Marked as helpful - For the the site-logo-link, always remember to add either
- @Facualemandi@pikapikamart
Hey, nice work on this one. The layout for the desktop is fine but it could use more width since it is small right now. Resizing the site, it works fine but the layout at 1000px below until mobile state, the layout doesn't respond well making each content of the
main
squished and at 600px to 800px, you will noticed that the text on the left are now being overlapped by the form. The mobile state looks great though.Here are some suggestions for the site:
- You don't use a
height
on thebody
tag. I'm supposing that you want thebody
to take the full height right, instead of usingheight
, usemin-height
so that whenever the content of the site gets bigger, thebody
will rescale to that size becausemin-height
lets the element expand unlikeheight
that gives a fixed size. - Instead of using
width
for each child ofmain
, you can just usepadding
and maybe add amax-width
on thebody
tag so that it will prevent the layout to just always take full width of the user's screen. Just make sure to addmargin: 0 auto
for it to be centered. - Replacing each
section
tag into just usingdiv
. Usingsection
is not really informative at all as landmark because it doesn't give extra information about it when traversing using an assistive tech, unless you give anaria-labelledby
to it pointing to an heading's id.div
is much better to wrap contents. - Whenever you use an
input
tag, adding alabel
pointing to it will be great so that even if the user uses a different languages, text content on the site can change if they want to translate the text and values used in attributes like theplaceholder
or maybe anaria-label
are not translatable. Adding thelabel
on this with ansr-only
class will be great. - For the submit-button, instead of using
input
, usebutton type="submit"
to be more explicit.
SUBMITTING A WRONG FORM
- If such
input
is invalid, adding anaria-invalid
to thatinput
would be really great so that when the user traverses on it, they will be notified that theinput
is wrong. - The error messages for each should have an
id
. I would change thediv
into just usingp
tag since it is a text content. Each error messages should have anid
to which will be referenced by theinput
using thearia-describedBy
attribute. This way, the user will know what kind of error that they had made because of the error message. Eachid
should be distinct likeid="firstName-error"
. - Lastly, to further improve the error-handling, you could add an element that uses
aria-live
inside the form. The text will vary according to the form's submission, it could either be something likeform has been submitted, thank you
or it could beform submission invalid, please check your first name, last name... inputs
.
Here is a sample block that uses the attributes to add each error:
if ( input is invalid ) { input.setAttribute("aria-invalid", "true"); input.setAttribute("aria-describedBy", id of the error message"); } else { input.removeAttribute("aria-invalid"); input.removeAttribute("aria-describedBy"); }
Here is a sample form submission of what I said. It is a simple accessible form that I created, the
aria-live
is implemented there as well. Let me know if you have questions about it^^- Lastly, addressing the responsiveness issue of the site. Try to check out the dimension that I said earlier and try to fix the responsiveness.
Still, great work on this one.
Marked as helpful - You don't use a
- @2div@pikapikamart
Hey, nice work on this one. I see that you somehow went on another approach on this one, it's fine but I really recommend that when you tackle other challenges, following the design itself should be the best ui approach :>
Here are some other suggestions besides Deniel helpful suggestion and don't mind me reiterating some already suggested ones:
- Using
main
tag on the.container
instead ofdiv
would make the site more accessible. When creating websites, you should usemain
tag to nest the main-content of that webpage, on this case, the whole content should be inside themain
. - To center the contents on your solution, you don't need to use
margin
on the.container
since it is not really consistent. What you can do is that, add these stylings on the.container
:
justify-content: center; min-height: 100vh;
This way, the item will be centered properly and dynamically.
- The
margin
on the.card
could be removed since its parent (.container
) is already making it centered. - For the
img
, you could just usealt=""
andaria-hidden="true"
on it since the image doesn't really depict anything visually and could just be left empty so that screen reader won't read it. - Also when you use
img
orsvg
, you don't use words that relates to graphic like "image"` since those elements are already graphics. - For the bold text, you can use
h1
on it for now. Remember that a webpage needs to have anh1
and you can replace thep
tag with it on this. - When wrapping up text content, use meaningful elements like a
p
tag, change yourspan
into usingp
tag.
Aside from those, great job again on this one^^
Marked as helpful - Using
- @johangly@pikapikamart
Hey, really nice work on this one. I think the layout for desktop looks nice, the site is responsive as well when scaling the browser. For mobile state, there are breakpoints where you already show the one-column layout for the mobile view, yet there are still section where the contents are still using the desktop version. For example, at 700px, for the
features
section, the tab-controls are in a single column-layout but the content underneath is still using the desktop version. It would be nice to just show both the mobile version for each content. Also, at the 700px, the navbar'slogin
wraps on another row.Here are some other suggestions for the site:
- Maybe adding a
max-width
on thebody
tag or in a wrapper for the content. If you try to zoom out on your screen, you will see that the site's content are just stretching along. Adding themax-width
will prevent this one. - Don't add
outline: none
on the*
selector if you aren't going to provide a custom visual-indicator. Theoutline
provides guide to the user when traversing focusable elements on the site. Try using thetab
key to navigate the site, it is hard to know where you are at. Use the:focus-visible
selector to add the customoutline
or just remove your declaration. - For this one, the
body
doesn't need to use a flexbox since the content of the site are just sitting on a single-column. Also, your html elements that are nesting the site's content right now are just being direct child of thebody
which should not be since they should be nested inside their own landmark element. - On this layout, it would be really great if your navbar is inside the
header
, the main-content inside themain
tag and the bottom-most part inside thefooter
tag. Yourbody
tag should only contain these 3 landmark element:
<header /> <main /> <footer />
- Currently, you are using 2
nav
to create the mobile and desktop version of the navbar which shouldn't be the the case. You should only use a singlenav
and just use css to make it adapt for mobile and desktop state. This way, your markup won't be using repetitive element. - Also, even I suggested using a single
nav
, right now, the mobile-statenav
is not being hidden properly. When you are making something hidden, you don't just use thewidth
oropacity
as they are only hiding the content visually but they are still in the dom. You should always usevisibility
ordisplay
to show/hide the item. - For this one, the topmost
nav
element could use anaria-label="primary"
attribute on it. The reason for this is that, I would later suggestnav
on thefooter
tag. You should add thearia-label
for anav
element if you are using thenav
more than once on the page. This will make it unique. - The website-logo could be removed from the
nav
since it is not being treated as a site-link. - When you are using the
alt
for the site-logo, always make sure to use the website's name and not justlogo
because if a user traverses the images on the site, what doeslogo
text will provide really. Also, avoid those words that relates tographic
when using value for thealt
attribute. - Those navlinks could be wrapped inside a
ul
tag since those "list" of links. - When you are making a text uppercased, you don't write them directly uppercased on the markup because instead of screen-reader reading the word as it is, it will read the word letter-by-letter. Type them in lowercase and use
text-transform: uppercase
in css. login
is better usinga
tag rather thanbutton
on this one.- Don't nest
a
tag inside thebutton
and vice versa as they just create 2 extra traversing. Use only a single one. - Don't use
header
inside themain
as it is as it will be treated as a regular element. It would be better if it was replaced bydiv
. - You don't need to use
br
tag to make the word wrapped in another row like what you used in theh1
tag. Usemax-width
for theh1
so that it will make the word wrapped if it needs. - The decorative images on the site like the hero-image could use an extra
aria-hidden="true"
attribute so that it will be totally hidden for screen-reader users. - If you are going to use
article
for thefeatures
use a singlearticle
to wrap both the tab-controls and the content below since they are related to one another. - For the
features
section as well, your controls are working fine but usingbutton
alone without any extra attributes addition is not informative at all. For this one, you can implement it as tabbed interface. You can have a look at my implementation on my solution for this. This way, it will be more accessible for the users. more info
should be usinga
tag since it is more likely to be link.- Also, I just noticed that almost paragraphs on the site are using
br
tag to make each text wrapped. Again,max-width
will be much better. - Almost every content on your solution is using
section
tag but used incorrect.section
tag as landmark is not really informative as it does not give extra information about the tag unless you are usingaria-labelledby
attribute on it. This way, it will read out the heading tag to which it points to. If the section ( not section tag ) of the site doesn't have a visible heading text, adiv
would be fine. - For your
faq
section, you don't usea
tag to wrap the whole accordions. Use onlya
tag for contents that will navigate a user in a different page of the site of just navigate them elsewhere. Adiv
replacement will be much better on this. - Right now, the accordion answer is still in the dom even if they are not toggled since you are only use
max-height
. Remember to use the above method I mentioned. If you don't want the trouble on this, usedetails
tag instead. It is already accessible and is suited for this kind of structure. - For the
cta
section, yourinput
right now currently lacks associatedlabel
to it or anaria-label
to which will define the purpose of theinput
element. Always include it so that user will know what they need to give on eachinput
. Make sure thatlabel
is pointing to theid
of theinput
as well. - Right now, when a user submits a wrong form values, the error is only seen visually but not really linked to the
input
properly. A proper way of validating it would look like this:
if ( input is wrong ) input.setAttribute("aria-invalid", "true"); input.setAttribute("aria-describedBy", id of the error-message); else input.removeAttribute("aria-invalid"); input.removeAttribute("aria-describedBy");
The error-message element should have an
id
attribute which is referenced by thearia-describedBy
attribute on theinput
element. By doing that, your user will know that the input is wrong because ofaria-invalid
and they will know what kind of error they made because of thearia-describedBy
.- The error-message as well is better to not disappear and just make it stay there so that user will still have a guide.
- Another great idea to implement is to have an
aria-live
element that will either announce if the form submission is a success or not. This way, the user will be informed right-away on what is the status of the submission. - The
button
should havetype="submit"
. Remember that when abutton
is placed inside aform
element, it defaults totype="submit"
. So imagine if you have a close-button inside theform
without specifyingtype="button"
clicking the close-button will submit theform
. Be aware of this kind of scenarios.
FOOTER
- Same with the company logo, use a more proper
alt
value. - Those 3 links could be wrapped again inside in another
nav
element since those are still your site's navigational links. Thenav
would have anaria-label="footer"
to it so that it will be unique. - The footer-navlinks could be wrapped again inside
ul
since they are "list" of links. They are just the same structure as the header's navbar. - Those social-media links could be inside a
ul
element since those are "list" of links. - Each
a
tag that wraps the social-media icon should have eitheraria-label
attribute orsr-only
text inside it, defining where the link would take them. For example, you should usefacebook
as the value if the link would take the user to facebook. - Social-media image should be hidden since it is only a decorative image so use
alt=""
andaria-hidden="true"
.
MOBILE
- Hamburger menu should be using a
button
since it is an interactive component. When creating interactive component, make sure that you are using interactive element so that it will be accessible for other users.
SUPPOSING BUTTON IS USED
- The hamburger
button
should have a default attribute ofaria-expanded="false"
and it will be set totrue
when the users toggles it and vice-versa. - The hamburger
button
should have eitheraria-label
attribute orsr-only
text inside it which defines what thebutton
does. You could usearia-label="navigation dropdown menu"
- The
img
inside the hamburger-menu should have been hidden since it is only a decorative image. - Lastly, your placement of the dropdown and the hamburger is incorrect. The hamburger should be placed before the dropdown on the markup so that after the user toggles it, when they use the
tab
key, the focus will be set on the dropdown.
Now, it is fine to have those lots of issues. Just always be aware in this kind of scenario and always try to aim accessible site. You can always take look at other people's solution or just search on the net for proper markup on a specific layout.
Aside from those, great job again on this one!
Marked as helpful - Maybe adding a
- @jkhaygood@pikapikamart
Hey, awesome work on this one and congrats as well for your first challenge here at FEM! Hope you had fun doing this challenge and learned from it:>. For desktop layout, it just needed it to be centered and it's good to go.
Here are some other suggestions for the site:
- It would be great to have a base styling of this:
html { box-sizing: border-box; font-size: 100%; } body { margin: 0; } *, *::before, *::after { box-sizing: inherit }
This way, handling an element specially its size will be easier because of the
box-sizing
- In a webpage, your main-content should be wrapped inside the
main
tag so that it will be easy for the user to know and navigate on themain
landmark. For this one, create amain
tag that will wrap the 3 card. - Normally, I would suggest using a flexbox to center the layout on this challenge, but since there is not container that wraps the 3 card, using flexbox on the
body
will just ruin it. But if you manage to create amain
, then use:
align-items: center; display: flex; flex-direction: column; justify-content: center; min-height: 100vh;
Styling on the
body
tag.- On each of the
div
card, instead ofheight
usemin-height
. Usingheight
will give an explicit /fixed sizing on the element making it not scale base on it's content, whilemin-height
will allow the element to resize if needed. - Also, you could have create a single selector like
.card
that you can give on each of the card on the layout, this way you won't have to manually add the stylings on each of thesedan, suv, luxury
selector. - For each of the car icons, they are only acting as decorative images. Decorative images are just images that doesn't contribute to the overall content of the site. They should be hidden for screen-reader at all times by using
alt=""
andaria-hidden="true"
to theimg
tag or onlyaria-hidden="true"
if you are usingsvg
instead ofimg
tag. - In any webpage, you should have a single
h1
tag, usually it is the first heading tag inside themain
tag. It describes the content of the site, but since there is no visible heading text on this one, you should create theh1
as screen-reader onlyh1
. Have a look at this solution of Grace on the same challenge. Inspect the website and see how she used theh1
and the stylings applied to it. - Those "learn more" are better using
a
tag rather thanbutton
because on a real site, those would be page links for the user to visit and "learn more" about a specific car.
Aside from those, great job again on this one.
Marked as helpful - @simplyJC@pikapikamart
Hey, awesome work on this one. The desktop layout looks fine, just a little bit shorter. For responsiveness, if you go at 900px upwards, you will notice that the site hides the content and creates horizontal scrollbar. For mobile state, it looks fine but the top part is being hidden by the screen's ceiling.
Here are some suggestions for the site:
- Avoid using
height: 100vh
on a large container like the.wrapper
container as this makes the element's height capped based on the viewport/screen's height. Instead usemin-height: 100vh
so that the element will expand if it needs to. - For the image, you can use a more descriptive
alt
on it if you find the image meaningful. Right now, the textoffice
is too broad on what is image's content is all about. - For the text-content of the site, the
text-align
should be set to left because right now, texts are centered. - For the .card__details
, if you look at the content, those could be "list" of information about the company website, therefore you can use
ul` tag on it. - Since I suggested
ul
, thosespan
would beli
and also, using just a planspan
to wrap a content is not that great, you should always put content inside of a meaningful element. - Lastly, just addressing the responsiveness issue if you go around at 900 px upwards^^
Aside from those, great job again on this one.
Marked as helpful - Avoid using
- @CarlTheBeginner@pikapikamart
Hey, awesome work on this one. The desktop layout looks fine, it's just a bit taller and some white-spaces could be reduced as well. The site is responsive and the mobile state looks great.
Here are some suggestions for the site:
- Adding a
max-width
on thebody
or in a container that holds content. If you try to zoom out on your screen, the content stretches along with the resize. Adding thatmax-width
will prevent that and makes sure that the content will be consistent for the user. - Website-logo-link
a
tag should have eitheraria-label
attribute orsr-only
text inside, that describes where the link would take the user. Usually, website-logo directs user to homepage so usehomepage
as the value like `aria-label="homepage". - Remember that a website-logo is one of the meaningful images on a site so use proper
alt
for it. Use the website's name as the value likealt="clipboard"
. - Also for the site-logo, if you use tab through it, you will notice that it creates extra
outline
for theimg
since it is usingmargin-bottom
which pushes it from the container. Use that styling on thea
tag instead. - On general, using
section
is not bad but you can just replaced it with justdiv
if there is already an existing visible heading tag on that section ( not section tag ) since if you traverse the site using screen-reader with landmark, when the screen-reader traverses thesection
tag, it doesn't read out a label text that signifies it as a landmark, unless you are using like anaria-labelledby
if you want the element given an importance to. - Change those repetitive
h1
into just other heading tag. Usingh1
inside asection, article
is not bad as well but hey, we just want to stick out with the semantic markup :> - For the images, you can add the clipboard app on the description since each images has the clipboard logo inside it, for example,
alt="clipboard app running on mac desktop"
. - Those 3 icons on the workflow section are all just decorative images. Decorative images are just images that doesn't contribute to the overall content of the site. They should be hidden for screen-reader at all times by using
alt=""
andaria-hidden="true"
to theimg
tag or onlyaria-hidden="true"
if you are usingsvg
instead ofimg
tag. - Only use descriptive
alt
on images that are meaningful and adds content to the site otherwise hide the image for screen-reader users. - Also, When using
img
tag, you don't need to add words that relates to "graphic" such as "logo" and others, sinceimg
is already an image so no need to describe it as one. - Use only the company's name as the
alt
and remove the wordlogo
.
FOOTER
- Same for the site-logo, use the suggested method above about the link and the
alt
value. - Those 5 links should all be nested inside a single
ul
tag since those are related links. Theul
could be wrapped inside by anav
tag since those are still your navigational links. - Those social-media links could be inside a
ul
element since those are "list" of links. - Each
a
tag that wraps the social-media icon should have eitheraria-label
attribute orsr-only
text inside it, defining where the link would take them. For example, you should usefacebook
as the value if the link would take the user to facebook. - Social-media image should be hidden since it is only a decorative image so use
alt=""
andaria-hidden="true"
.
Aside from those, great job again on this one.
Marked as helpful - Adding a
- @Nnenna-udefi@pikapikamart
Hey, awesome work on this one. The desktop layout looks fine for me, just that the hero-section is bit to taller, the text-alignment is using center instead of left and the white-spaces on the testimonial section could be reduce. For responsiveness, if you go at point 770px, you will notice that the site's content is being by the screen causing a horizontal scrollbar and the text of the site starts to get squished, the images doesn't respond and alignment is still not going well.
David Turner already gave a feedback on this one, just going to add some suggestions as well:
- It would be great to have this markup:
<header /> <main /> <footer />
This way, all content of your page will be inside their own respective landmark element. Remember that for the primary
header
, nest only the topmost part of the site which are the site-logo, navlinks and leave the hero-section inside themain
tag because you want theheader
to be reusable for other pages, so only include what is needed on that.- The site-logo could be remove from the
nav
since it is not being treated as a link. If you insist on doing so, it would be nice to wrap theimg
bya
tag and make sure to properly use anaria-label
orsr-only
text that would describe where the link would take the user. - Also, on the
header
tag'snav
, you can addaria-label="primary"
so that it will be unique since a anothernav
could be used inside thefooter
tag. - Those 4 links in the
header
could be wrap inside aul
tag since those are "list" of links. - Also, I saw a usage of
height: 100vw
on the.h-screen
selector. Avoid usingheight: 100vh
as this makes the element's height capped based on the viewport/screen's height. Instead usemin-height: 100vh
so that the element will expand if it needs to. - Also, I would prefer to use
rem
value to give theheight
on the hero-section instead ofvh
unit so that it will stay consistent for all user. Try to inspect the layout in dev tools at the bottom, the hero-section changes a lot when you resize the screen's height. - The arrow-image on the hero-section is only a decorative image. Decorative images are just images that doesn't contribute to the overall content of the site. They should be hidden for screen-reader at all times by using
alt=""
andaria-hidden="true"
to theimg
tag or onlyaria-hidden="true"
if you are usingsvg
instead ofimg
tag. - For this one, just use a single
h1
since you don't want it to be repetitive on the page. Use a singleh1
only and change those into other heading tags. - It would be nice to use
text-align: left
as well on each of the section after the hero so that it will look like the design. - Those
learn-more
are better usinga
tag rather thanbutton
. On a real site, those would be page links and not like a control. - For this challenge, I would only use
alt
attributes on the site-logo and each of the person's on the testimonial section and the rest would be hidden using the method above since they are all decorative images. - For the cherry and the orange section, you can instead use those images as
background-image
for each container so that they will be easier to handle. - On the testimonial section, it would be nice to adjust the white-spaces on that part because right now, they are too much:>
- For each testimonial, you can use this markup below so that it will be easier for the user to traverse the information using
blockquote
on a screen-reader:
<figure> <img src="" alt={person name}> <blockquote> <p> {qoute in here}</p> </blockquote> <figcaption> person name <p> person role </p> </figcaption> </figure>
FOOTER
- The
background-color
could be lighter so that it will match the footer's design. - Those 3 links after the site-logo could be wrapped inside a
ul
because again, they are "list" of links. Also, theul
on this could be wrapper inside anav
since they are still your site's navigation links. Thenav
should havearia-label="footer"
so that it will be unique. - Those social-media links could be inside a
ul
element since those are "list" of links. - Each
a
tag that wraps the social-media icon should have eitheraria-label
attribute orsr-only
text inside it, defining where the link would take them. For example, you should usefacebook
as the value if the link would take the user to facebook. - Social-media image should be hidden since it is only a decorative image so use
alt=""
andaria-hidden="true"
.
MOBILE
- I noticed on the markup, you duplicated your navlinks for the mobile state which you don't really need. You just need to style the original navlinks to adapt for mobile state and desktop state. This way, you are reducing repetitive element on your markup.
- Hamburger menu should be using a
button
since it is an interactive component. When creating interactive component, make sure that you are using interactive element so that it will be accessible for other users.
SUPPOSING BUTTON IS USED
-
The hamburger
button
should have a default attribute ofaria-expanded="false"
and it will be set totrue
when the users toggles it and vice-versa. -
The hamburger
button
should have eitheraria-label
attribute orsr-only
text inside it which defines what thebutton
does. You could usearia-label="navigation dropdown menu"
-
The
svg
inside the hamburger-menu should have been hidden since it is only a decorative image so usearia-hidden="true"
on it. -
Also, the placement of your hamburger and the dropdown is incorrect. The dropdown should be placed after the hamburger so that after the user toggles it, the next focus is on the dropdown.
-
Lastly, in general, adjusting the styling on the site and addressing the responsiveness issue:>
Aside from those, great job again on this one.
Marked as helpful - @rlabuonora@pikapikamart
Hey, great work on this one. The desktop layout looks fine, though the
h1
is small, the text below it is not using a left-alignment and maybe adding morepadding
to thebody
or in a container so that the content won't look like spaced out. The site responds but if you go to at 500px upwards, you will see that the content is being hidden by the screen and creates horizontal scrollbar.Here are some other suggestions for the site:
- Avoid using
height: 100%
orheight: 100vh
on a large container like thebody
as this makes the element's height capped based on the viewport/screen's height. Instead usemin-height: 100vh
so that the element will expand if it needs to. - The
font-weight: 700
on theh1
could be remove since by default it already uses this. - For the
.reviews
selector, you don't really need to usegrid
on that one since the it's direct child is already a block element that will wrap on its own row. You just need to usemargin
on those item to place them properly like on the design. - For each
.review
, usingarticle
on them is not the best choice since anarticle
tag usually contains content that is independent and could be redistributed on another page since it can sit on its own. For this one, you could just usediv
on each. - Each of the star icons, you can just use the image path as the value for the
background
property of each.review
selector. Remember thatbackground
can contain multiple image, this way you won't have to create multipleimg
tags. - Though, if you insist on using
img
tags for the star-icons, then make sure to addalt=""
andaria-hidden="true"
so that screen-reader will skipped that image since it is only a decorative image. - For each person's
img
tag, it would make sense to use their full name as thealt
value since it is already present. - Also, for each testimonial, you could use this markup below so that it will be easy for screen-reader to traverse it using
blockquote
:
<figure> <img src="" alt={person name}> <blockquote> <p> {qoute in here}</p> </blockquote> <figcaption> person name <p> person role </p> </figcaption> </figure>
Though you just need to use
grid
on thefigure
to place each item properly since afigcaption
should be the first or last item of afigure
element.- The
verified-buyer
should not be using a heading tag since it doesn't really give information on what a section/part of the layout would contain. Ap
tag on it would be nice. - Lastly, addressing the responsiveness issue on the site:>
Aside from those, great job again on this one.
Marked as helpful - Avoid using
- @mahnoork18@pikapikamart
Hey, awesome for another challenge. The desktop layout looks fine, though the hero-image is quite big/long and making the site a bit longer because of some white-spaces as well. The site is responsive but if you go at 340px above, you will notice that the site is hiding the content of the page and creates horizontal scrollbar.
MordenWebDev already gave a feedback on this one, just going to add some suggestions as well:
- Avoid using
height: 100vh
on a large container like thebody
as this makes the element's height capped based on the viewport/screen's height. Instead usemin-height: 100vh
so that the element will expand if it needs to. - Again, a page needs to have a
main
tag to wrap the main-content so that user will be able to quickly navigate the content using landmark elements. Usemain
on the.container
. - Remember that a website-logo is one of the meaningful images on a site so use proper
alt
for it. Use the website's name as the value likealt="ping"
. - Your
input
right now currently lacks associatedlabel
to it or anaria-label
to which will define the purpose of theinput
element. Always include it so that user will know what they need to give on eachinput
. Make sure thatlabel
is pointing to theid
of theinput
as well. - The notify-button should be using a
type="submit"
attribute. Remember that when abutton
is placed inside aform
element, it defaults totype="submit"
. So imagine if you have a close-button inside theform
without specifyingtype="button"
clicking the close-button will submit theform
. Be aware of this kind of scenarios. - Right now, the error message or the error in general is only seen visually but not really linked to the
input
properly. A proper way of adding errors would look something like this pseudocode:
if ( input is wrong ) input.setAttribute("aria-invalid", "true"); input.setAttribute("aria-describedBy", id of the error-message); else input.removeAttribute("aria-invalid"); input.removeAttribute("aria-describedBy");
The error-message element should have an
id
attribute which is referenced by thearia-describedBy
attribute on theinput
element. By doing that, your user will know that the input is wrong because ofaria-invalid
and they will know what kind of error they made because of thearia-describedBy
. If you like, have a look at this simple accessible form snippet that I have. Let me know if you have any queries about this one.- For the hero-image, you could use a more descriptive
alt
, it could be something like `ping's application user dashboard" or if you could come up with a more descriptive. - Those social-media links could be inside a
ul
element since those are "list" of links. - Each
a
tag that wraps the social-media icon should have eitheraria-label
attribute orsr-only
text inside it, defining where the link would take them. For example, you should usefacebook
as the value if the link would take the user to facebook. - Also, I would put the social-medias inside the
footer
since those aren't really part of the main-content of the page. - Lastly, just reducing some sizes perhaps of the image and some white-spaces:>
Aside from those, great job again on this one.
- Avoid using
- @MordenWebDev@pikapikamart
Hey, awesome work on this one. The desktop layout looks great, just the overall layout is big bigger compared on the design. The site is responsive and the mobile state looks fine, though it could use smaller
font-size
for the mobile state since the heading text is quite big right now and some components as well.For some other suggestions, here are some:
- Heading tags doesn't need to use
font-weight: 700
since by default it is already bold ( 700 ). - Since it has a form-component, it would be nice to use
form
tag for the.input
selector instead ofdiv
so that it will be clear on the markup. - Your
input
right now currently lacks associatedlabel
to it or anaria-label
to which will define the purpose of theinput
element. Always include it so that user will know what they need to give on eachinput
. Make sure thatlabel
is pointing to theid
of theinput
as well. - When submitting an invalid form, I suggest making the error-messages stays present until the user submits again the form, because right now it is hiding the error-messages after a couple of seconds and a user might not be fast enough to read those error-messages.
- Also, those error-messages are only seen visually but not really linked to their respective
input
tag. A proper way of adding those errors would look something like this:
if ( input is wrong ) input.setAttribute("aria-invalid", "true"); input.setAttribute("aria-describedBy", id of the error-message); else input.removeAttribute("aria-invalid"); input.removeAttribute("aria-describedBy");
The error-message element should have an
id
attribute which is referenced by thearia-describedBy
attribute on theinput
element. By doing that, your user will know that the input is wrong because ofaria-invalid
and they will know what kind of error they made because of thearia-describedBy
.- Those error-icons are only decorative images. Decorative images are just images that doesn't contribute to the overall content of the site. They should be hidden for screen-reader at all times by using
alt=""
andaria-hidden="true"
to theimg
tag. - Another idea to implement is to have an
aria-live
element that will announce if the form submission is valid or not. This way, the user will be informed right away on what is the status of their submission. - If you like, you can have a look at this simple accessible form snippet that I have. Let me know if you have any queries about this one.
- Those
terms and services
should be acting as link since on a real site, they are interactive so that user can see those information on another page. Use ana
tag for that text. - Lastly, just about the layout for mobile state, reducing some
font-size
and just making the layout a bit smaller:>
Aside from those, great job again on this one.
Marked as helpful - Heading tags doesn't need to use
- @Mtc-21@pikapikamart
Hey, great work again on this another solution. The desktop view looks fine, it's just a bit pushed down, the
h1
is bit bigger and thebox-shadow
for the form could be made more smoother. The site is responsive though and the mobile state looks fine as well.For some other suggestions, here are some:
- On this one, you could just use
div
instead ofheader
and put it inside themain
tag since this is just a single main-content. Typically, a primaryheader
consist of the site-logo, navlinks and maybe some controls. - Also, since this is just a one-column layout, you could just omit the
display: grid
on thebody
tag and just add like amin-height
on theform
or just add sizing on the elements if needed. Because I noticed that when you resize the screen's height when in dev tools at the bottom, the layout shifts a lot and reduces it's height. - For the slider, the text...page-views is not really suited to a
label
on that one since it is quite ambiguous on what does it mean and if you look at it, changing the slider changes the pricing, it would be nice to make those 2 announced. For this one, you could create anaria-live
element that will announce the changes for the 2 items or use anoutput
tag on those 2 items, the page-views and the pricing. You could either one. - For the
input type='range'
, it would be nice to use eitheraria-label
attribute or asr-only
label
tag. Then use a meaningful text to be used as the value, it could be likepricing selection
something like that or if you could make up more meaningful, that would be nice. - When wrapping up a text-content, make sure that it is inside a meaningful element like
p
tag or heading tag and not using likediv, span
to wrap the text. - For the billing section, since the two are selection of billing choice, instead of using checkbox, you should use radio-buttons whenever there are selections where you can only select one. For that one, you should use a
fieldset
tag to wrap the radio-buttons, asr-only
legend
tag to which contains a text that will describe the set of radio buttons, have 2label
it will be the month and yearly text. I don't recall if I use this markup before when I did this, but I have this simple snippet about theme-toggle if you like. Though it is different, the markup is the same on both. Let me know if you have queries about this one. - Also, this layout is basically a
form
where thestart my trial
text is the submit-button, therefore it would be nice to useform
tag inside themain
to wrap the component and usebutton type="submit"
instead ofa
tag.
Aside from those, great job again on this one.
Marked as helpful - On this one, you could just use
- @Mugeez001@pikapikamart
Hey, awesome work on this one. The desktop view looks great, the site is responsive but at mobile state, at around 340px upwards, the site's contents are being hidden by the screen because the 1000gb text part is not responding well to the site's changes.
Byron already gave a helpful feedback on this one, just going to add some suggestion as well:
- Since a
main
tag is needed for every page to distinguish the main-content of the site, replace thesection
to usingmain
on the .container
selector. - Remove the
height: 100vh
on the .container
. Avoid usingheight: 100vh
on a large container this makes the element's height capped based on the viewport/screen's height. Instead usemin-height: 100vh
so that the element will expand if it needs to. - Instead of using the
max-width
on the.container
use it on thebody
tag, this way, even if you zoom out on your screen, the layout will stay consistent or maybe you can just addbackground-size: 100%
on the.container
. - Remember that a website-logo is one of the meaningful images on a site so use proper
alt
for it. Use the website's name as the value likealt="fylo"
. - Also, when using
img
tag, you don't need to add words that relates to "graphic" such as "logo, image" and others, sinceimg
is already an image so no need to describe it as one. - Those 3 icons below the site-logo are just decorative
img
tags. Decorative images are just images that doesn't contribute to the overall content of the site. They should be hidden for screen-reader at all times by usingalt=""
andaria-hidden="true"
to theimg
tag or onlyaria-hidden="true"
if you are usingsvg
instead ofimg
tag. - Also, it would be nice to change the
span
that holds the each of the icon to using abutton
since it looks like the component is interactive or usediv
. - On a site, always have a single
h1
. Since there are no visible text that are suitable to beh1
, theh1
would be a screen-reader only heading. Meaning it will be hidden visually but present for screen-reader users. On this, theh1
would have likesr-only
class and the text-content should describe what is the main-content is all about. Theh1
could be placed as the first text inside themain
.Have a look at this simple snippet of mine using sr-only h1 comments are already included in there, but if you have any queries just let me know. - When wrapping up a text-content, make sure that it is inside a meaningful element like
p
tag or heading tag and not using likediv, span, strong
to wrap the text.
MOBILE STATE
- Don't use
width: 100vw
since this will only add a horizontal scrollbar at the bottom, since this value does not account the vertical scrollbar's width. - Adjust the
.progress-bar
so that the site will properly resize and won't create the horizontal scrollbar since the content will be prevent to overflow.
Aside from those, great job again on this one.
Marked as helpful - Since a
- @ingegnerlorenzo@pikapikamart
Hey, awesome work on this one. The desktop view looks fine I think, just needed those
padding
orgap
between each card so that it will set like a boundary. Also, if you could adjust thebox-shadow
a little more to dark side, that would be really nice. The mobile state looks fine as well, just for the breakpoint, it is too early. Right now, you are using 0px - 1250px to show the mobile state which is really big for only the mobile state to occupy since the desktop view could use more of those screen time. Adjusting that would be nice.For some other suggestions, here are some:
- For this, you should only have a
main
tag as the direct child of thebody
. Put the 2 heading tag inside themain
since it is part of the main-content of the site. - For the
h1
, thebr
is not needed on that one. What you can do is that, add amax-width
on theh1
so that it will limit the size and that will wrap the second text on another row. Just remember to addmargin: 0 auto
to center it. - The text after the
h1
is not really a heading tag. Usually, a heading tag is not like a long sentence and it should describe or give information on what the section/part of the layout would contain. Usep
tag on this one. main
tag doesn't need top userole="main"
since it is already amain
.- Also in general, adding a
max-width
on thebody
for example will make the site more consistent. If you zoom out on your screen, you will notice that the layout's content stretches along.max-width
will prevent this one. - On each card, you could just replace the
article
bydiv
tag since it just looks like a regular content of the page to which can't be reused on other pages wherearticle
content can be. Adiv
would be fine and each of the heading tag will be enough to structure it. - Also, since you are removing the
h2
after theh1
, useh2
on theh3
on each card so that you won't skip a heading level. - For all the icons on the cards, hide them since they are only decorative images. Decorative images are just images that doesn't contribute to the overall content of the site. They should be hidden for screen-reader at all times by using
alt=""
andaria-hidden="true"
to theimg
tag or onlyaria-hidden="true"
if you are usingsvg
instead ofimg
tag. - Lastly, just keep in mind about the first suggestions about the
padding
andbox-shadow
^^
Aside from those, great job again on this one.
Marked as helpful - For this, you should only have a