css - 为什么 CSS 'overflow-x' 和 'overflow-y' 不能用于盒子阴影?这是一个错误吗?

标签 css

我不确定这是一个实现错误还是我误解了 box-shadowoverflow-xoverflow-y< 的关系。我猜这不是错误,因为我可以在 Chrome、Firefox 和 Safari 上确认这一点。

box-shadow 在涉及 overflow 属性时似乎是全有或全无。 overflow: hidden 适用于盒子阴影,overflow: visible 也适用......但是

overflow-x: hidden;
overflow-y: visible;

... 不起作用。浏览器只是隐藏了 x 轴和 y 轴。在我看来,预期的行为是 x 轴上的框阴影被隐藏,而 y 轴上的框阴影可见。

这就是我的意思,还有一个CodePen :

body {padding: 0; margin: 0;}.container {background: dimgray;display: flex;align-items: center;justify-content: center;width: 100vw;height: 100vh;}

.orangeSquare {
  background: orange;
  width: 100px;
  height: 100px;
  display: flex;
  align-items: center;
  justify-content: center;
  
  overflow-x: hidden;
  overflow-y: visible; /* why doesn't this work? */
 
}

.tealRectangle {
  background: teal;
  color: white;
  width: 92px;
  height: 92px;
  line-height: 92px;
  text-align: center;
  
  box-shadow: 0 0 85px 15px black;
}
<div class='container'>
  <div class='orangeSquare'>
    <span class='tealRectangle'>—</span>
  </div>
</div>

关于为什么会发生这种情况的任何想法?还是我错过了一些明显的东西?解决方法也将不胜感激。谢谢!

最佳答案

单边框阴影的一个简单解决方法是添加一个带有渐变背景的定位伪元素,该背景逐渐变为透明。

例如对于下面的阴影(添加跨浏览器渐变的东西)

.cropped-shadow {
	position: relative;
	z-index: 5; 
	background: #fc0;
	height: 70px;
}

.cropped-shadow:after {
	content:" ";
	display: block;
	position: absolute;
	top: 100%;
	width: 100%;
	height: 10px;
	background: linear-gradient(to bottom, rgba(0,0,0,0.25) 0%, rgba(0,0,0,0) 100%);
}
<div class="cropped-shadow"></div>

关于css - 为什么 CSS 'overflow-x' 和 'overflow-y' 不能用于盒子阴影?这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37822036/

相关文章:

html - 图像上的 Safari 绝对位置问题

internet-explorer - IE9 @font-face 遇到未知错误

javascript - 单选按钮的不同颜色

css - 使用带有变量的sass lighten函数不起作用

css - 在 DotNetNuke 中禁用 Telerik 的功能

javascript - Firefox 正在删除过渡混合结果

html - 如何在 SVG 中使用 CSS 背景 url

css - 在 Angular Material 的 md-option 上将空白设置为正常

javascript - 如何在网页中为下拉列表框制作进度条

javascript - html 和 body 高度的缺点 100%?