我试图创建一个编号的订单列表,周围有一个边框(画一个圆圈).我希望列表的编号在边框框中居中,边框框在段落中居中.现在,两个项目都在顶部居中(数字居中于边框框顶部,边框框居中于段落顶部).我想让边框框(圆圈)根据段落大小进行调整.因此,如果我的段落占了三行,那么圆圈将位于这三行的中间.如果它占据了5行,那么圆圈将出现在这5行的中间.

HTML

  <ol>
    <li>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
    </li>
    <li>
     Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
    </li>
    <li>
      Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat
    </li>
    <li>
     Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </li> 
  </ol>

CSS

li{
margin-top: 20px;
margin-right: 30%;
font-size: 20px;
}

ol {
    counter-reset:li; /* Initiate a counter */
    margin-left:0; /* Remove the default left margin */
    padding-left:0; /* Remove the default left padding */
}

ol > li {
    position:relative; /* Create a positioning context */
    margin:0 30% 20px 4.5em; /* Give each list item a left margin to make room for the numbers */
    padding:4px 8px; /* Add some spacing around the content */
    list-style:none; /* Disable the normal item numbering */
}

ol > li:before {
    content:counter(li); /* Use the counter as content */
    counter-increment:li; /* Increment the counter by 1 */
    /* Position and style the number */
    position:absolute;
    top: 0px;
    left:-2.5em;
    margin-right:8px;
    padding:4px;
  width: 50px;
  height: 50px;
  border-radius: 50%;
    color:#fff;
    background:blue;
    font-weight:bold;
    font-family:"Helvetica Neue", Arial, sans-serif;
    text-align: center;
}

推荐答案

您可以通过在CSS中为:before伪元素添加以下内容来实现所需的功能:

ol > li:before {
  top: 50%;
  transform: translateY(-50%);
  display: flex;
  justify-content: center;
  align-items: center;
}

将顶部设置为50%将使元素的位置从顶部移动一半,但以元素的top为基础.

设置变换:translateY(-50%);将使元件向后移动其自身高度的50%,从而使元件真正居中.

(您可以在此处看到如何垂直和水平执行此操作的示例:https://www.w3schools.com/css/tryit.asp?filename=trycss_align_transform)

最后一种样式使用弹性框在圆圈内垂直和水平居中放置数字.

(更多关于flex box的信息:https://www.w3schools.com/css/css3_flexbox.asp)

为了说明你应该保留你已经拥有的所有样式,只需添加这些新样式,你就可以开始了!

Html相关问答推荐

卡片上方的文本

我需要主页按钮出现在中间

为什么使用Google字体的SVG徽标内的文本不能在网页上正确呈现?

更改垫子输入的涟漪 colored颜色

摆动的html标签

如何制作带有粘性头和脚的可滚动车身

为什么 `::before` 在使用内容 `url(svg)` 时会增加一些高度

R 中的网页抓取数字?

带有数据 URI 的音频在 Chrome 中失败

为什么盒子不在div中显示?

在HTML请求中添加源URL

如何使用CSS Select 同级元素的::before伪元素?

如何使背景 colored颜色 逐渐渐变成另一种 colored颜色 ?

绝对类在另一个绝对类之上

css 网格创建空行和列

在shiny 的应用程序中使用图标功能时出错

使用 TailwindCSS 将徽标放在左上角,将菜单放在右上角

font awesome 的 CDN/CSS 如何工作?

Angular Material Hide Password 在输入时切换

如何在文本中有小数字(文本数字)?