Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found

All comments

  • Rodrigo 480

    @RodrigoHLC

    Submitted

    I'd been looking forward to working on this project for days, and I'm very happy with how quickly I completed the markup and CSS. The screen responsiveness works GREAT🙌🏻🙌🏻 Even the Javascript didn't take a huge amount of time. I think I completed about 90% of the thing in a workday. The other 10% was me leaving no stone unturned, planning for every possible scenario when writing input (e.g.: making sure it's not possible to write two operands together like "++", "/*", making sure you can't write something like "00000" or "0.03.2.0") and some things that were a little more difficult to fully figure out; as anyone who's programmed a calculator will tell you (this is my second time), the function for the Period tends to be the most annoying, head-scratching one🥴

    Extra mile

    • Played a little with the box shadows on the buttons to make them look a little more - 3D and make them look like they're being pressed down.
    • Added a custom scrollbar to the calculator's screen in case the input gets too long.
    • Used eventListeners to make sure you can also use it with your keyboard, though this is a fairly standard "idea".
    • I did not use prefers-color-scheme but I did use localStorage to make sure the user's preferred color scheme is saved.

    Issues I wasted a lot of time in the end trying to get the buttons to work on mobile, but I couldn't for-the-life-of-me get it to work, at least not on my Moto G7 Play (since I had to delete and re-deploy on Github everytime I made changes, I only tried to make the Number buttons responsive on mobile, but I couldn't do it). Any advice here will be highly appreciated. I tried using touchstart, touchend, onclick, and even changing the element for the calculator's screen from a <textarea> to an <input> element, but to no avail😤😤

    Here's a relevant snippet of my code. numbers is a node list of <button> elements. Clicking works, tapping doesn't:

    // EACH BUTTON HAS A value ATTRIBUTE SET TO ITS NUMBER
    numbers.forEach(num => num.addEventListener("click",()=>{
        numberFunc(num.value)
    }))
    
    numbers.forEach(num => num.addEventListener("touchstart",(e)=>{
        e.preventDefault();
        numberFunc(num.value)
    }))
    

    @crsimpson5

    Posted

    Hey Rodrigo,

    Great job on this! I love the 3d buttons, and it works great on my phone.

    Regarding mobile development: if you use VSCode and Live Server, you can connect to the server on your phone to see changes immediately. Here's a simple how-to: https://medium.com/@pavankapoor31/how-to-use-vs-code-live-server-local-host-on-mobile-phone-8b38a62117d2

    0
  • @ozkrTr

    Submitted

    I present to you my solution for this challenge, I hope you like it. I was tempted to use JavaScript because I wanted the card's shadow to change when hovering over the title. However, I later realized that it cannot be done with CSS because you cannot modify a parent element in response to an event from a child element. I am glad to continue enriching my knowledge with each challenge and the support of your comments.

    @crsimpson5

    Posted

    Hey Oscar,

    There kinda is a "parent selector" in CSS now. Check out the :has() selector.

    Try something like this:

    .card:has(.card__title:hover) {
        ...
    }
    

    Nice job 👍

    0
  • Kimo Spark 2,230

    @kimodev1990

    Submitted

    Hi there 👋, This is my solution for this challenge.

    📑 Features:-

    • Achieved 100% score for Accessibility, SEO & Best Practices and 98% score for Performance in Desktop Lighthouse. 📊
    • Achieved 100% score for Accessibility, Best Practices and 96% score for Performance in Mobile Lighthouse. 📊
    • Code implemented using BEM Methodology 💻
    • If else statement, addEventListener( ), Email Validation 📝
    • DOM 📝 -classList.add/remove( ) 📝
    • Simple Transition background-color while hovering on button. 🎬
    • Clamp( ) method for responsive design ( changing according to viewport dimensions and suiting with different layout devices ). 💻 📱
    • FlexBox 📦
    • Image changes relative to the viewport width (@media) by using Picture tag ✨
    • Code formatted using Prettier 💻

    I'll appreciate any suggestions & feedback to achieve better performance.

    Thank you. ✌️

    Newsletter sign-up form Responsive Design

    #accessibility#bem#lighthouse

    1

    @crsimpson5

    Posted

    Hey Kimo,

    Nice job on your solution. It looks great for desktop viewports. I like the button hover effect too.

    The main problem is that it doesn't work for small viewports. With your clamp functions your font size is getting down to 7px -- way too small. Try testing it out on your phone and tablet if you have one.

    Also, you don't need widths on every element. Elements should resize based on their container's width. Here's a resource that may help out: Be The Browser’s Mentor, Not Its Micromanager.

    2
  • Maksim 590

    @MaxTarasevich

    Submitted

    An interesting project in terms of working with background properties.

    I decided to try using the clip-path property to give the appropriate shape to the background of the first two sections.

    I will be glad to any feedback!

    @crsimpson5

    Posted

    Great idea to use clip-path for the background shapes!

    Your solution is spot-on.

    You can try using text-wrap: balance on your h1.

    1
  • @rmartin93

    Submitted

    The background image stuff was super difficult for me. I have mostly designed web apps that display data, so doing something "pretty" was hard. I still don't know the best way to get the gray leaves on the screen. The figma file has them upside down and flipped and I don't know how to do that in CSS.

    Other than that I think it's pretty spot on. I didn't bother with the email verification just because I got bored and that's not hard to add later.

    I did this with Bootstrap 5.3 and React. I don't like using React-Bootstrap because it doesn't keep up with the latest version of Bootstrap, so if you notice a way I can implement bootstrap better let me know. The src/components/NavBar.js file is a good example of having to do a lot just to make a simple modal go away.

    @crsimpson5

    Posted

    Hey Ryan, great job on this! It looks great and I love the dark mode too.

    Here's a couple of things to consider:

    • The background-position properties aren't working in Chrome. You can change them to something like background-position-y: 27%;
    • If you refresh on a page other than home you get a 404. You'll need a Vercel config to make react-router work: https://stackoverflow.com/a/65644138.

    Keep up the good work!

    Marked as helpful

    1
  • @crsimpson5

    Posted

    Hey Ossy, great job on your solution. The styling looks great and you've matched the design really well.

    A couple things you can improve:

    • The inputs start with a value of "0", so if I select the input and type "2" it becomes "20". You can initialize the state with null to prevent this.
    • The inputs would be better suited for type="number". That way the app doesn't break if a letter is entered. If you want to remove the arrows for a number input here's a link on how to do that: https://www.w3schools.com/howto/howto_css_hide_arrow_number.asp.
    • There's some overflow around 630px screen size. One solution would be to allow the flex container to wrap.

    Keep up the good work! 😃

    Marked as helpful

    0
  • P

    @Chaffexd

    Submitted

    The only feedback I have for myself is that my JavaScript is I feel, super messy. I feel there must be a better way to assign the hidden part in a neater way in JS. Any suggestions on this would be appreciated!

    Feedback encouraged!

    Expenses chart

    #accessibility

    2

    @crsimpson5

    Posted

    Hey Shane, nice job on your solution! Your styles look really good. Regarding your JS, you could use the forEach method to reduce the amount of repeated code. You already have the right element selector, so you just need to loop over each element.

    Example:

    // Edit: convert to an array so you can use forEach
    Array.from(bars).forEach((bar, index) => {
        bar.style.height = ((data[index].amount) * 2.86 / 18) + "em";
    
        // do the same for event listeners
    }
    

    Let me know if you still need help 🙂

    0
  • Elaine 11,420

    @elaineleung

    Submitted

    This was a very straightforward landing page, but this took me a lot of time; it might even be the one project I've spent the most time on so far. The positioning of the elements was challenging as usual, but the most difficult and time-consuming task was trying to understand some of the design choices (such as having two very similar sans-serif fonts, and then where they get used in the text was not as apparent as I thought). Anyway, at least I now learned how I can position elements off the page and have it be responsive! I'm just glad it's over and we can all move on with life 😅

    Very minimal animation here (or much of anything really) since I just wanted to focus on the important parts of the CSS, which is messier than usual as I wanted to try to structure it the way similar to what Kevin Powell did in his latest tutorial series. I also wanted to bring in some CUBE CSS since Kevin did that also. In short, a lot of experimenting, not too much organizing and therefore will clean up and refactor later.

    As always, please feel free to let me know whether something isn't working the way it should. Thank you everyone!

    @crsimpson5

    Posted

    Hey Elaine, great job on your solution! You handled the element positioning really well, and it looks great on any screen size. A few tiny things you could improve:

    1. The dropdown arrow icons show a pointer, but they can't open the dropdown.
    2. The first cta button is getting stretched since the second one has a border, so the text isn't quite vertically aligned. It's only 2px off, but if it was a bigger border it would be more obvious. To fix this, you could use a custom property on the cta class for the border color and have it default to the background color.
    3. The attribution at the bottom could use a bit of line height on mobile.

    Your solution is nearly perfect, so I could only find some tiny improvements 😛. Well done!

    Marked as helpful

    3
  • @crsimpson5

    Posted

    Hey David, great job on your solution! The styling looks great, and I love the mobile nav and cart menu. One suggestion I have is using button elements for things like the cart button and the photo gallery, that way they can be interacted with using a mouse and also keyboard. The plus and minus buttons are really hard to click; I think they could have the full height of the container.

    Your code looks nice and clean, too. Well done 🙂👍

    Marked as helpful

    0
  • @Lfrancos

    Submitted

    Hello everyone hope that all of you are having a great time with all the challenges.

    I had so much fun with this challenge, it was challenging enough but was not really so difficult that I was stuck. Still I was not able to figure out one thing, when I was working on making the gallery work with the keyboard I realized that I needed to add some styles when the buttons where in focus but once I added a style to the focus it was also styling the buttons when using the mouse. Not sure if any of you have an idea on how to solve this I would really appreciate if anyone can point me in the right direction : )

    Thank you all, and keep enjoying front-end mentor : )

    Single-page design portfolio solution

    #next#react#accessibility

    1

    @crsimpson5

    Posted

    Hey Lorenzo, great job on your solution! The responsive design is well done and it looks good on any screen size.

    Regarding your issue, you can use :focus-visible instead of :focus to make the styles show only when navigating using a keyboard. Also, you can use the outline property instead of border to prevent content jumping around.

    Here's a CSS-Tricks article if you want to read more about focus-visible. https://css-tricks.com/almanac/selectors/f/focus-visible/

    Marked as helpful

    0
  • Lucas 👾 104,560

    @correlucas

    Submitted

    👾 Hello, Frontend Mentor coding community. This is my solution for the 3 Columns Card Component.

    Feel free to leave any feedback and help me improve my solution or make the code clean!

    • 👾 I added a Custom hover effect on card w/ the Vehicle Types photo on background.

    I'll be happy to hear any feedback and advice!

    @crsimpson5

    Posted

    Hey Lucas, this is awesome! Love the design and hover effects.

    A small improvement you could make with your CSS is to remove the redundant "rounded" classes on the cards. Since you already have a border radius on the container, you can add overflow: hidden to the container and the cards won't need their own "rounded" classes.

    Keep up the great work! 😃

    Marked as helpful

    1
  • @crsimpson5

    Posted

    Hey Herman,

    This is very well made! The design looks beautiful and everything works smoothly.

    For the carousel, you could add an arrow button to slide over. At first I didn't know I could click and drag to slide. Also, I suggest adding a way to bypass the user login/signup page. I think most people checking out a demo project are not going to want to create an account; it would be better to get straight to the content.

    Great job! 😃

    1
  • @crsimpson5

    Posted

    Hey Eileen, great job on your solution! Your code looks great--nice and clean.

    One small change you could make is replacing the event listener on the slider from change to input. That way, the event is fired while the slider is being dragged, and the graphics/data will update instantly. The change event only fires when the input is committed, which in this case is releasing the mouse button. It's a tiny change, but it makes a big difference!

    Here's the MDN link to read more: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/input_event

    Marked as helpful

    0
  • @crsimpson5

    Posted

    Hey dania, well done on your solution! The overall responsive design is great.

    One small tip: the animation on the arrow is a little bit janky since you're animating the margin. Instead, you can use the transform property which will be a lot smoother.

    Example:

    @keyframes arrow {
        50% {
            transform: translateY(-12px);
        }
       ...
    }
    

    Here's an article on performant transitions, which also applies to animations: https://codeburst.io/low-performance-css-transitions-and-some-alternatives-f84ff35bf07

    Marked as helpful

    1
  • buenorafa 70

    @buenorafa

    Submitted

    The biggest difficulty I had in the execution of this project was the regex validation of the email. But there is still a problem that I couldn't solve, after the script does the first validation that shows the error message, when correcting the email or changing the type of error the page reload.

    I know the project is not pixel perfect but i still could learn much more about responsive layout.

    Any tips and suggestions are very welcome!

    @crsimpson5

    Posted

    Hello, nice job on your solution!

    By default, clicking a submit button will submit the form and also refresh the page. To prevent this you'll have pass the event object to your function, and then you can prevent the page from refreshing.

    function validation(event) {
        event.preventDefault();
        ...
    }
    

    The preventDefault() method prevents the default behavior of an event, which in this case is refreshing the page. Hope this helps 🙂

    If you want to learn more about events and event objects, this video may help: https://youtu.be/YiOlaiscqDY?t=517

    Marked as helpful

    1
  • Prabu S 630

    @mgksp

    Submitted

    All Feedbacks are Welcome

    Blogr Landing Page

    #framer-motion#react#typescript#vite#tailwind-css

    1

    @crsimpson5

    Posted

    Hey Prabu, your solution looks great! 😃

    I love the transition timing functions you used. They really add some character to the site.

    One thing I would suggest looking into is closing menus when clicked/tapped outside of. Here's an article that may help out: https://www.codingdeft.com/posts/react-on-click-outside/

    Marked as helpful

    0
  • Felipe 40

    @FelipeBMost

    Submitted

    My third project. I can't seem to grasp how to adjust elements vertically on flexbox. I set up the ".row" and "display flex" on parent together with "align-items" and "justify-content" everywhere and the "Change" element stil wouldn't center. I had to adjust it's margin to make it centered.

    @crsimpson5

    Posted

    Hey Felipe, nice job on your solution 🙂

    It looks like your .container a:last-child selector is targeting the Change button as well as the Cancel Order button. If you change that selector to .cancel, and then remove the extra margins on the Change button, that should fix your issue.

    You can also try adding some box-shadows -> MDN.

    Marked as helpful

    1
  • @DCoder18

    Submitted

    Hey guys, this is my first javascript project here. It was fun to do. The only part I found challenging was the user's ability to add a custom tip. I wasn't sure how I would trigger it since there wasn't a button linked to it in the design. I figured I'd just use the enter key to submit their custom tips. Its not the most efficient or user friendly but I couldn't think of anything else.

    Let me know what approach some of you took and feel free to suggest any improvements :)

    Thanks!

    @crsimpson5

    Posted

    Hey Devika, great job on your solution 👍

    You can use an input event listener on your input fields to calculate the tip every time a number is typed in.

    Example:

    customTipInput.addEventListener("input", calculateTip);
    

    Input event MDN

    Marked as helpful

    1
  • Halibal 250

    @halibal

    Submitted

    On JavaScript part, I've dived into some an abyss and repeated many codes. I would appreciate it, if you spare some time to check them out and see if there are any fixes or there is a way to shorten my code.

    @crsimpson5

    Posted

    Hey, Halibal.

    One simple change would be to consolidate your calculatep5, calculatep10, etc. functions into one function, since they all do the same thing. You can define a parameter for the percentage, and then replace the hard-coded number in your function with the variable.

    function calculatep(percentage) {
      ...
      let tip = billP / percentage /NoPP
      ...
    }
    

    And call the function like so: calculatep(15)

    I recently completed this challenge, so you can check out my code if you'd like.

    Marked as helpful

    1
  • @Coffeemechanics

    Submitted

    I've found an error and couldn't fix it. As you can see when you open the page the buttons are inactive, but atleast one of them should've been active if you inspect my code. So I hid a button and made it's display property none, but the problem is; even if you don't select a button and click submit directly as you open the page, you give 1 point. I wanted to write something like "pseudocode version:if the rating value equals to 0 submit button shouldn't work." so I added a class to submit button and wrote "pointer-events:none" in css, and in js I wrote something like "if (rating_value != 0){elementname.classlist.add("disablethesubmitbutton")", but it didn't work. Thanks beforehand!

    @crsimpson5

    Posted

    Hey, nice job on your solution. Your styling looks great!

    To solve your issue you can initialize the rating_score to null. Then, in your your submit function, you can do something like this:

    function clickSubmit() {
      if (!rating_score) return;
      ...
    }
    

    This will make it so that the rest of the code in the function won't run unless the value of rating score has been reassigned to a truthy value (which you've handled in the clickButton function).

    Marked as helpful

    1
  • DanielK 440

    @DanK1368

    Submitted

    Hi guys, I'm currently learning react and this is my first challenge using the framework.

    There are some issues, and hope to receive some feedback.

    1. When I select one of Tips, the item gets checked (greyish color). However, when I select the custom tip input, I want the checked style to be gone from the previous selected tip. How do I achieve this?

    2. I noticed that when I place a tip of zero in the custom field, it doesn't seem to work/calculate properly. How do I fix this?

    Happy coding :)

    @crsimpson5

    Posted

    Hey DanielK, nice job on your project! Your code is very well organized and planned out.

    A solution to your first issue would be making the radio buttons into controlled inputs in React. That way, you can render the buttons conditionally.

    For example, in your App.js save the value for a custom tip:

    const [customTip, setCustomTip] = useState(null);
    

    And in Button.jsx:

    <input
      ...
      onChange={handleChange}
      checked={!customTip && tip === value}
    />
    

    It's not exactly a quick and simple solution, but hopefully that helps.

    For your second issue, it appears to be working as intended. With a custom input of 0, the tip amount is 0, and it still shows the total per person.

    Great job on your first React project 😀

    1
  • @crsimpson5

    Posted

    Hey Adeniyi, nice solution!

    Quick tip: you can use the outline property instead of border on your input hover style to prevent the content shift.

    Example:

    .input:hover {
      outline: 3px solid green;
    }
    

    https://developer.mozilla.org/en-US/docs/Web/CSS/outline

    Keep up the good work 👍

    Marked as helpful

    0