css - box-shadow 被父元素截断
问题描述
body {
margin: 0;
}
.root {
display: flex;
flex-direction: column;
width: 100%;
height: 100vh;
background-color: red;
}
.strip {
height: 120px;
background-color: rgb(111, 0, 255);
}
.main {
flex: 1;
overflow: hidden;
margin: 48px;
background-color: rgb(0, 255, 179);
display: grid;
grid-template-rows: min-content min-content 1fr;
}
.header {
height: 100px;
background-color: rgb(0, 217, 255);
}
.gallery {
height: 200px;
background-color: rgb(166, 255, 0);
box-shadow: 0px 0px 15px 15px rgba(0, 0, 0, 0.75);
z-index: 100;
}
.list {
background-color: rgb(214, 58, 131);
overflow: auto;
}
<div class="root">
<div class="strip">strip</div>
<div class="main">
<div class="header">header</div>
<div class="gallery">gallery</div>
<div class="list">
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
</div>
</div>
</div>
如您所见,画廊元素具有框阴影,但如果我将 .main css 更改为溢出,它将从父 div 中剪切:可见框阴影不会被切断,但它将禁用列表元素滚动
有没有办法将这两者结合在一起?(scroll 和 box-shadow 不切割)
顺便说一句:strip 元素有时可以渲染,有时不能
谢谢
解决方案
找到一个解决方案,删除overflow: hidden
from .main
(如果有的话,从所有父母中删除),并使用min-height: 0
它来flex: 1
获取剩余的高度(而不是更多)。
body {
margin: 0;
}
.root {
display: flex;
flex-direction: column;
width: 100%;
height: 100vh;
background-color: red;
}
.strip {
height: 120px;
background-color: rgb(111, 0, 255);
}
.main {
flex: 1;
// overflow: hidden;
min-height: 0; // <-- this will cause the flex: 1 take only the given height.
margin: 48px;
background-color: rgb(0, 255, 179);
display: grid;
grid-template-rows: min-content min-content 1fr;
}
.header {
height: 100px;
background-color: rgb(0, 217, 255);
}
.gallery {
height: 200px;
background-color: rgb(166, 255, 0);
box-shadow: 0px 0px 15px 15px rgba(0, 0, 0, 0.75);
z-index: 100;
}
.list {
background-color: rgb(214, 58, 131);
overflow: auto;
}
<div class="root">
<div class="strip">strip</div>
<div class="main">
<div class="header">header</div>
<div class="gallery">gallery</div>
<div class="list">
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
<div class="list-item">
<h1>Item</h1>
</div>
</div>
</div>
</div>
推荐阅读
- javascript - 如何在 fabricjs 版本 4 beta 中剪辑图像
- msbuild - directory.build.props :将存储在多级文件夹中的外部内容文件正确链接到 .csproj
- ios - 自动选择 SwiftUI 中的第 0 个项目
- java - MIP 中的来回通信是如何建立的?
- powerbi - PowerBI 查询性能
- python - 给定时间在python pandas中获取5分钟范围内的行
- pandas - 压缩目录中 gzip 文件的 pandas.read_csv
- python - 以dict格式输出yaml
- java - 为什么 javac 编译器找不到 javafx.collections 但我正在使用它?
- node.js - mocha/supertest 是否为每个测试套件创建快速服务器?