【问题标题】:Why are my columns' contents starting at different heights?为什么我的列的内容从不同的高度开始?
【发布时间】:2019-02-06 21:44:25
【问题描述】:

我读到不应该使用表格作为布局手段,而是使用 CSS 进行所有样式设置,所以我尝试了我能想到的最基本的方法来模仿表格,使用 CSS multi -列布局。

我创建了一个CodePen 来说明问题。可以看到,两列的内容开始的高度不同,我不明白为什么。

.skill-explanation {
  -webkit-column-count: 2;
  -moz-column-count: 2;
  -ms-column-count: 2;
  column-count: 2;
}

.align-left {
  text-align: left;
}

.align-right {
  text-align: right;
}
<div class="skill-explanation">
  <div class="align-right">
    <p>&#9733;&#9734;&#9734;&#9734; &#8210; <br>
    &#9733;&#9733;&#9734;&#9734; &#8210; <br> 
    &#9733;&#9733;&#9733;&#9734; &#8210; <br> 
    &#9733;&#9733;&#9733;&#9733; &#8210;
   </p>
  </div>
  <div class="align-left">
    <p>I can put it into context and am able to use it's basics <br>
    intermediate knowledge, used several times <br>
    good undestanding, used frequently <br>
    deep understanding, used on a daily basis
    </p>
  </div>
</div>

我想对这篇文章进行更新,以防有人偶然发现它。 1)标记的答案是对我的改进,但我仍然觉得它不直观,因为它使用默认的弹性流,将主轴置于水平位置。
从逻辑的角度来看,这应该是列。

因此这里有一个更新的解决方案,这是最简单直观的(至少在我看来):

.center-wrapper {
  margin: 0 auto;
  display:table;
}

.skill-explanation {
  list-style: none;
}

.rating {
}

.skill {
}

.skill-item {
  list-style: none;
}
<div class="center-wrapper" <ul class="skill-explanation">
  <li class="skill-item">
    <span class="rating">&#9733;&#9734;&#9734;&#9734; &#8210;</span>
    <span class="skill">I can put it into context and am able to use it's basics</span>
  </li>
  <li class="skill-item">
    <span class="rating">&#9733;&#9733;&#9734;&#9734; &#8210;</span>
    <span class="skill"></span>
    intermediate knowledge, used several times
  </li>
  <li class="skill-item">
    <span class="rating"> &#9733;&#9733;&#9733;&#9734; &#8210;</span>
    <span class="skill"></span>
    good undestanding, used frequently
  </li>

  <li class="skill-item">
    <span class="rating">&#9733;&#9733;&#9733;&#9733; &#8210;</span>
    <span class="skill"></span>
    deep understanding, used on a daily basis
  </li>
  </ul>
</div>

【问题讨论】:

    标签: html css css-multicolumn-layout


    【解决方案1】:

    您可以将padding: 1px 0 添加到.align-left.align-right 两个容器中。这样p 标签的默认顶部和底部边距将保留在它们的容器内,不会由于像您的 codepen 中那样折叠边距而导致任何垂直偏移。

    https://codepen.io/anon/pen/YBxWbY

    【讨论】:

      【解决方案2】:

      您的问题是 p 元素上的边距正在折叠,就像 div 垂直堆叠时一样。 See Johannes answer.

      然而,你的概念是有缺陷的。您可能希望真正将评分与技能相关联

      ul.skill-explanation {
        list-style: none;
        padding-left: 0;
      }
      
      .skill-item {
        display: flex;
      }
      
      .skill-item > div {
        width:50%;
      }
      
      .rating {padding-right: 0.5em; 
      text-align:right;
      }
      <ul class="skill-explanation">
        <li class="skill-item">
          <div class="rating">&#9733;&#9734;&#9734;&#9734; &#8210;</div>
          <div class="skill">I can put it into context and am able to use it's basics</div>
        </li>
        <li class="skill-item">
          <div class="rating">&#9733;&#9733;&#9734;&#9734; &#8210;</div>
          <div class="skill">intermediate knowledge, used several times</div>
        </li>
        <li class="skill-item">
          <div class="rating">&#9733;&#9733;&#9733;&#9734; &#8210;</div>
          <div class="skill">good undestanding, used frequently</div>
        </li>
      
        <li class="skill-item">
          <div class="rating"> &#9733;&#9733;&#9733;&#9733; &#8210;</div>
          <div class="skill">deep understanding, used on a daily basis</div>
        </li>
      </ul>

      【讨论】:

        【解决方案3】:

        编辑 如果您想使用已有的代码。从设置为浏览器的段落“p”标签中删除边距。然后将行高设置为您想要的高度。
        原始答案
        如果您想轻松地排列项目,您将需要使用类似 flexbox 的东西。您可能还需要设置行高,以确保您的 unicode 图标和文本正确排列
        这将允许您完全控制文本和图标的对齐位置。 More info on flexbox at W3schools

        p{
          margin: 0;
          line-height: 1.5em;
        }
        

        弹性盒示例:

        .skill-explanation {
          display: flex;
          align-items: center;
        }
        .align-left, .align-right {
          line-height: 1.5rem;
        }
        

        .skill-explanation {
          display: flex;
          align-items: center;
        }
        .align-left, .align-right {
          line-height: 1.5em;
        }
        <div class="skill-explanation">
                  <div class="align-right">   
                    <p>&#9733;&#9734;&#9734;&#9734; &#8210; <br>
                      &#9733;&#9733;&#9734;&#9734; &#8210; <br>
                      &#9733;&#9733;&#9733;&#9734; &#8210; <br>
                      &#9733;&#9733;&#9733;&#9733; &#8210;</p>
                  </div>
                  <div class="align-left">
                    <p>I can put it into context and am able to use it's basics <br>
                      intermediate knowledge, used several times <br>
                      good undestanding, used frequently <br>
                      deep understanding, used on a daily basis</p>
                  </div>
                </div>

        但是您最好按照其他人的建议重新访问您的 HTML 代码并将其放入列表中,因为这样在语义上更正确且更易于维护

          <ul>
            <li>&#9733;&#9734;&#9734;&#9734; &#8210; I can put it into context and am able to use it's basics</li>
            <li>&#9733;&#9733;&#9734;&#9734; &#8210; intermediate knowledge, used several times</li>
            <li>&#9733;&#9733;&#9733;&#9734; &#8210; good undestanding, used frequently</li>
            <li>&#9733;&#9733;&#9733;&#9733; &#8210; deep understanding, used on a daily basis</li>
          </ul>
        

        【讨论】:

          猜你喜欢
          • 2016-07-15
          • 1970-01-01
          • 2018-09-01
          • 1970-01-01
          • 2016-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多