Skip to content
  • Unlock Pro
  • Log in with GitHub
Profile
OverviewSolutions
20
Comments
24
P
Dave Quah
@Milleus

All comments

  • JarodT77•10
    @JarodT77
    Submitted over 1 year ago
    What are you most proud of, and what would you do differently next time?

    I am proud to have been able to carry out the project with the knowledge that I was able to acquire thanks to the internet but also to the community. what I would like next time and on other projects is to be faster

    What challenges did you encounter, and how did you overcome them?

    The difficulties I encountered were the box sizing problem and the responsive side. As you can see my project is not exactly the same as the solution but I did everything possible to get as close as possible.

    What specific areas of your project would you like help with?

    I look for help in everything related to frontend I'm just starting out so I want to assimilate as much knowledge as possible and carry out as many projects as possible to improve myself

    QR Code Component

    #accessibility#cube-css
    1
    P
    Dave Quah•650
    @Milleus
    Posted 8 months ago

    Hi there,

    Good first attempt at the challenge. To improve your solution, I would recommend learning and applying CSS Flexbox or CSS Grid techniques. These are extremely useful for aligning content.

    Here are a couple of games that you could play to test out what you've learnt as well:

    • Flexbox Froggy
    • CSS Grid Garden

    Happy coding :)

  • falguni-ux•10
    @falguni-ux
    Submitted about 2 years ago

    Using basic html and css

    1
    P
    Dave Quah•650
    @Milleus
    Posted about 2 years ago

    Greetings! 👋 Congratulations on completing the challenge.

    I have some suggestions for improvements:

    IMAGE ALT TEXT

    • Consider having a more meaningful alt text for the QR code image. For example, <img src=“…” alt=“QR code to frontendmentor.io” />.

    HEADING STRUCTURE

    • Consider having a unique h1 per page that describes what the page is about. Having the right heading levels would help screen reader users and also search engines. More details about heading structure here.

    LANDMARKS

    • The <main> landmark is missing, consider renaming the <div> to <main>. Landmarks help to define major sections of your page and can help screen reader users a great deal. More details about landmarks here.

    I hope this helps and happy coding! 😊

  • Aditya Baranwal•200
    @CHARLIEADITYA
    Submitted about 2 years ago

    qrcode

    #react
    1
    P
    Dave Quah•650
    @Milleus
    Posted about 2 years ago

    Greetings! 👋 Congratulations on completing the challenge.

    I have some suggestions for improvements:

    IMAGE ALT TEXT

    • Consider having a more meaningful alt text that explains the purpose of the QR code image. For example, <img src=“…” alt=“QR code to frontendmentor.io” />.

    HEADING STRUCTURE

    • Consider having a unique h1 per page that describes what the page is about. More details about heading structure here.

    I hope this helps and happy coding! 😊

  • Magdalena•500
    @magsaram
    Submitted over 2 years ago

    3 column preview card component / flex

    1
    P
    Dave Quah•650
    @Milleus
    Posted over 2 years ago

    👋 Hello!

    Congratulations on completing the challenge. 🥳

    There are a few things that I think would make this even better:

    • Use only one <h1> per page, for accessibility and SEO. In this case I'd see "Sedans", "SUVs" and "Luxury" of the same logical level, so I'd approach this by adding a <h1> with a screen reader only class (visually hidden but still picked up by screen readers), and have "Sedans", "SUVs" and "Luxury" as <h2>. Here's a good video by Kevin Powell sharing more about headings.
    • In the footer, to be more semantically correct, use <p> instead of <div> for texts.
    • For the rounded borders, an alternative approach is to set border-radius: 8px and overflow: hidden on the parent. This could make things a little easier as the border-radius would not need to be updated in the media query.
    • For the anchor elements CSS, because the font-size isn't explicitly set and there's a fixed pixel height and width set, there will be text overflowing out of the element when the base font-size increases (i.e. someone who increased font size on their device). Most cases of fixed widths or heights could be replaced with min-width or max-width etc, so that it scales better. Another approach would be to use padding instead. I'd also recommend using em or rem units instead of px for better accessibility.

    Nice work and keep up the good job! I hope this helps and happy coding! 😊

    Marked as helpful
  • Mochimooo•50
    @mochimooo
    Submitted over 2 years ago

    Order Summary Component Challenge

    1
    P
    Dave Quah•650
    @Milleus
    Posted over 2 years ago

    👋 Hello!

    I think using :is is fine, but I would probably move the cursor: pointer to the base element (non-hover) instead.

    More importantly though, it would be a lot better if the proper interactive HTML elements, i.e. <button> or <a>, were used instead of <div>, <u> and <b>. Using the proper elements would help with accessibility greatly - able to navigate on with keyboard, pressing "Space" or "Enter" triggers the element, screen reader would announce that it is a clickable button or link, etc.

    As for how to anchor the footer note, my approach was to use CSS grid. I'd declare 3 rows (1fr, auto, 1fr) and have the <main> in row 2 and <footer> in row 3. Row 1 is an empty row to help keep <main> centered perfectly (thus why it is 1fr, similar to row 3).

    I hope this helps and happy coding!

    Marked as helpful
  • luking•230
    @alululululuer
    Submitted over 2 years ago

    Single price grid component

    #accessibility
    1
    P
    Dave Quah•650
    @Milleus
    Posted over 2 years ago

    👋 Hello!

    This is a nice solution - I like the use of HTML elements and CSS custom properties.

    I think a few things that would make this even better:

    • The "attribution" as a <p> instead of a <div>, and if it could fit in the same viewport without scrolling.
    • Addressing the accessibility concerns with Safari browser for list-style: none
    • Perhaps consider utility classes for font size, weight and color instead of declaring them with headings (h1, h2). This gives more flexibility as most times headings aren't always styled the same.

    Really nice! I look forward to seeing more solutions from you. Happy coding!

    Marked as helpful
  • P
    Alper•1,090
    @adonmez04
    Submitted over 2 years ago

    3-column-preview-card-component-v2.0

    1
    P
    Dave Quah•650
    @Milleus
    Posted over 2 years ago

    👋 Hello!

    I think one thing that could be improved on is the heading levels. I'd view "Sedans", "SUVs" and "Luxury" as the same heading, but I also understand that we do not want multiple <h1>.

    I think it would be better to declare a <h1> but set it for screen readers only (meaning not visible but screen reader would still pick it up), and keep "Sedans" as a <h2> with "SUVs" and "Luxury". E.g.

    // CSS
    .sr-only {
      position: absolute;
      top: auto;
      height: 1px;
      width: 1px;
      overflow: hidden;
      clip: rect(1px, 1px, 1px, 1px);
      white-space: nowrap;
    }
    
    // HTML
    <h1 class="sr-only">Learn more about our cars</h1>
    ...
    <h2>Sedans</h2>
    <h2>SUVs</h2>
    <h2>Luxury</h2>
    

    Another suggestion is that for images that are decorative, the alt should be alt="" instead of alt="#", or alternatively you could also set aria-hidden="true" to hide it from screen readers.

    Some useful resources:

    • About heading levels by Kevin Powell
    • Decorative images
    • aria-hidden

    I hope this helps and happy coding~

    Marked as helpful
  • Bruno Costa•40
    @BrnCosta
    Submitted over 2 years ago

    Interactive card details with Tailwind CSS

    #tailwind-css
    1
    P
    Dave Quah•650
    @Milleus
    Posted over 2 years ago

    👋 Hello! Congrats on completing the challenge.

    Tailwind actually comes with preset font-sizes, I'm curious why not use those instead? e.g. text-xs which is 0.75rem (12px), text-sm which is 0.875rem; (14px), etc?

    • Tailwind font-size

    Alternatively, font-size could be overwrote with your own set of sizes via tailwind.config.js.

    Also, one tiny trick that could help with writing lesser code is to use the gap (flex and grid) or the space-y and space-x utilities. They help to add gaps or margin between child elements so you wouldn't need to keep adding margins to every child element 😊

    • Tailwind gap
    • Tailwind space between

    Hope this helps and happy coding~

    Marked as helpful
  • Bel030•10
    @Bel030
    Submitted over 2 years ago

    QR code solution

    1
    P
    Dave Quah•650
    @Milleus
    Posted over 2 years ago

    👋 Hello! Congratulations on completing your first challenge.

    Typically you'd want to add a min-height: 100vh to the body so that the minimum height stretches to match the viewport. After that we could use Flexbox or Grid to help with centering. E.g.

    body {
      display: flex;
      align-items: center;
      justify-content: center;
    }
    

    or with grid

    body {
      display: grid;
      place-items: center;
    }
    

    I'd suggest reading up more about Flexbox and Grid. MDN website is a good source for learning. There are also Flex/Grid game websites to help with learning.

    • MDN Flexbox
    • MDN Grids
    • Flexbox Froggy
    • Grid Garden

    Other than the issues highlighted in the accessibility report, one other thing that could be improved is to change the <div class="attribution" to a <p> tag instead as it would be more semantically correct.

    • MDN p element
    • MDN div element

    Hope this helps and happy coding~

    Marked as helpful
  • Kierro DeCampanille•130
    @Kirp
    Submitted over 2 years ago

    FAQ accordion card solution

    1
    P
    Dave Quah•650
    @Milleus
    Posted over 2 years ago

    Hello! Congrats on completing the challenge. I recall having a rough time with the image placements as well heh..

    Anyways, I wanted to share that one of the non-JS solutions is to use HTML <details> and <summary>.

    But this requires a little extra CSS to remove the disclosure triangle for webkit-based browsers.

    Hope this helps and happy coding~

    Marked as helpful
  • Nikolas Papenfus•380
    @NPM0486
    Submitted over 2 years ago

    Simple solution using Flex and Grid

    1
    P
    Dave Quah•650
    @Milleus
    Posted over 2 years ago

    Hi Nikolas, congrats on completing the challenge 🥳

    There seem to be an issue where when the mouse is at the center of the picture (where the invisible "eye" is), the overlay and eye disappears. I believe this is because in CSS the effect triggers on .overlay:hover, but when the mouse is in the center it is hovering over the invisible <img class="view"> instead of the <div class="overlay">.

    One way to fix it is to set pointer-events: none to the <img class="view">, https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events.

    Another way to fix this is to remove <img class="view"> and add it as a background-image to the overlay instead.

    I hope you wouldn't mind if I share my solution with you. It uses background-image as well as :after - https://www.frontendmentor.io/solutions/nft-preview-card-component-rJRIRaSVc

    Hope this helps and happy coding!

    Marked as helpful
  • Martin Amankwaa•40
    @MartyOfMCA
    Submitted about 3 years ago

    HTML & CSS Simple Layout

    #bem
    1
    P
    Dave Quah•650
    @Milleus
    Posted about 3 years ago

    Hello,

    The font import URL is incorrect. Go to the font links and select the font weights/styles, a side window will pop up with the selected fonts and guide you on how to import the fonts.

    • https://fonts.google.com/specimen/Fraunces
    • https://fonts.google.com/specimen/Montserrat

    The import should look something like this

    @import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,700&family=Montserrat:wght@500;700&display=swap');
    

    Hope this helps!

    Marked as helpful
  • Ranjana Mukhia•150
    @ranjanamukhia
    Submitted about 3 years ago

    profile card with html , css mobile and desktopversion

    1
    P
    Dave Quah•650
    @Milleus
    Posted about 3 years ago

    Hi @ranjanamukhia 👋

    Congrats on completing the challenge 🎉

    To your question on how to fix accessibility issues:

    • The page needs a level-one heading, meaning it needs a <h1> element. More information here. If the existing design does not have an appropriate text to be a h1, you can add your own h1 title and make it visibly hidden but still picked up by screen readers.

    • The <div class="attribution"> needs to be within a landmark, landmark refers to elements such as <header>, <nav>, <main>, <footer>. There are several ways to fix this, either move the <div> into the <main>, wrap it within a <footer>, or changing the <div> to a <footer> since it makes sense in this case. More information here.

    Hope this helps, happy coding!

    Marked as helpful
  • Kariman Medhat•170
    @KarimanMedhat
    Submitted about 3 years ago

    Social proof challenge

    1
    P
    Dave Quah•650
    @Milleus
    Posted about 3 years ago

    Hi there!

    I noticed that you used a lot of position: absolute and transform: translate to shift elements. This makes things a lot more complicated to work with, I would suggest not to use this excessively.

    The layout can actually be achieved with CSS grid and flex. If you're comfortable with watching a video guide to this challenge, here's a good video on how Kevin Powell approached this.

    In my opinion, this challenge is one of the harder newbie challenges. I hope this does not discourage you. Keep at it and happy coding~

    Marked as helpful
  • Pratyusha Majumder•280
    @YushaChan31
    Submitted about 3 years ago

    html, css

    1
    P
    Dave Quah•650
    @Milleus
    Posted about 3 years ago

    Greetings,

    Congratulations on completing your second challenge!

    transform: translate(-50%, -50%); means to move an element to the left by 50% of the current width of the element, and also up by 50% of the current height of the element.

    This is typically paired with position: absolute; top: 50%; left:50%; to center the element horizontally and vertically. For example,

    .parent {
      position: relative;
    }
    .child {
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
    

    You can read more about this under "Is the element of unknown width and height?" at centering css complete guide.

    You can also try adding the position absolute and translate code snippet to your eye image and see it works :)

    I would also suggest looking into using <button> or <a> for interactive elements as it would improve the accessibility of your solution.

    I hope this was helpful for you, happy coding~

    Marked as helpful
  • Dirk•20
    @Kerraan
    Submitted about 3 years ago

    QR-code component html & css

    1
    P
    Dave Quah•650
    @Milleus
    Posted about 3 years ago

    Hi there 👋,

    Congratulations on completing your first challenge! 🥳👏🎉

    I have some feedback for your consideration:

    1. There are some landmark issues, you can fix it by changing the <div class="center-screen"> to <main class="center-screen">. More about landmarks here.

    2. Always have the alt attribute with <img> elements. It helps to add a text description for screen reader users. If there are decorative images, you can have alt="". More about decorative images here.

    3. Setting font-size: 62.5% on html is... .... a hot controversial topic and non-standard 😅. There's been a lot of debate about this recently on Twitter 🙈. Be careful when using this in team projects because a lot of developers are very used to working with 16px base font size, you may incur a lot of unnecessary wrath.

    Happy coding~ 😊

  • bugvlopper•200
    @bugvlopper
    Submitted about 3 years ago

    simple pages build in react

    #react
    1
    P
    Dave Quah•650
    @Milleus
    Posted about 3 years ago

    Hi there 👋,

    Congratulations on completing this challenge 🥳👏🎉.

    I have a small feedback, and that is when using list-style: none; be careful of the accessibility concerns.

    You can read more about it at this MDN website link and how to fix the issue (shakes fist at Safari ✊).

    Happy coding~

    Marked as helpful
  • Harsh Patel•30
    @HarshP64896
    Submitted about 3 years ago

    Order-Summary

    #bootstrap#sass/scss
    2
    P
    Dave Quah•650
    @Milleus
    Posted about 3 years ago

    Hi there 👋,

    Congratulations on completing this challenge 🥳👏🎉.

    I have a couple of suggestions on top of what Abdul has mentioned:

    1. I would strongly recommend to use the right semantic elements, either <a> or <button>, for the "Proceed to Payment" and "Cancel Order" button instead of a <div>. At its current state, a keyboard user would not be able to interact with those elements.

    2. For decorative images, you can leave the alt tag as an empty string. For example, <img src="images/icon-music.svg" alt="">.

    Happy coding~

    Marked as helpful

Stay up to datewith new challenges, featured solutions, selected articles, and our latest news

Frontend Mentor

  • Unlock Pro
  • Contact us
  • FAQs
  • Become a partner

Explore

  • Learning paths
  • Challenges
  • Solutions
  • Articles

Community

  • Discord
  • Guidelines

For companies

  • Hire developers
  • Train developers
© Frontend Mentor 2019 - 2025
  • Terms
  • Cookie Policy
  • Privacy Policy
  • License

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub