Skip to content
  • Learning paths
  • Challenges
  • Solutions
  • Articles
  • Unlock Pro
  • Log in with GitHub
Profile
OverviewSolutions
17
Comments
71
Ken
@kenreibman

All comments

  • Luis Jimenez•760
    @LuisJimenez19
    Submitted almost 3 years ago

    responsive card, with hatml and native css with bem methodology

    #bem
    1
    Ken•935
    @kenreibman
    Posted almost 3 years ago

    Hi @LuisJimenez19 ! Great work on this.

    There are a few ways you could approach this issue. I'm going to give you my take on it. Hopefully you can understand, and it would help!

    • First off, I would change your card__image--active into an a (anchor) tag.

    • I would change that into an anchor tag because it makes it more user-friendly to click on the NFT image. It's a little bit of a pain for some users when you have to click on very specific spots of a card/image to open the link. It's better when you just make the whole container click-able and make the actual button (the eye) a decoration, or a "fake button" as I like to call it. The user will still think the eye is a button.

    • You don't need an active class in this situation since you're not using JavaScript. I would remove all the hover states you have right now. I would also remove the opacity and background-color on your card__image--active.

    • Add a position: relative to your card__image--active, move your background-image from your card__image div to the card__image--active div and make a pseudo element on that. So it would be:

    .card__image--active {
         ... other styling
         background-image: url(../images/image-equilibrium.jpg);
         position: relative;
    
    }
    
    .card__image--active::after {
         content: 'url(image)'  /* <-- this is your eye image */
         position: absolute;
         top: 50%;
         left: 50%;
         transform: translate(-50%, -50%); 
         opacity: 0;
         visibility: hidden;
    /* (the top, left, and transform properties centers the eye on the container) */
    }
    
    • Then set a hover state on your card__image--active and your card__image--active::after (pseudo element)
    .card__image--active:hover {
         opacity: 0.8; /* this lightens the image */
    }
    .card__image--active:hover::after {
         visibility: visible;
         opacity: 1;
    /* this makes the previously hidden eye icon (opacity: 0) appear when the card__image--active div is on hover by the user and changes it to (opacity: 1) */
    }
    

    Basically the logic in this, is that the eye icon is currently hidden indefinitely. Only when the user hover overs the --active container, it will become visible, and at the same time the container behind it has its opacity go down. This works because the pseudo element wont receive the opacity effect and they will work simultaneously.

    I hope this helps! I'll be honest, I did not test any of the css when I wrote it. so please get back to me if there are any issues.

    Marked as helpful
  • Dalia Muj•40
    @DaliaMuj
    Submitted almost 3 years ago

    Order Summary Component

    1
    Ken•935
    @kenreibman
    Posted almost 3 years ago

    Hi @DaliaMuj ! I'm happy that you enjoyed the project, you did a great job!

    I have a few things that stand out to me which I hope would benefit you:

    • The first thing I notice is your background. Most times when you set a background with an image, your image will repeat indefinitely. Sometimes it's great. However in this challenge, to match the original design, you only need one background image.

    • In order to prevent that, in your css, give the body where the background-image is being set, another line called: background-repeat: no-repeat.

    • Then give it another line background-color: and set the color to the slightly lighter blue that the ReadMe file gave you, and you've got a very similar looking background to the original!

    • There are some weird horizontal scrolling in your project which I also fixed by change your height: 100vh to min-height: 100vh

    • I would also give your body a margin: 0 and padding: 0 to reset any default margins and padding that html puts onto your elements.

    • Usually you want your site's content to be wrapped in a main element. I would change your div with the class of container to a main element with the class of container to make it semantically correct. <main class="container"></main>

    • The two buttons - "Proceed to Payment" and "Cancel Order" are currently input tags which are strictly used for form fields, like when you want a user to input their email/password. In this case, you wouldn't want that here. Instead I would use an a tag (anchor tag) and style them. You did it correctly for the "Change" button. Anchor tags are also more "style-able" if you give it a display: block as well.

    • Also remember to style your :hover and :focus states for those two buttons to visually show that it is interactable.

    I hope this helps, great job! Keep it up!

  • Amritpal Singh•200
    @AmritPal91
    Submitted almost 3 years ago

    Intro-section-with-dropdown-navigation-main

    #sass/scss
    1
    Ken•935
    @kenreibman
    Posted almost 3 years ago

    Hi @AmritPal91 ! Great work :) Your site is nicely done using semantic elements!

    Here are some suggestions that I have:

    • I noticed that your navigation bar is not properly structured and styled. That's probably why you had a lot of trouble making it responsive, and you were forced to switch to the tablet layout very early. I always recommend using Flexbox to style your navigation. Looking at your site, I don't see any uses of Flexbox, and you will realize how easy it is to align content using Flexbox.
    • Take a look at this video for making a fully responsive navigation menu using flexbox:
    • Also take a look Kevin Powell's channel for countless flexbox tutorials like this:

    If you are serious in learning web development, I recommend making this site again, or choosing a very similar challenge on here using Flexbox.

    I hope this helps! I can tell you're on the right track, you just need the right tools :)

  • Luis•970
    @luis08201
    Submitted almost 3 years ago

    Manage landing page

    2
    Ken•935
    @kenreibman
    Posted almost 3 years ago

    Hey @luis08201 ! Great submission. I love how you pushed yourself in using SCSS. Some suggestions from an industry standpoint:

    • Check your accessibility report that Frontend Mentor offers you, you have quite a few accessibility and HTML issues.

    • Your BEM naming is a little off. You're giving modifier classes too often; Usually to every third word in your element class name. the double hyphen -- are for modifier events like btn__large--active or photo__img--highlighted in your case, header--nav or --link should be __link or main-header__nav simply put, you should rarely have to use --

    • I see you're using section elements which is a great step into a well-structured page. However, you're lacking a main element that surrounds those section tags to make it semantically correct. You could wrap all your content inside the body tag with a main element.

    • I also suggest you put a nice descriptive alternative text alt="" whenever you use an image for accessibility purposes. Same goes for your anchor links as well. I see you're getting a lot of those errors in your footer.

    • If your image is purely decoration and you absolutely believe that it doesn't need descriptive text for accessibility, you can hide that from screen readers by putting an aria-hidden="true" in your img tag. You can read more about that here: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden

    I hope this helps, you're doing great!

    Marked as helpful
  • Anaz Anoiar•160
    @AnazAnoiar69
    Submitted about 3 years ago

    Four Card Feature Section

    #sass/scss
    4
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Professionally and personally I use the clamp() function for truly responsive typography. This will genuinely take your responsive game up to a professional level.

    Check out this video: https://youtu.be/U9VF-4euyRo

  • dannyguzman31•20
    @dannyguzman31
    Submitted about 3 years ago

    QR code component challenge hub

    3
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Nice job on the submission! Unfortunately the preview image isn't appearing on here, but I looked at your live site and it looks great.

    I noticed you were centering the div twice with your body and container. Your body could have been your container in this case, and the container could have been your items. In my opinion it was not necessary to do that.

    I would also recommend when you're centering a div to use min-height: 100vh instead of height: 100vh to make responsiveness easier in future projects. Setting a fixed height like that may bring some issues in bigger projects. I would also stray away from setting a fixed width like 100vw, as well, for parent elements. The set width also applies to containers, or cards as well. I would set a max-width instead, which is more responsive friendly, and you can also reassign the dimensions in a media query when the screen gets bigger/smaller.

    As you do bigger projects on here, you should also start giving your elements more "meaningful" names. Always think about someone else reviewing your work, and wondering if they would be able to understand what each line is referring to. If it was a bigger project, I would have no idea what p1 and p2 is referencing. Start using naming conventions like BEM early, and maybe start putting comments in your code as well, which will definitely help people in this community when they review your code.

    I hope this helped!

    Marked as helpful
  • Florin.Porut•380
    @zastar23
    Submitted about 3 years ago

    Responsive article preview with flex and JS

    2
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Hey! Great submission!!

    Instead of having share__options as a child element of your share__section, I would have it as a child element of your main content. That way your position absolute would be within that container, making it easier for you have the same position.

    I hope this helps!

    Marked as helpful
  • Juraj S•310
    @Terak-10
    Submitted about 3 years ago

    Responsive Landing page using flex-box

    #sass/scss
    1
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Hey! Great submission.

    I was wondering why you built the page entirely using flexbox. Did you want to practice flexbox? Are you more comfortable with flexbox? I feel like you could have a lot less lines of HTML and CSS if you use grid.

    • Some of the paragraphs and sub-heading are the wrong font-family as well.
    • I don't think you included a function mobile menu as well, which I would have loved to see.

    Regardless, the design looks great, and you did a great job making it responsive!

  • Misiu•50
    @misiucodes
    Submitted about 3 years ago

    Intro component with signup form

    3
    Ken•935
    @kenreibman
    Posted about 3 years ago

    I forgot to add on... for your JavaScript, instead of changing the innerHTML, I would create a class that reveals the error text like, .show-error with display properties, and add the show-error class to the element with .classList.add('show-error')

    changing the innerHTML is not the most correct way to do it, as well as setting the opacity to 1 and 0 does not hide it for people with screen readers so they will still get an error message regardless of if you can see it on the screen or not.

    You can take a look at my code here as well.

    Marked as helpful
  • Misiu•50
    @misiucodes
    Submitted about 3 years ago

    Intro component with signup form

    3
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Hey @misiucodes! Nice job! Since you asked a few questions in your description, I'll give you some feedback.

    could I have done anything different to make the CSS file cleaner?

    • People may disagree, but I like to name all of my HTML elements, including heading, p, etc. since people looking over your code may not know exactly what p you are referring to, when there are multiple paragraph elements in the document.
    • is this optimized for mobile and different screen sizes?*
    • Your media query breakpoint is way too late. I would switch from the desktop to tablet/mobile view at ~1000px for this project. A tablet user would have a hard time seeing their input as the form field becomes too narrow in width. That leads me to the next one,
    • Set a max-width in rem units for your main container, wrapper in your case. It helps with responsiveness, and you can always set a new max-width for your container in a media query.

    Also look at your reports and try to fix some of your accessibility issues as well.

    • The icon-error just needs an aria-hidden= "true"
    • Also using correct HTML5 semantics, you should always wrap your content in a main tag. Your case you could just change your wrapper div into a main class="wrapper".

    I hope this helps!

    Marked as helpful
  • batuhan•60
    @bacayo
    Submitted about 3 years ago

    article preview component

    1
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Great job! The style looks great.

    I would say the only issue with your component challenge here is that your share button is improperly functioning. I am also going to suggest better js code for the share button.

    • Instead of adding a style.display on each element, it would be better if you toggled your classes.
    • In your style.css I would make a class called .show or .active or any name that indicates an active state with a display: flex; property.
    • Then make a click event listener for your shareBtn
    shareBtn.addEventlistener('click', () => {
        social.classList.toggle('active') 
    });
    

    This would also, I believe fix the fact that your social button disappears, denying the user from closing the social pop-up as well.

    I hope this helps! Please let me know if you have any questions.

    Marked as helpful
  • Xuan•200
    @jason89521
    Submitted about 3 years ago

    Built to get familiar with Tailwind CSS

    #next#tailwind-css#typescript#react
    1
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Hey! Awesome design. Not sure why the images aren't showing up on the preview, but I saw your live site and it looks great. Amazing job with the responsive design as well.

  • audina sitanggang•100
    @audinastgg
    Submitted about 3 years ago

    Huddle landing page with a single introductory

    2
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Good work! Just a few suggestions.

    • I'm not sure why you put a transform: scale(0.8); on your container, it's not necessary.
    • I would also put a max-width on your container div as well, since screen resolutions beyond 1440px gets your content too stretched, then I would center the container div.
    • The font for your button is not correct as well, and I would give that a little more padding to the button to make it "bigger" and match the original design more.

    I hope this helped, keep it up! You're doing a good job!

    Marked as helpful
  • Peter Hannell•200
    @peterhannell
    Submitted about 3 years ago

    Huddle landing page with a single introductory section challenge hub

    1
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Great job on the use of proper HTML5 semantics tags, and the use of rems!

    Since you already have a good understanding of not using px and instead using rems, I'm going to send you this article that might be interesting for you to read.

    Although I really recommend you to read it, summarized, the article talks about the benefits of setting the base font-size to 62.5% which basically makes 1rem = 10px. Something you were already close to doing!

    Now you might see the pattern, and how rems become much easier to handle. If you want a 255px container, just set it to 25.5rem.

    From experience, I also suggest giving classes to your heading tags specific names instead of leaving it as h1 so it's easier for someone going over your work to understand what is going on.

    I hope this helps, and keep it up!

    Marked as helpful
  • Rapha445•100
    @Rapha445
    Submitted about 3 years ago

    Article Preview Component - Mobile-first Responsive CSS Javascript

    #bem
    3
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Sure! Your viewport width at 1440px currently looks like this

    About the fixed height and width, I mean you instead of using height with set px I recommend using min-height with rems and max-width for containers.

    Marked as helpful
  • Jaron Paige•130
    @jdpaige
    Submitted about 3 years ago

    FAQ Accordion using HTML and CSS (no JS)

    1
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Great job! You're so close to the final result, and I commend your hard work and effort :)

    On the desktop layout for the left illustration section, this project requires multiple layers that act as a position: relative, in addition to uses of z-index, and the illustration ends up being an position: absolute that doesn't get hidden by the main card container.

    It might be hard to see, but take a look at my code or any Youtube video that covers this solution.

    Your viewport width at 375px has the card overflowing. Although I haven't checked your actual code, this is due to you setting fixed heights such as using the height and width property. I would recommend you using max-width for containers and min-height for your parent body elements to establish a height.

  • Bazthos•430
    @Bazthos
    Submitted about 3 years ago

    Huddle Landing Page

    1
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Great submission!

    I really like your use of grid for the main section.

    I think you should start your desktop-to-mobile breakpoint at ~1000px Since the viewport widths between 1000px and 700px look awkward as a tablet user.

    • Two out of the three social icons are missing a hover state as well.

    Other than that, it looks great. Keep it up!

    Marked as helpful
  • Mustapha•540
    @muben88
    Submitted about 3 years ago

    Sunnyside agency landing page

    1
    Ken•935
    @kenreibman
    Posted about 3 years ago

    Great submission!

    Your desktop layout looks great, and you did a great job making it responsive as well. You should add a text-transform: uppercase to your header h1 to match the original design.

    For your mobile layout, I initially though about limiting the width like you did with a max-width but I came to a conclusion that it looks a lot better when the content fills the entire mobile viewport width. Although it is your design choice, I believe mobile users would have an easier time reading content if it took their entire width.

    Marked as helpful
Frontend Mentor logo

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