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

Submitted

Time tracking dashboard

Decimo-10 120

@Decimo-10

Desktop design screenshot for the Time tracking dashboard coding challenge

This is a solution for...

  • HTML
  • CSS
  • JS
2junior
View challenge

Design comparison


SolutionDesign

Solution retrospective


  • How can I change the color of an svg image?
  • If an element, in this case the svg image(3 point) has a hover state, and it's container also has one, can you make it so when you hover directly on the svg image only the image's hover state is active and it's container's isn't?
  • When you hover over an activity(work, play, etc.) and it gets "lighter", I implemented that with a ::before pseudo-element. Should have I simply changed the background color?
  • For the first time in the JS script I created the HTML elements and gave them their text content - based on the JSON file - in one function, but later I seperated them into two: createActivities() and updateText(). In the first version I would have had to delete the HTML elements then create new ones when you wanted to view another period's stats. In the new version I have to use fetch() in both functions. So my question is which one is better in terms of speed/performance: deleting and creating HTML elements or the 2 fetch() or if there is better method for it?

Thank you for the feedback, and if you have any insight or suggestion even if it's not related to my questions I greatly appreciate that too.

Community feedback

P

@Eileenpk

Posted

Hi Decimo,

Your project looks good, your JS is very readable.

If you want to change the color of an SVG in a file just to reuse it and have it be for example red instead of white change the fill property in the SVG file.

To change the color of an SVG on hover you have to:

Put the SVG code directly into the HTML, if you put the src of the <img> as the SVG file that is in another folder it won't be able to target it

  • Add a class in the beginning tag of the SVG
  • In the CSS the selector should be the class name and then the path
  • The property name should be fill for the background of the SVG and stroke for the outline HTML
<svg
            aria-labelledby="Facebook"
            xmlns="http://www.w3.org/2000/svg"
            width="24"
            height="24"
            class=socialIcon >
             <title id="Facebook" lang="en">Facebook icon</title>
            <path
              fill="#FFF"
              d="M22.675 0H1.325C.593 0 0 .593 0 1.325v21.351C0 23.407.593 24 1.325 24H12.82v-9.294H9.692v-3.622h3.128V8.413c0-3.1 1.893-4.788 4.659-4.788 1.325 0 2.463.099 2.795.143v3.24l-1.918.001c-1.504 0-1.795.715-1.795 1.763v2.313h3.587l-.467 3.622h-3.12V24h6.116c.73 0 1.323-.593 1.323-1.325V1.325C24 .593 23.407 0 22.675 0z"
            />
          </svg>

CSS

 .socialIcon:hover path {
      cursor: pointer;
      fill: var(--second-color);
    }

To make it so when you hover directly on the svg image only the image's hover state is active and its container's isn't use the CSS pointer events property.

  • Set the pointer-events property of the container to none
  • Set it to auto for the SVG image element.
<div class="container">
  <svg class="image" viewBox="0 0 100 100">
    <circle cx="50" cy="50" r="40" fill="red" />
  </svg>
</div>
.container {
  background-color: gray;
  height: 200px;
  width: 200px;
  display: flex;
  justify-content: center;
  align-items: center;
  padding: 20px;
  pointer-events: none; /* set pointer-events to none */
}

.image {
  height: 100px;
  width: 100px;
  pointer-events: auto; /* set pointer-events to auto for the SVG image */
}

.image:hover {
  fill: blue;
}

When you hover over an activity(work, play, etc.) I think using the ::before pseudo-element is fine, :hover might be a little simpler but you could go either way.

I think you did the right thing with the separation of the fetch functions with the way you approached the JS. You have a for loop in both, (loops are slow) if you had put them both into one, when one of the btns were clicked the createActivities text would be running for no reason.

Hope you found this helpful!

Let's connect on LinkedIn! - @Eileenpk

Marked as helpful

1

@0xabdul

Posted

Hello Developer well congratulations on successfully completed the Time tracking dashboard

  • There is no Accessibility reports but some suggestions for improve your code
  • In Css 🎨 :
  • your Time tracking dashboard is not center aligning so fix them
  • Ex :
body {
display:grid;
place-items:center;
margin:0;
height:100vh;
}
  • Now the dashboard is center aligning 🎯
  • I Hope you find the solution and it's useful comment for you . your Time tracking dashboard project is Great Finally Happy Coding Developer

Marked as helpful

0

Please log in to post a comment

Log in with GitHub
Discord logo

Join our Discord community

Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!

Join our Discord