【发布时间】:2019-07-27 23:57:35
【问题描述】:
我尝试构建a pure CSS tree。我遇到了块之间的水平线问题(两个块处于同一水平)。我在以下 jsfiddles 中隔离了问题:
https://jsfiddle.net/8Lsv1ypd/3/
https://jsfiddle.net/8Lsv1ypd/4/
HTML:
<span class="first">First</span>
<span class="second">Second</span>
CSS:
.first {
background-color: #dc3545;
color: #fff;
font-size: 1.2rem;
border: 1px #ccc solid;
border-radius: 20px;
padding: 5px 10px;
margin-top: 10px;
}
.second {
background-color: #6f42c1;
color: #fff;
font-size: 1.2rem;
border: 1px #ccc solid;
border-radius: 5px;
padding: 5px 10px;
margin-top: 10px;
margin-left: 10px;
}
.second::before {
content: "";
position: relative;
top: -13px;
left: -30px;
border-left: 1px solid #aaa;
border-bottom: 1px solid #000;
border-radius: 0 0 0 0px;
height: 26px;
width: 50px !important;
}
当CSS位置(in .second::before)is set to relative时,不考虑宽度(以像素为单位固定),只显示垂直线,宽度“被浏览器强制”为1像素。
当CSS位置(in .second::before)is set to absolute时,不考虑宽度,显示的是水平线,但线没有连接两个块。
我已经尝试了以下选项的多种组合:
- 位置:绝对/相对/静态/固定
- 显示:块/内联
- 溢出:自动/可见;
我已经看过以下问题了:
- CSS position relative without relative width?
- CSS relative div's width auto extend by absolute div
- CSS relative, absolute positionings
- CSS Make the absolute child width independent from the relative parent width
- How does css position impact element width/height?
- How to use CSS position(relative, absolute) with percentage (height, width) dimension?
还有以下文章:
【问题讨论】:
-
你需要 inline-block .. 伪元素默认是 inline 元素 ... 当设置绝对时它们变成块元素但在相对时保持内联
-
对于第二个问题, position:absolute 需要一个引用,所以你需要在 span 元素中添加
position: relative;才能让 left/top 像你想要的那样工作 -
我同意@TemaniAfif,
display: inline-block和position: relative是要走的路 -
是的......很棒的建议:jsfiddle.net/bhn4kso9 但我无法摆脱文本“第二”之前的空白。
-
是的,
display:inline-block总是会占用一些空间使用float:left;而不是inline-block:)
标签: html css css-position