CSS 定位在父元素之外
CSS positioning outside of the parent element
嗨,Whosebug 社区,
我需要你的帮助来解决 CSS 问题。对于我的一个项目,我需要设计一个纯 CSS 时间间隔查看器。由于图片总是比长文字更好,您可以在下面看到我的工作结果:
但是我不想将 start/end 时间放入时间间隔,而是将开始时间放在 top/left 上方,将结束时间放在 bottom/right 下方。我想要这样的结果
这是HTML:
<ul class="day-timeline">
<li class="time-interval" style="left:4%; width:46%">
<label class="time start-time">01:00</label>
<label class="time end-time">12:00</label>
</li>
<li class="time-interval" style="left:58%; width:17%">
<label class="time start-time">14:00</label>
<label class="time end-time">18:00</label>
</li>
</ul>
<ul class="day-timeline day-timeline-closed">
<li class="time-interval closed">
<label class="time">Closed</label>
</li>
</ul>
这是CSS:
* {
box-sizing: border-box;
}
ul.day-timeline {
padding: 0;
border-left: 1px solid black;
border-right: 1px solid black;
height: 20px;
overflow: hidden;
position: relative;
&:after {
content: '';
width: 100%;
height: 1px;
background: black;
display: block;
position: relative;
top: 10px;
}
li {
display: block;
position: absolute;
background-color: #bed4a7;
border: 1px solid green;
z-index: 1;
padding-left: 5px;
border-radius: 3px;
height: 100%;
font-weight: bold;
width: 100%;
&.closed {
background-color: lightgray;
border: 1px solid black;
label {
color :black;
}
}
label {
font-size: 0.75rem;
color: green;
&.start-time {
position: absolute;
top:-10px;
left:0;
}
}
label + label {
&:before {
content: '-';
padding: 0 0.25rem;
}
}
}
}
ul.day-timeline-closed {
border: none;
}
你可以在这里看到它:https://codepen.io/zannkukai/pen/XWbYXjG。
尽管尝试了很多次,但我从未得到正确的结果:'( CSS-guru 能够帮助我解决我的问题。我认为问题出在 label
定位。但是我是否使用了 position:absolute; top:-10px
标签范围在父级之外并且不显示 :'(
label {
font-size: 0.75rem;
color: green;
&.start-time {
position: absolute;
top:-10px;
left:0;
}
}
非常感谢
您已成功移动开始时间,但您在 ul
上设置了 overflow: hidden
,因此按要求将其隐藏。设置 ul.day-timeline { overflow: visible; }
并从那里开始
从ul.day-timeline中移除overflow: hidden
,然后就可以把时间写在父元素之外了。
听到 ul.day-时间线归因于:
ul.day-timeline {
padding: 0;
border-left: 1px solid black;
border-right: 1px solid black;
height: 20px;
//overflow: hidden;
position: relative;
并听到整个 css:
* {
box-sizing: border-box;
}
ul.day-timeline {
padding: 0;
border-left: 1px solid black;
border-right: 1px solid black;
height: 20px;
//overflow: hidden;
position: relative;
&:after {
content: '';
width: 100%;
height: 1px;
background: black;
display: block;
position: relative;
top: 10px;
}
li {
display: block;
position: absolute;
background-color: #bed4a7;
border: 1px solid green;
z-index: 1;
padding-left: 5px;
border-radius: 3px;
height: 100%;
font-weight: bold;
width: 100%;
&.closed {
background-color: lightgray;
border: 1px solid black;
label {
color :black;
}
}
label {
font-size: 0.75rem;
color: green;
&.start-time-first {
position: absolute;
top: -15px;
left: 0px;
}
&.end-time-first {
position: absolute;
top: 20px;
right: 5px;
}
&.start-time-second {
position: absolute;
top: -15px;
left: 0px;
}
&.end-time-second {
position: absolute;
top: 20px;
right: 5px;
}
}
}
}
ul.day-timeline-closed {
border: none;
}
和class你必须重命名定位时间:
HTML 代码段
<li class="time-interval" style="left:4%; width:46%">
<label class="time start-time-first">01:00</label>
<label class="time end-time-first">12:00</label>
</li>
<li class="time-interval" style="left:58%; width:17%">
<label class="time start-time-second">14:00</label>
<label class="time end-time-second">18:00</label>
</li>
看起来像这样 -> solution
这是一个带有 CSS 的工作片段,我还包括一个 codepen,基本上你只需要使用左右 CSS 属性就可以工作在使用 position:absolute
之后,我在结束时间添加 right:0
以强制其位置向右,并在开始时间添加 left:0
以强制其向左移动,顶部和底部也是如此 CSS x 轴位置的属性。
* {
box-sizing: border-box;
}
ul.day-timeline {
padding: 0;
border-left: 1px solid black;
border-right: 1px solid black;
height: 20px;
position: relative;
}
ul.day-timeline:after {
content: '';
width: 100%;
height: 1px;
background: black;
display: block;
position: relative;
top: 10px;
}
ul.day-timeline li {
display: block;
position: absolute;
background-color: #bed4a7;
border: 1px solid green;
z-index: 1;
padding-left: 5px;
border-radius: 3px;
height: 100%;
font-weight: bold;
width: 100%;
}
ul.day-timeline li.closed {
background-color: lightgray;
border: 1px solid black;
}
ul.day-timeline li.closed label {
color: black;
}
ul.day-timeline li label {
font-size: 0.75rem;
color: green;
}
ul.day-timeline li label.start-time-first {
position: absolute;
top: -15px;
left: 0px;
}
ul.day-timeline li label.end-time-first {
position: absolute;
top: 20px;
right: 0;
}
ul.day-timeline li label.start-time-second {
position: absolute;
top: -15px;
left: 0px;
}
ul.day-timeline li label.end-time-second {
position: absolute;
top: 20px;
right: 0;
}
ul.day-timeline-closed {
border: none;
}
<ul class="day-timeline">
<li class="time-interval" style="left:4%; width:46%">
<label class="time start-time-first">01:00</label>
<label class="time end-time-first">12:00</label>
</li>
<li class="time-interval" style="left:58%; width:17%">
<label class="time start-time-second">14:00</label>
<label class="time end-time-second">18:00</label>
</li>
</ul>
<ul class="day-timeline day-timeline-closed">
<li class="time-interval closed">
<label class="time">Closed</label>
</li>
</ul>
嗨,Whosebug 社区,
我需要你的帮助来解决 CSS 问题。对于我的一个项目,我需要设计一个纯 CSS 时间间隔查看器。由于图片总是比长文字更好,您可以在下面看到我的工作结果:
但是我不想将 start/end 时间放入时间间隔,而是将开始时间放在 top/left 上方,将结束时间放在 bottom/right 下方。我想要这样的结果
这是HTML:
<ul class="day-timeline">
<li class="time-interval" style="left:4%; width:46%">
<label class="time start-time">01:00</label>
<label class="time end-time">12:00</label>
</li>
<li class="time-interval" style="left:58%; width:17%">
<label class="time start-time">14:00</label>
<label class="time end-time">18:00</label>
</li>
</ul>
<ul class="day-timeline day-timeline-closed">
<li class="time-interval closed">
<label class="time">Closed</label>
</li>
</ul>
这是CSS:
* {
box-sizing: border-box;
}
ul.day-timeline {
padding: 0;
border-left: 1px solid black;
border-right: 1px solid black;
height: 20px;
overflow: hidden;
position: relative;
&:after {
content: '';
width: 100%;
height: 1px;
background: black;
display: block;
position: relative;
top: 10px;
}
li {
display: block;
position: absolute;
background-color: #bed4a7;
border: 1px solid green;
z-index: 1;
padding-left: 5px;
border-radius: 3px;
height: 100%;
font-weight: bold;
width: 100%;
&.closed {
background-color: lightgray;
border: 1px solid black;
label {
color :black;
}
}
label {
font-size: 0.75rem;
color: green;
&.start-time {
position: absolute;
top:-10px;
left:0;
}
}
label + label {
&:before {
content: '-';
padding: 0 0.25rem;
}
}
}
}
ul.day-timeline-closed {
border: none;
}
你可以在这里看到它:https://codepen.io/zannkukai/pen/XWbYXjG。
尽管尝试了很多次,但我从未得到正确的结果:'( CSS-guru 能够帮助我解决我的问题。我认为问题出在 label
定位。但是我是否使用了 position:absolute; top:-10px
标签范围在父级之外并且不显示 :'(
label {
font-size: 0.75rem;
color: green;
&.start-time {
position: absolute;
top:-10px;
left:0;
}
}
非常感谢
您已成功移动开始时间,但您在 ul
上设置了 overflow: hidden
,因此按要求将其隐藏。设置 ul.day-timeline { overflow: visible; }
并从那里开始
从ul.day-timeline中移除overflow: hidden
,然后就可以把时间写在父元素之外了。
听到 ul.day-时间线归因于:
ul.day-timeline {
padding: 0;
border-left: 1px solid black;
border-right: 1px solid black;
height: 20px;
//overflow: hidden;
position: relative;
并听到整个 css:
* {
box-sizing: border-box;
}
ul.day-timeline {
padding: 0;
border-left: 1px solid black;
border-right: 1px solid black;
height: 20px;
//overflow: hidden;
position: relative;
&:after {
content: '';
width: 100%;
height: 1px;
background: black;
display: block;
position: relative;
top: 10px;
}
li {
display: block;
position: absolute;
background-color: #bed4a7;
border: 1px solid green;
z-index: 1;
padding-left: 5px;
border-radius: 3px;
height: 100%;
font-weight: bold;
width: 100%;
&.closed {
background-color: lightgray;
border: 1px solid black;
label {
color :black;
}
}
label {
font-size: 0.75rem;
color: green;
&.start-time-first {
position: absolute;
top: -15px;
left: 0px;
}
&.end-time-first {
position: absolute;
top: 20px;
right: 5px;
}
&.start-time-second {
position: absolute;
top: -15px;
left: 0px;
}
&.end-time-second {
position: absolute;
top: 20px;
right: 5px;
}
}
}
}
ul.day-timeline-closed {
border: none;
}
和class你必须重命名定位时间:
HTML 代码段
<li class="time-interval" style="left:4%; width:46%">
<label class="time start-time-first">01:00</label>
<label class="time end-time-first">12:00</label>
</li>
<li class="time-interval" style="left:58%; width:17%">
<label class="time start-time-second">14:00</label>
<label class="time end-time-second">18:00</label>
</li>
看起来像这样 -> solution
这是一个带有 CSS 的工作片段,我还包括一个 codepen,基本上你只需要使用左右 CSS 属性就可以工作在使用 position:absolute
之后,我在结束时间添加 right:0
以强制其位置向右,并在开始时间添加 left:0
以强制其向左移动,顶部和底部也是如此 CSS x 轴位置的属性。
* {
box-sizing: border-box;
}
ul.day-timeline {
padding: 0;
border-left: 1px solid black;
border-right: 1px solid black;
height: 20px;
position: relative;
}
ul.day-timeline:after {
content: '';
width: 100%;
height: 1px;
background: black;
display: block;
position: relative;
top: 10px;
}
ul.day-timeline li {
display: block;
position: absolute;
background-color: #bed4a7;
border: 1px solid green;
z-index: 1;
padding-left: 5px;
border-radius: 3px;
height: 100%;
font-weight: bold;
width: 100%;
}
ul.day-timeline li.closed {
background-color: lightgray;
border: 1px solid black;
}
ul.day-timeline li.closed label {
color: black;
}
ul.day-timeline li label {
font-size: 0.75rem;
color: green;
}
ul.day-timeline li label.start-time-first {
position: absolute;
top: -15px;
left: 0px;
}
ul.day-timeline li label.end-time-first {
position: absolute;
top: 20px;
right: 0;
}
ul.day-timeline li label.start-time-second {
position: absolute;
top: -15px;
left: 0px;
}
ul.day-timeline li label.end-time-second {
position: absolute;
top: 20px;
right: 0;
}
ul.day-timeline-closed {
border: none;
}
<ul class="day-timeline">
<li class="time-interval" style="left:4%; width:46%">
<label class="time start-time-first">01:00</label>
<label class="time end-time-first">12:00</label>
</li>
<li class="time-interval" style="left:58%; width:17%">
<label class="time start-time-second">14:00</label>
<label class="time end-time-second">18:00</label>
</li>
</ul>
<ul class="day-timeline day-timeline-closed">
<li class="time-interval closed">
<label class="time">Closed</label>
</li>
</ul>