【问题标题】:Box-shadow on absolute positioned div with no content?没有内容的绝对定位div上的框阴影?
【发布时间】:2019-12-04 00:44:21
【问题描述】:

我有一个 DIV 用作“分隔符”。

要求:

  • 该分隔符应放在标题的底部。
  • 我需要该分隔符跨越整个视口宽度。
  • 我需要使用box-shadow 对其进行样式设置。

问题:

  • 我有一个外部布局 DIV,它将所有内容限制为 max-width = 500px;
  • 我的标题不是fixed(它很粘,所以滚动后才变成fixed)。它以relative 开头,所以我可以absolute 定位分隔符。
  • 我不得不用position: absolutewidth: 100vw 来制作分隔符DIV,所以让它跨越整个视口。

问题

  • 如果我使用border-bottom 属性,它会按预期工作。它跨越视口的整个宽度(第一个 sn-p)。
  • 但它不适用于box-shadow(不显示任何内容。第二个 sn-p)。为什么?在这种情况下是否可以使用box-shadow

SNIPPET:border-bottom

一起使用

.layout {
  width: 100%;
  max-width: 500px;
  margin: auto;
}

.header {
  height: 120px;
  background-color: lightblue;
  position: relative;
}

.separator {
  position: absolute;
  width: 100vw;
  height: 3px;
  top: 100%;
  border-bottom: 1px solid black;
  /*box-shadow: 0 4px 3px -3px black;*/
	left: 50%;
	transform: translate(-50%, -50%);
}

.main {
  height: 150px;
  background-color: lightgreen;
}
<div class="layout">
  <div class="header">
    Header
    <div class="separator"></div>
  </div>
  <div class="main">
    Main
  </div>
</div>

SNIPPET:不适用于box-shadow

.layout {
  width: 100%;
  max-width: 500px;
  margin: auto;
}

.header {
  height: 120px;
  background-color: lightblue;
  position: relative;
}

.separator {
  position: absolute;
  width: 100vw;
  height: 3px;
  top: 100%;
  /*border-bottom: 1px solid black;*/
  box-shadow: 0 4px 3px -3px black;
	left: 50%;
	transform: translate(-50%, -50%);
}

.main {
  height: 150px;
  background-color: lightgreen;
}
<div class="layout">
  <div class="header">
    Header
    <div class="separator"></div>
  </div>
  <div class="main">
    Main
  </div>
</div>

【问题讨论】:

  • 我可以在 header 上自行设置 box-shadon。这就是我在需要“粘性”标题之前所做的事情。但是现在我的标题以static / relative 开头,并且在滚动之后才变成fixed。当它在fixed“阶段”时,就没有什么神秘之处了。它肯定会跨越整个视口。但是当它是static / relative 时,我的外部布局 div 会限制它的宽度。我的计划 B 是摆脱 Layout div 并将 max-width 属性传递给它的孩子。但我喜欢在一个地方控制我网站的max-width 的想法。

标签: html css


【解决方案1】:

您正在使用的 5 值 box-shadow 速记设置以下属性:

offset-x | offset-y | blur-radius | spread-radius | color

您的传播半径设置为-3px。这会将阴影的“高度”减小到 0,因为分隔符的高度是 3px

如果你增加传播半径,阴影将会显示。试试这个:

box-shadow: 0 4px 3px 0px black

【讨论】:

  • 你是对的。我这样做是因为我只需要在底部有一个阴影。它在其他 DIV 中工作。完全相同的盒子阴影。为什么它在这个中不起作用?你知道吗?
  • 它还在处理哪些其他 DIV? 0 2px 3px -1px black 将阴影移动到分隔符的底部。
  • 如果您设置更大的高度,它会起作用。那个对面的3px and -3px 它隐藏了阴影的顶部。但不知何故,它只适用于具有一定高度的 div。尽量保持我的原点box-shadow 并增加分隔符div 的height。阴影会出现!
  • 您的回答帮助我实现了目标。请参阅下面的答案以及我最终的表现。使用相同的box-shadow。谢谢!
【解决方案2】:

不知何故,box-shadow 属性在这种情况下需要一些最小的height 渲染阴影。我设法找到了解决方案。请参阅下面的 sn-p。

.layout {
  width: 100%;
  max-width: 500px;
  margin: auto;
}

.header {
  height: 120px;
  background-color: lightblue;
  position: relative;
}

.separator {
  position: absolute;
  width: 100vw;
  height: 10%;
  top: 95%;
  /*border-bottom: 1px solid black;*/
  box-shadow: 0 4px 3px -3px black;
	left: 50%;
	transform: translate(-50%, -50%);
}

.main {
  height: 150px;
  background-color: lightgreen;
}
<div class="layout">
  <div class="header">
    Header
    <div class="separator"></div>
  </div>
  <div class="main">
    Main
  </div>
</div>

【讨论】:

  • 这话不完全对,0 height可以逍遥法外,只要点差至少是1px
  • @ZohirSalak 但它会同时传播到顶部和底部吗?在这种情况下,我只想要底部阴影。
  • 您可以使用偏移量来定位它。
猜你喜欢
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多