Welcome to the Treehouse Community

Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.

Looking to learn something new?

Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.

Start your free trial

CSS CSS Basics (2014) Basic Layout box-sizing and max-width

Tony A
Tony A
3,334 Points

Why doesn't margin: auto work if the width is in percentages?

Hello, apologies if this has been covered in another question.

I was playing around with the CSS from this video and noticed that if a percentage value is used for the width, the margin: auto property did not centre the content.

I did this on the .primary-content and .secondary-content rule. I commented out the max-width property and the content aligned to the left. However, when I un-commented the max-width, it then centred the content.

.primary-content, .secondary-content { width: 75%; padding-left: 50px; padding-right: 50px; margin: auto; /* max-width: 900px;*/ }

If I leave out the max-width property and change the width property to a px based unit, it seems to centre the content again.

I hope that makes sense. I'm just trying to understand why it is doing this. Do percentage values and pixels not work well together?

Many thanks

2 Answers

Jamie Reardon
seal-mask
.a{fill-rule:evenodd;}techdegree seal-36
Jamie Reardon
Treehouse Project Reviewer

Percentage values work as well as other length values in this case, they are relative to the parent element container, they still center an element if using the margin: auto, and a width is defined. Can you post your html and css file? Thanks.

UPDATE:

I see that you are confused about how the margin works. When you un-comment out the max-width property, your containers are set at the 900px width defined, which is therefore SMALLER than the width in percentage (75% in this case) which is BIGGER than the max-width defined.

To see what I mean and understand the concept, go to Chrome Developer Tools and inspect the divs with the max-width value and it commented out.

You can clearly see that the margin auto values are working on both sides of the divs (primary, and secondary). The left and right margins are positioning them with the available space left in the browser window.

Also, notice the two div's size when you remove the max-width value to see what the size is in percentage, compared to when the max-width value of 900px sets them.

So therefore, the reason why they look centered with the max-width property, is because they are scaled much bigger when using a value of 75%. Try using a smaller value in percentage to see how it gets more centered.

I hope I explained it well for you to understand. Thanks.

Tony A
Tony A
3,334 Points

Here is the code as requested. Thanks

Tony A
Tony A
3,334 Points

Ah that makes sense now! Many thanks :)

Tony A
Tony A
3,334 Points

Thank you for your reply. Here is the code as requested (I wasn't sure how much code you needed, so I pasted everything - apologies if this causes problems):

<!DOCTYPE html>
<html>
  <head>
    <title>Lake Tahoe</title>
    <link rel="stylesheet" href="css/style.css">
  </head>
  <body> 
    <header id="top" class="main-header">
      <span class="title">Journey Through the Sierra Nevada Mountains</span>
      <h1>Lake Tahoe, California</h1>
      <img class="arrow" src="img/arrow.svg" alt="Down arrow">
    </header>

        <div class="primary-content t-border">
            <p class="intro">
                Lake Tahoe is one of the most breathtaking attractions located in California. It's home to a number of ski resorts, summer outdoor recreation, and tourist attractions. Snow and skiing are a significant part of the area's reputation.
            </p>
            <a class="callout" href="#more">Find out more</a>
      <div class="wildlife">
        <h2>Check out all the Wildlife</h2>
        <p>
          As spawning season approaches, the fish acquire a humpback and protuberant jaw. After spawning, they die and their carcasses provide a feast for gatherings of <a href="#mink">mink</a>, <a href="#bears">bears</a>, and <a href="#eagles">bald eagles</a>.
        </p>
      </div><!-- End .wildlife -->

            <a class="callout" href="#wildlife">See the Wildlife</a>
        </div><!-- End .primary-content -->

        <div class="secondary-content t-border"> 
      <div>
        <img src="img/resort.jpg" alt="Resort">
        <h3>From Tents to Resorts</h3>
        <p>
          Lake Tahoe is full of wonderful places to stay. You have the ability to sleep in the outdoors in a tent, or relax like a king at a five star resort. Here are our top three resorts:
        </p>
        <ul>
          <li><a href="#hotels">Lake Tahoe Resort Hotel</a></li>
          <li><a href="#resorts">South Lake Tahoe Resorts</a></li>
          <li><a href="#lodging">Tahoe Ski Resort Lodging</a></li>
        </ul>       
      </div>

      <div>
        <img src="img/mtn-landscape.jpg" alt="Mountain Landscape">
        <h3>Pack Accordingly</h3>
        <p>
          One of most important things when it comes to traveling through the great outdoors is packing accordingly. Here are a few tips:
        </p>
        <ol>
          <li>Bring layers of clothing</li>
          <li>Pack sunscreen</li>
          <li>Carry extra water just in case</li>
          <li>Pack light</li>
        </ol>
      </div>
        </div><!-- End .secondary-content -->

        <footer class="main-footer">
            <p>All rights reserved to the state of <a href="#">California</a>.</p>
            <a href="#top">Back to top &raquo;</a>
        </footer>
  </body>
</html>

Here is the CSS.

/* Base Styles -------------------- */

* {
  box-sizing: border-box;
}
body {
  color: #878787;
  margin: 0;
  font: 1em/1.5 "Helvetica Neue", Helvetica, Arial, sans-serif;
}

h1 {  
  font-size: 5.625rem; /* 90px/16px  */
  color: rgba(255, 255, 255, 1);
  text-transform: uppercase;
  font-weight: normal;
  line-height: 1.3;
}

h2 {
  font-size: 3.3125em; /* 53px/16px  */
  font-weight: normal;
  line-height: 1.1;
  margin: 0 0 .5em; /* 0 0 26px */
}

h3 {
  font-size: 1.25em; /* 20px/16px  */
  color: #48525c;
  line-height: 1.2;
  margin-bottom: 1.7em; /* 34px */
}

img {
  max-width: 100%;
  margin-bottom: 20px;
}

/* Pseudo-classes ------------------ */

a:link {
  color: rgb(255, 169, 73);
  text-decoration: none;
}

a:visited {
  color: lightblue;
}

a:hover {
  color: rgba(255, 169, 73, .4);
}

a:active {
  color: lightcoral;
}

/* Main Styles --------------------- */

.main-header {
  background-color: #ffa949;
  padding-top: 170px;
  height: 850px;
}

.title {
  color: white;
  font-size: 1.625rem; /* 26px/16px */
}

.intro {
  font-size: 1.25em; /* 20px/16px */
  line-height: 1.6;  
}

.primary-content,
.main-header,
.main-footer {
  text-align: center;
}

.primary-content {
    padding-top: 25px;
  padding-bottom: 95px;
}

.secondary-content {
    padding-top: 80px;
    padding-bottom: 70px;
  border-bottom: 2px solid #dfe2e6;
}

.callout {
  font-size: 1.25em;
  border-bottom: 3px solid;
  padding: 0 9px 3px;
  margin-top: 20px;
  display: inline-block;
}

.main-footer {
  padding-top: 60px;
  padding-bottom: 60px;
  border-bottom: 10px solid #ffa949;
}

.t-border {
  border-top: 2px solid #dfe2e6;
}

/* Layout Styles ------------------ */

.primary-content, 
.secondary-content {
  width: 75%;
  padding-left: 50px;
  padding-right: 50px;
  margin: auto;
/*  max-width: 900px; WITH THE WIDTH SET TO % VALUE AND THIS COMMENTED OUT, THE DIVS ARE NOT CENTERED*/
}

.wildlife {
  color: white;
  background-color: #434a52;
  padding: 18% 24%;
  border-top: 10px solid #ffa949;
  margin: 105px 0 60px;
}

.arrow {
  width: 50px;
}