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

  • Sonali 90

    @Sonali-Behera

    Submitted

    Here I am uploading my third project. But here I am facing an issue that I am unable to change the position of "per month" span from bottom. Please kindly help me out and recommend some better coding ways:) N.B : This span ("per month") is present in the 2nd row and 1st column. It is grouped as a class named "rest".

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    <span class="amount">$29</span>
     <span class="rest">per month</span>
    

    These two element have display: inline by default. So you cann't use margin-top or margin-bottom. Set their display to inline-block using display: inline-block Then to align them vertically you can use vertical-align property on either of these two elements

    Another war is to wrap these two element in a div element. Set following styles on the div element.

    display: flex;
    align-item: center
    
    1
  • Artur 200

    @ArturMiguel

    Submitted

    The background image did not load in the comparison before/after, however in the demo it is ok.

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    Nice work. The white dot on the progress bar is not placed correctly. You can use following styles.

    1. On .progress set position: relative. Then on ::after set position: absolute; right: 1px.
    2. Then to vertically center dot inside progress bar use top: 50%; transform: translateY(-50%);
    1
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    Good work. But you are using percentage units more than required. As part of web development process, you need to learn when to use absolute units(pixels) and when relative units (%, rem, em).

    1. It is better to set white dot's height, width and right properties using pixels
    2. Similarly, for border-radius property, use 'pixels'
    1
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    Good work. My few suggestion are:

    1. Set cursor: pointer on filter tablets to give feedback to the user that these are clickable.

    2. On mobile design, the company logo is not placed correctly. To achieve this: set position: relative on the job card and position: absolute; top: -10px; // should be equal to half the height of log left: 10px // should be equal to left padding on the card on logo

    1
  • Vasily 250

    @vasily-mishanin

    Submitted

    Can anyone give me a hint on how to make this challenge without JS?

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    You can use hidden checkbox to toggle prices. Follow following code:

    <label class="switch" for="price-switch">          // add **for attribute** to link it with checkbox
       <input type="checkbox" id="price-switch">    // Remove this checkbox
       <span class="slider round"></span>
    </label>
    

    Place the checkbox as a sibling of <div class="cards-section">.

    <input type="checkbox" id="price-switch">
    <div class="cards-section">
    

    Then add following styles:

    <section class="card">
            <h3 class="card-title">Basic</h3>
            <div class="card-price"> <span class="price-monthly">19.99</span></div>
            <div class="card-price"> <span class="price-annually">199.99</span></div>
           
            // similarly for other cards
            <h3 class="card-title">Professional</h3>
            <div class="card-price"><span class="price-monthly">49.99</span></div>
            <div class="card-price"><span class="price-annually">49.99</span></div>
    
            // All monthly prices have same css class `price-monthly` and all annual plans have same css class
    

    Hide one of the price category initially:

    .price-monthly{
        display: none;
    }
    

    when checkbox is checked toggle display property:

    #price-switch:checked ~ .cards-section .price-monthly{
        display: block;
    }
    
    #price-switch:checked ~ .cards-section .price-annually{
        display: none;
    }
    
    2
  • @Aahil13

    Submitted

    i wasn't able to make the top-border-color to have a lineat-gradient color

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    To set a linear-gradient on the top border, you can use background property.

        background: var(--gradient-instagram);
        background-size: 100% .4rem;
        background-repeat: no-repeat;
    
    0
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Great attempt.

    1. The footer links and social icons are missing hover styles. You can use :hover psuedo class to add those styles.
    2. In the features sections, on desktop the image can be moved left using transform: translateX() property. The text should be aligned left on large screen sizes.
    0
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    Good work. The border on the instagram card does not match the design. One the solutions is to use background property.

        background: var(--gradient-instagram);
        background-size: 100% .4rem;
        background-repeat: no-repeat;
    
    1
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    Your CSS and JS code have lot of repeated code.

    1. **CSS:
    .errors-and-icons-1, .errors-and-icons-2,.errors-and-icons-3,.errors-and-icons-4{
      visibility: hidden;
      display: flex;
      justify-content: end;
    }
    .error1,.error2,.error3,.error4 {
      color: red;
      font-size: 10px;
    }
    

    You do not need to create 4 different classes. Create a single .error and .errors-and-icons class. And use them for each input element.

    1. To place the error icon correctly: You need to change your html code. wrap input element, error icon and error message in a div element. set position: relative on div. and use position: absolute; top: 50%; transform: translateY(-50%); right: 2px; on error icon. This place the error icon on the right edge of input element.

    2. **In JS code **. This code is repeated:

    if (nameInput.validity.valid) {
        nameError.textContent = "";
        nameInput.className = "border";
        const divEl = document.querySelector(".errors-and-icons-1");
        divEl.style.visibility = "hidden";
      }
    

    You can wrap it into a function like this:

    function removeError(inputElem, errorElem){
          if (inputElem.validity.valid) {
                   errorElem.textContent = "";
                   inputElem.className = "border";
                   const divEl = document.querySelector(".errors-and-icons-1");
                  divEl.style.visibility = "hidden";
      }
    }
    

    Similarly you can wrap following code into a function:

    if (nameInput.value.trim() === "") {
        nameError.textContent = "First Name cannot be empty!";
        nameInput.className = "border-invalid";
        const divEl = document.querySelector(".errors-and-icons-1");
        divEl.style.visibility = "visible";
      }
    
    2
  • @jtx007

    Submitted

    Would like feedback for the arrow on the tooltip, backgrounds for svg icons. Also would like some advice on the spacing of the content for the first column. Any other feedback is also welcome, thank you

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    For SVG icons, wrap them into a div container individually. Then set width and height so that all icons are of same size. then use following to center icons

    .svg-container{
        width: 30px;
         height: 30px;
         display: flex;                   
         align-items: center;
         justify-content: center;
    }
    
    1
  • Sarah 30

    @serincodes

    Submitted

    I struggled with a good way of centring the grid on the page without pushing the attribution off the end

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    You have set grid-template-rows: 100vh; which is causing footer to be pushed below. Replace this line and your problem will be solved.

    0
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Good work. My few suggestions are:

    1. For Download buttons: Change font-family, font-size and font-weight. Set cursor: pointer.
    2. For footer section: the nav links and social icons are missing :hover styles and cursor:pointer.
    3. For #features section: text should be aligned left on larger screen. Image should be moved left. You can use either position: relative; left: -30px or transform: translateX(-30px)
    0
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    The scroll is displayed because of these two styles:

    // **line number: 85**
    .article-section {
      margin: 1rem 0;
      overflow: auto;
    }
    
    // **line number: 210**
    @media only screen and (min-width: 950px) {
      main {
        flex-direction: row;
        width: 51%;
        max-width: 975px;
        height: 35%;
        min-height: 280px;
        margin: 0;
      }
    

    When you set overflow: auto. The min-height value is taken as height of the element which in your case is 280px. (height: 35% is not taken).

    So either remove min-height or overflow:auto

    2
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    The white circle animation is wrong because you have set left: 96.5% on the white circle. The circle is positioned correctly only when width of inner bar is 81%. The circle will be positioned outside the inner bar, when width is small.

    You can use right: 1px to position it correctly and then animation will work correctly.

    1
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    Overall its great work. I get to know about Array.every() function by looking at your code.

    There is a small bug in your filtering jobs functionality. There are total 10 posts in the data set with job.role values as follows. **6 - Frontend, 2 - Fullstack, 1 - FullStack and 1 - Backend **. Pay attention to letter case - Fullstack vs FullStack. So when I select Fullstack, your app correctly shows 2 jobs and when I select FullStack, it correctly shows 1 job.

    Currently, your search is case sensitive. But, search functionality is generally case-insensitive. In your code, convert filter item and technologies to either lowercase or uppercase before comparing in the following part of your code.

    let technologies = [i.role, i.level, ...i.languages, ...i.tools];
              if (filter.every((item) => technologies.includes(item))) {
                return <JobBox info={i} addTags={addTags} key={i.id} />;
              }
              return null;
    
    2
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi Your design is perfect. My feedback regarding Sass is that: ** You should use Mobile-First Approach**.

    You are using desktop first approach. In desktop first approach, the browser does following on a mobile: It first applies all desktop styles and then @media rule styles i.e first those for max-width: 1200px, then max-width: 900px and finally max-width: 600px (assuming these are your breakpoints). This is not efficient on mobile with lower computing power (consider all mobiles not just high-end devices). So use Mobile First approach.

    2
  • @tbd007

    Submitted

    I added a login page after I got inspired by @naaficodes interactive monkey design. Decided to code the challenge with React, as i am currently trying to practice more with it, hope you guys like it :)

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    My feedback is regarding how you are displaying and switching between web developer, frontend developer and react jobs inside the Listing component.

    You have split the job data file into 3 files: data.js, frontendjobs.js and reactjobs.js and you are using three components Post.js, Fend.js and RJobs to display data in corresponding files. This approach is completely wrong. These three component have exactly the same code inside the render() function. (only thing that is different is the jobs data file). The basic reason we create components is to reuse the markup rendered by them later.

    So, you do not need to create three different components. The correct approach would be:

    1. Create a component (Post.js) - that displays a single post, pass it as prop single post data
    2. Inside Listing.js component use data.map((post) => <Post post={post}>).
    3. The state of Listing.js component should be:
    this.state = {
         posts:  data,      \\ Original data from the data.js file
         displayedPosts: data    \\ Initially all the posts are shown
    
         \\ These must be deleted
         showHidePost: true,           \\ **these 3 states variables are not required you can**
          showHideFendPost: false, \\  **remove them**
          showHideRJobs: false.
         name: 'React'    \\ ** I do not understand why you have this state variable in every component. this is not at all required**
    }
    
    1. You can use 3 button as before - Web, Frontend and React developer. when clicked you run the following function:
    2. on pressing WEB button - you should set displayedPost = posts
    3. on presseing FRONTEND - you should filter posts that are only frontend and set displayedPost = filtered posts. Similarly for REACT button.
    2
  • Anna 90

    @Bluechai03

    Submitted

    Hello! This is my first attempt completing a challenge on FrontEnd Mentor.

    Made with simple HTML and CSS Grid Desktop Mode Design

    I was able to replicate the website for the most part but I had no idea how to create that pointed corner for the small container on the right, could someone let me know how? Also I didn't know how to make the backgrounds for the icons on the left container be the same width and height without squishing the images, how would I go about fixing that?

    Feedback and advice is very much appreciated, thank you!

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    You can create the pointed corner using ::after css psuedo element like this

    .storage-remaining::after{
            content: '';
            width: 0;
            height: 0;
            border-top: solid 20px white;                 // These two styles create the pointed corner
            border-left: solid 20px transparent;
            position: absolute;
            right: 0px;                                              // These styles position it at bottom-right corner
            bottom: -20px;
        }
    
    3
  • @ElliotCase

    Submitted

    I felt like this project really pushed me as a beginner I am not too happy with how it came out and I really struggled getting the waves to look right inbetween sections any feedback on that for a better way to implement them would be much appreciated. Thanks Guys :D

    Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    Good attempt. To create curves, you can use background property. When you look at the design, you see that grow-together section has a light blue bg color, top and bottom curves.

    // to create top curve, set background image on the section above `grow-together` section and place it at the bottom like following:
    .intro-section {
        background: url(./images/bg-section-top-mobile-1.svg);
        background-repeat: no-repeat;
        background-size: contain;
        background-position: left bottom;
    } 
    
    .section-grow-together{
          background-color: var(--very-pale-blue);
    }
    
    // to create bottom curve, set background image on the section below `grow-together` section and place it at the top like following
    .section-flowing-conversation{
         background: url(./images/bg-section-bottom-mobile-1.svg);
        background-repeat: no-repeat;
        background-size: contain;
        background-position: left top;
    }
    

    Similarly, you can create other curved sections

    3
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    Great solution. I have few suggestions:

    1. You need to hide searchbar, when there are no filters to search.

    2. On mobile, the company logo should be moved up. You can use following:

      position: absolute;
      top:  // this should be equal to half the width of logo with a minus sign so that half of the image is outside the top edge of card
      left:  // equal to the left padding of the card
      
    3. You are using desktop first approach which in my opinion not correct. In desktop first approach, the browser does following on a mobile: It first applies all desktop styles and then @media rule style i.e first those for max-width: 1200px, then max-width: 900px and finally max-width: 600px (assuming these are your breakpoints). This is not efficient on mobile with lower computing power (consider all mobiles not just high-end devices). So use Mobile First approach

    4. Finally, learn any frontend framework vue or react etc. These are very efficient and developer friendly when generating DOM elements from data such as an array of jobs and manipulating the dom when data changes.

    2
  • Olabisi 30

    @mightyFZeus

    Submitted

    hey, everyone. How can i make the girl appear immediately after the logo on a mobile?

  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi Great solution. Your cross icon is not perfectly centered. I also faced this problem. My solution is that while applying transform change the order - first translate both lines so that they lie above each other and then you can rotate.

    2
  • Mahesh Yadav 1,220

    @Mahesh-yadav

    Posted

    Hi

    For email validation, you can specify pattern=/RegEx/ attribute on email input element similar to required attribute. Browser will automatically ensure that entered email matches the given pattern.

    For having greater control over error reporting, you can use Constraints Validation API.

    I have implemented a basic custom validation in same project. You can see it here

    0