【问题标题】:Element widths not aligning themselves properly元素宽度未正确对齐
【发布时间】:2020-05-27 05:01:14
【问题描述】:

我真的很想弄清楚发生了什么。我有一个带有标题、侧边栏和中心内容页面的 HTML。

侧边栏和中心内容在同一个 div 中,这也是它们的 clearfix。我将侧边栏浮动到左侧,将内容浮动到右侧,但内容 div 并没有整齐地相互对齐,而是下降了。

HTML

<body>
        <header>
            <img src="./img/Logo_Color.png" alt="Logo">
            <h1>Batch Documentation</h1>
        </header>
        <div class="clearfix">
            <div class="sidebar">
                <nav>
                    <ul>
                        <li><a href="#">Overview</a></li>
                        <li><a href="#">Fl Overview</a></li>
                        <li><a href="#">PF2 Overview</a></li>
                        <li><a href="#">Inputs</a></li>
                        <li><a href="#">Outputs</a></li>
                        <li><a href="#">Appendix A</a></li>
                        <li><a href="#">Appendix B</a></li>
                    </ul>
                </nav>
            </div>
            <main>    

            <div class="centerContent">
                <h2>Overview</h2>
                <p>
                    Integer in qui primam te ipsa-plenus Crescere Effectum Septembrem.  Me quo 700% octavas ad imperium caduca si eros eius orci arcu te mirum consumere, meritos modo diam eros ti, in cras diuturna interpres, semente, securitas sem odio dignitatis reuiescat.
                    Lius quam charybdium nonullis sem inibunt illum, civibus eius arendom, Indolem te e licentiose te maiestatem molestias typi combinatur sagittis successus nomine, reniam eos te-feroces assueverunt.
                    Saepe non, Fervore 2000 galliae nibh eu ea ut:
                </p>
                <code>Hello</code>
            </div>
            </main>
        </div>
    </body>

CSS

* {
    font-family: 'Roboto', sans-serif;
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    list-style-type: none;

  }

body {
  margin: auto;
  width: 1265px;
  background-color: #eae0ff;
}

main {
  display: inline-block
}

.clearfix::after {
  content: "";
  clear: both;
  display: table;
}

header {
  margin: 15px 10px 20px 10px;
}

.sidebar {
  width: 25%;
  margin: 5px 0px 10px 10px;
  padding-right: 20px;
  float: left;
  background-color: #ccccff;
}

.centerContent {

  width: 75%;
  margin: auto;
  padding-left: 20px;
  border: 3px solid #73ad21;
  float: right;
}

li {
  margin-top: 5px;
  margin-bottom: 5px;
}

code {
  width: 90%;
  font-family: 'Source Code Pro', monospace;
  color: #43892a;
  background-color: #000;
  display: block;
}

我特别担心,因为box sizing设置为border box,显示为inline block。侧边栏的宽度为 25%,而主要内容的宽度为 75%,但似乎边距和填充被添加到它们的尺寸中,而不是包含在 % 计算中。

【问题讨论】:

    标签: html css css-float width clearfix


    【解决方案1】:

    我不知道你为什么现在使用浮动,我附加了一个与小型 flexbox 布局相同的内容。希望有帮助。

    * {
      font-family: 'Roboto', sans-serif;
      box-sizing: border-box;
      margin: 0;
      padding: 0;
      list-style-type: none;
    }
    
    body {
      margin: auto;
      background-color: #eae0ff;
    }
    
    main {
      display: inline-block
    }
    
    .clearfix{
    display:flex;
    }
    
    header {
      margin: 15px 10px 20px 10px;
    }
    
    .sidebar {
      width: 25%;
      margin: 0px 0px 10px 10px;
      padding-right: 20px;
      background-color: #ccccff;
      flex: 0 0 auto;
    }
    
    .centerContent {
      width: 75%;
      margin: auto;
      padding-left: 20px;
      border: 3px solid #73ad21;
    }
    
    li {
      margin-top: 5px;
      margin-bottom: 5px;
    }
    
    code {
      width: 90%;
      font-family: 'Source Code Pro', monospace;
      color: #43892a;
      background-color: #000;
      display: block;
    }
    <body>
      <header>
        <img src="./img/Logo_Color.png" alt="Logo">
        <h1>Batch Documentation</h1>
      </header>
      <div class="clearfix">
        <div class="sidebar">
          <nav>
            <ul>
              <li><a href="#">Overview</a></li>
              <li><a href="#">Fl Overview</a></li>
              <li><a href="#">PF2 Overview</a></li>
              <li><a href="#">Inputs</a></li>
              <li><a href="#">Outputs</a></li>
              <li><a href="#">Appendix A</a></li>
              <li><a href="#">Appendix B</a></li>
            </ul>
          </nav>
        </div>
        <main>
    
          <div class="centerContent">
            <h2>Overview</h2>
            <p>
              Integer in qui primam te ipsa-plenus Crescere Effectum Septembrem. Me quo 700% octavas ad imperium caduca si eros eius orci arcu te mirum consumere, meritos modo diam eros ti, in cras diuturna interpres, semente, securitas sem odio dignitatis reuiescat.
              Lius quam charybdium nonullis sem inibunt illum, civibus eius arendom, Indolem te e licentiose te maiestatem molestias typi combinatur sagittis successus nomine, reniam eos te-feroces assueverunt. Saepe non, Fervore 2000 galliae nibh eu ea ut:
            </p>
            <code>Hello</code>
          </div>
        </main>
      </div>
    </body>

    【讨论】:

    • 谢谢,我真的不知道 flexbox 是什么
    • 你应该先学习它,bootstrap 4 是用 flexbox 构建的。在这里使用这个w3school资源来学习w3schools.com/css/css3_flexbox.asp谢谢
    【解决方案2】:

    最好使用 flex 布局,它将具有响应性并且不会产生问题。

    CSS:

    * {
        font-family: 'Roboto', sans-serif;
        box-sizing: border-box;
        margin: 0;
        padding: 0;
        list-style-type: none;
    
      }
    
    body {
      margin: auto;
      width: 96vw;
      background-color: #eae0ff;
    }
    
    main {
        width: 70%;
        margin: auto;
    }
    
    .clearfix {
      display: flex;
      justify-content: space-between;
      flex-direction: row;
      margin: 0 20px;
    }
    
    header {
      margin: 15px 10px 20px 10px;
    }
    
    .sidebar {
      width: 25%;
      background-color: #ccccff;
    }
    
    .centerContent {
      border: 3px solid #73ad21;
    }
    
    li {
      margin-top: 5px;
      margin-bottom: 5px;
    }
    
    code {
      font-family: 'Source Code Pro', monospace;
      color: #43892a;
      background-color: #000;
      display: block;
    }
    

    【讨论】:

      【解决方案3】:

      我想你刚刚开始学习HTMLCSS。 因此,每当您提供边距和填充(尤其是左右)时,请计算每个像素,否则您将面临像现在这样的问题。
      将来你会在 css 中学习 gridflexbox。 当你同时使用(网格和弹性框)时,我敢打赌你永远不会使用float property

      作为初学者,你可以很容易地理解我的解决方案 -
      所以在你的 CSS 中你必须 remove -

      main{
        display:inline-block;
      }
      

      添加这个 -

      .centerContent {
        display: inline-block;
        width: 70%; // play by changing the width.
        margin: auto;
        padding-left: 20px;
        border: 3px solid #73ad21;
        float: right; // float : left; will also work
      }
      

      【讨论】:

        【解决方案4】:

        边距不包含在 box-sizing 的宽度中:border-box butpaddings 和边框都包含在内。 https://developer.mozilla.org/en-US/docs/Web/CSS/box-sizing

        所以边距保持在侧栏的外部,第二个内容向下移动。您可以删除边距以将内容移回。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-05
          • 1970-01-01
          • 2016-10-27
          • 2015-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多