Https://www.freecodecamp.org/learn/responsive-web-design/basic-css/change-a-variable-for-a-specific-area


If a variable is declared in :root then the color assigned to that variable goes to the entire screen and also whenever used later then the value is still that color.
But in this activity when I redeclare the variable inside the .penguin why does the color change and why other places the color is not changing?

Your code so far


<style>
:root {
  --penguin-skin: gray;
  --penguin-belly: pink;
  --penguin-beak: orange;
}

body {
  background: var(--penguin-belly, #c6faf1);
}

.penguin {
  /* Only change code below this line */
  --penguin-belly: white;
  /* Only change code above this line */
  position: relative;
  margin: auto;
  display: block;
  margin-top: 5%;
  width: 300px;
  height: 300px;
}

.right-cheek {
  top: 15%;
  left: 35%;
  background: var(--penguin-belly, pink);
  width: 60%;
  height: 70%;
  border-radius: 70% 70% 60% 60%;
}

.left-cheek {
  top: 15%;
  left: 5%;
  background: var(--penguin-belly, pink);
  width: 60%;
  height: 70%;
  border-radius: 70% 70% 60% 60%;
}

.belly {
  top: 60%;
  left: 2.5%;
  background: var(--penguin-belly, pink);
  width: 95%;
  height: 100%;
  border-radius: 120% 120% 100% 100%;
}

.penguin-top {
  top: 10%;
  left: 25%;
  background: var(--penguin-skin, gray);
  width: 50%;
  height: 45%;
  border-radius: 70% 70% 60% 60%;
}

.penguin-bottom {
  top: 40%;
  left: 23.5%;
  background: var(--penguin-skin, gray);
  width: 53%;
  height: 45%;
  border-radius: 70% 70% 100% 100%;
}

.right-hand {
  top: 0%;
  left: -5%;
  background: var(--penguin-skin, gray);
  width: 30%;
  height: 60%;
  border-radius: 30% 30% 120% 30%;
  transform: rotate(45deg);
  z-index: -1;
}

.left-hand {
  top: 0%;
  left: 75%;
  background: var(--penguin-skin, gray);
  width: 30%;
  height: 60%;
  border-radius: 30% 30% 30% 120%;
  transform: rotate(-45deg);
  z-index: -1;
}

.right-feet {
  top: 85%;
  left: 60%;
  background: var(--penguin-beak, orange);
  width: 15%;
  height: 30%;
  border-radius: 50% 50% 50% 50%;
  transform: rotate(-80deg);
  z-index: -2222;
}

.left-feet {
  top: 85%;
  left: 25%;
  background: var(--penguin-beak, orange);
  width: 15%;
  height: 30%;
  border-radius: 50% 50% 50% 50%;
  transform: rotate(80deg);
  z-index: -2222;
}

.right-eye {
  top: 45%;
  left: 60%;
  background: black;
  width: 15%;
  height: 17%;
  border-radius: 50%;
}

.left-eye {
  top: 45%;
  left: 25%;
  background: black;
  width: 15%;
  height: 17%;
  border-radius: 50%;
}

.sparkle {
  top: 25%;
  left: 15%;
  background: white;
  width: 35%;
  height: 35%;
  border-radius: 50%;
}

.blush-right {
  top: 65%;
  left: 15%;
  background: pink;
  width: 15%;
  height: 10%;
  border-radius: 50%;
}

.blush-left {
  top: 65%;
  left: 70%;
  background: pink;
  width: 15%;
  height: 10%;
  border-radius: 50%;
}

.beak-top {
  top: 60%;
  left: 40%;
  background: var(--penguin-beak, orange);
  width: 20%;
  height: 10%;
  border-radius: 50%;
}

.beak-bottom {
  top: 65%;
  left: 42%;
  background: var(--penguin-beak, orange);
  width: 16%;
  height: 10%;
  border-radius: 50%;
}

.penguin * {
  position: absolute;
}
</style>
<div class="penguin">
<div class="penguin-bottom">
  <div class="right-hand"></div>
  <div class="left-hand"></div>
  <div class="right-feet"></div>
  <div class="left-feet"></div>
</div>
<div class="penguin-top">
  <div class="right-cheek"></div>
  <div class="left-cheek"></div>
  <div class="belly"></div>
  <div class="right-eye">
    <div class="sparkle"></div>
  </div>
  <div class="left-eye">
    <div class="sparkle"></div>
  </div>
  <div class="blush-right"></div>
  <div class="blush-left"></div>
  <div class="beak-top"></div>
  <div class="beak-bottom"></div>
</div>
</div>

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.198 Safari/537.36.

Challenge: Change a variable for a specific area

Link to the challenge:

I don’t know if i understood your question correctly you are asking if variable is declared in :root then how can it be changed in .penguin if its in root it is global then why this happens. If that is the ques then the first C is CSS is the answer Cascading, a style which is mentioned later on in the CSS has its effect over the style which was mentioned early on. If I were to set color of a div to yellow in 1st line and blue in the 2nd line end result will be blue. Similarly anything which is inherited by element for example font-size is lets say 20px in the :root but later on there is a paragraph I would want to make it a little smaller in size I’ll write this p{font-size: 16px;} then the font-size property which was inherited by p from :root will be overridden by this new style and font-size will become 16px for this p element. This same things happens with the variables it can be changed later on in the CSS. We put these variables in :root just so it will be inherited by every element in the document then we can use it anywhere we want, and change it anywhere we want.
I Hope this helps.

1 Like

thank you for your reply it was helpful but still i am aware of global variables but notice how when the variable is redeclared as white still when it is recalled in other places the variable still shows pink color as output even after the value has been declared white…why is that?
hope this isnt a wierd question…

What other places have you tried ?

even that is a doubt to me …whatever i am learning here i am not able to execute it into practice.Basically i havent tried anywhere else

if you declare the variable in .penguin then the new value is used by all elements inside the element with that class - it’s inherithed by everything inside it

note that for this the order of selectors in the CSS is not important