【问题标题】:Align ordered list number to first row of content将有序列表编号与第一行内容对齐
【发布时间】:2017-03-14 20:41:54
【问题描述】:

我有一个可以包含任意数量元素的有序列表。每个元素的大小可以不同,但​​无论大小如何,我都希望有序列表的数量与内容的第一行对齐。所以我想要实现的是:

  1. Lo​​rem ipsum dolor sit amet, consectetur adipiscing elit...
  2. 框 1

请参阅我的 jsfiddle 以了解我遇到的问题。

https://jsfiddle.net/txo5bsua/2/

这是我拥有的 HTML 和 CSS

.boxes {
  display: table;
  width: 100%;
  height: 100%;
}

.box {
  display: table-cell;
}

.box1 {
  background: orange;
  width: 75%;
}

.box2 {
  background: yellow;
}
<ol>
  <li>
    <div class="boxes">
      <div class="box box1">
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi quis condimentum massa. Quisque purus nisl, finibus id placerat id, ultricies non magna. Sed justo dui, tristique et metus at, fringilla viverra ipsum. Duis malesuada est eget lectus fermentum,
        vitae pretium eros tempor. Integer eu mi metus. Cras dui ipsum, iaculis ut libero dictum, dapibus consequat orci. Sed semper vitae lorem eu sollicitudin. Curabitur dapibus fringilla facilisis. Nullam facilisis ante in velit maximus gravida.
      </div>
      <div class="box box2">
        <input type="radio">Yes
        <input type="radio">No
      </div>
    </div>
  </li>
  <li>
    <div class="boxes">
      <div class="box box1">Box 1</div>
      <div class="box box2">Box 2</div>
    </div>
  </li>
</ol>

你能帮我解决这个问题吗?

【问题讨论】:

  • 你还想要 .boxes 之间的间隙吗?
  • (有趣:我认为内容在 Firefox 上的呈现方式完全符合您的要求。在 Google Chrome 和 Safari 上,我看到内容开始之前的有序列表。所以我认为您的目标是摆脱所有浏览器中的视觉换行符,对吗?)
  • 将 display:table 更改为 display:inline-flex in class .boxes
  • @chirag 将 table 更改为 inline-flex 会使内容的顶部对齐,但当您从第一行转到第二行时,它也会导致分隔两列的垂直线发生变化。 ..(或者至少这是我观察到的;我将把我的小提琴与你现在在答案中发布的内容进行比较......)
  • (只有在浏览器宽度足够窄时才会出现单元格宽度在行之间变化的问题,但对于我来说,@chirag 的 jsfiddle 确实会出现这种情况......)

标签: html css


【解决方案1】:

这对你有用吗?

.boxes {
    display:table;
    width: 100%;
    height: 100%;
    float: right;
}
li {
  clear: both;
}

.box {
    display: table-cell;
 }

 .box1 {
     background: orange;
     width:75%;
  }

  .box2 {
      background: yellow;
   }
<ol>
    <li>
        <div class="boxes">
            <div class="box box1">
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi quis condimentum massa. Quisque purus nisl, finibus id placerat id, ultricies non magna. Sed justo dui, tristique et metus at, fringilla viverra ipsum. Duis malesuada est eget lectus fermentum, vitae pretium eros tempor. Integer eu mi metus. Cras dui ipsum, iaculis ut libero dictum, dapibus consequat orci. Sed semper vitae lorem eu sollicitudin. Curabitur dapibus fringilla facilisis. Nullam facilisis ante in velit maximus gravida.
            </div>
            <div class="box box2">
               <input type="radio">Yes
               <input type="radio">No
            </div>
        </div>  
    </li>
    <li>
        <div class="boxes">
            <div class="box box1">Box 1</div>
            <div class="box box2">Box 2</div>
        </div>  
    </li>
</ol>

【讨论】:

  • (对于其他对这里的差异与原始代码感到好奇的人:Mers 在.boxes 中添加了float: right,并添加了li { clear: both }。显然这两项更改都是必要的;如果你忽略了li { clear: both },这两个数字都在表格的顶部。)
  • 这解决了我在 Chrome 和 IE 中的问题!谢谢!
【解决方案2】:

为您的班级使用display: inline-flex; 而不是display: table; .boxes

如果您想保留框下方的空格,可以添加margin-bottom: 20px;

.boxes {
  display:inline-flex;
  width: 100%;
  height: 100%;
  margin-bottom: 20px;
}

.box {
  display: table-cell;
}

.box1 {
  background: orange;
  width:75%;
}

.box2 {
  background: yellow;
  width: 25%;
}

li {
  clear: both;
}
<ol>
<li>
<div class="boxes">
   <div class="box box1">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi quis condimentum massa. Quisque purus nisl, finibus id placerat id, ultricies non magna. Sed justo dui, tristique et metus at, fringilla viverra ipsum. Duis malesuada est eget lectus fermentum, vitae pretium eros tempor. Integer eu mi metus. Cras dui ipsum, iaculis ut libero dictum, dapibus consequat orci. Sed semper vitae lorem eu sollicitudin. Curabitur dapibus fringilla facilisis. Nullam facilisis ante in velit maximus gravida.
 </div>
   <div class="box box2">
     <input type="radio">Yes
     <input type="radio">No
   </div>
</div>  
</li>
<li>
<div class="boxes">
   <div class="box box1">Box 1</div>
   <div class="box box2">Box 2</div>
</div>  
</li>
</ol>

【讨论】:

  • 这在 Chrome 中效果很好,但在 IE 中效果不佳。列表项编号显示在左下角而不是左上角。
【解决方案3】:

更新的答案。它也可以在 IE 上运行

使用 display:inline-table

演示:jsfiddle

.boxes {
  display:inline-table;
  width: 100%;
  height: 100%;
}

.box {
  display: table-cell;
}

.box1 {
  background: orange;
  width:75%;
}

.box2 {
  background: yellow;
  width:25%;
}
<ol>
<li>
<div class="boxes">
   <div class="box box1">
     Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi quis condimentum massa. Quisque purus nisl, finibus id placerat id, ultricies non magna. Sed justo dui, tristique et metus at, fringilla viverra ipsum. Duis malesuada est eget lectus fermentum, vitae pretium eros tempor. Integer eu mi metus. Cras dui ipsum, iaculis ut libero dictum, dapibus consequat orci. Sed semper vitae lorem eu sollicitudin. Curabitur dapibus fringilla facilisis. Nullam facilisis ante in velit maximus gravida.
 </div>
   <div class="box box2">
     <input type="radio">Yes
     <input type="radio">No
   </div>
</div>  
</li>
<li>
<div class="boxes">
   <div class="box box1">Box 1</div>
   <div class="box box2">Box 2</div>
</div>  
</li>
</ol>

【讨论】:

  • 这在 Chrome 中效果很好,但在 IE 中效果不佳。列表项编号显示在左下角而不是左上角。
  • 我已经更新了我的答案。它也可以在 IE 上运行。你可以检查一下
  • 我可以确认它现在可以在 IE 中运行。我目前仍在使用@Mers 解决方案,但如果遇到任何问题,我会尝试此解决方案。
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 2017-05-29
  • 2013-05-12
  • 2015-01-30
  • 2020-01-24
相关资源
最近更新 更多