已经有一段时间了! 我目前正在尝试解决问题,我希望有人可以帮助我。 我有一个固定的侧边栏和标题。两者都投下了阴影。但是,我不希望标题在侧边栏上投射阴影(我希望它们在同一级别上)。同时,标题包含下拉列表,这些需要将鼠标悬停在所有内容上。 由于它相当复杂,我创造了一个jsfiddle。
由于某种原因,我被迫在这里粘贴代码(SO输入验证)。
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("1.png");
Mat gray;
cvtColor(img, //BGR form image
gray, //Mat for gray(destination)
CV_BGR2GRAY); //type of transform(in here BGR->GRay)
Mat edgeImage;
Canny(gray, //Input Array
edgeImage, //Output Array
40, // Lower threshold
120); //Upper threshold
namedWindow("Edge-Image"); //create a window for display image
imshow("Edge-Image",edgeImage); //Display edgeImage in window that in before line create
waitKey(0); //stick display window and wait for any key
return 0;
}
和css
<div class="layout">
<div class="header z-depth-2">
<div class="dropdown-toogle">
<div class="dropdown-menu">
</div>
</div>
</div>
<div class="page-wrapper">
<div class="sidebar z-depth-2">
</div>
<div class="content">
</div>
</div>
</div>
请注意,当您更改视口宽度时,即使z-index较大,也会在侧边栏后面下拉幻灯片。
如果我增加标题的z-index,它会开始在侧边栏上投射阴影(下拉开始工作),我想避免。我一直在玩不同的组合,但无法正确分类。
希望我能说清楚,非常感谢!
答案 0 :(得分:2)
使用您当前的布局,这是不可能的。由于标题设置为侧边栏后面的z-index,因此标题的任何子节点也将位于侧边栏的后面。 (详情请参阅 stacking contexts )
要解决此问题,您可以在内容窗格中使用插入box-shadow
。这将使它有一个阴影,好像它是由标题和侧边栏投射,但它实际上是容器投射它自己。这样您就不必担心标题投射到侧边栏上,侧边栏可以安全地位于标题“后面”。有了这个你根本不需要摆弄z-index(虽然我没有删除它们,以防页面上的其他东西需要它。)
为了使其正常工作,我必须更改您使用的padding
以使用margin
定位内容元素,但老实说,这是一个更好的属性,可用于在元素周围添加空间。我建议您也阅读一下何时使用 padding
vs margin
。
https://jsfiddle.net/79gykeu3/6/
HTML
<div class="layout">
<div class="header z-depth-2">
<div class="dropdown-toogle">
<div class="dropdown-menu">
</div>
</div>
</div>
<div class="page-wrapper">
<div class="sidebar z-depth-2">
</div>
<div class="content">
</div>
</div>
</div>
CSS
需要注意的是.content
类现在有了box-shadow
html {
height: 100%;
}
body {
width: 100%;
height: 100%;
margin: 0;
}
.layout {
width: 100%;
height: 100%;
position: relative;
}
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 70px;
background-color: blue;
z-index: 103;
}
.sidebar {
position: fixed;
top: 70px;
left: 0;
width: 200px;
background-color: green;
bottom: 0;
z-index:101;
}
.content {
margin-left: 200px;
width: 100%;
height: 100%;
box-shadow: inset 0 4px 5px 0 rgba(0, 0, 0, 0.14), 0 1px 10px 0 rgba(0, 0, 0, 0.12), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
}
.page-wrapper {
margin-top: 70px;
height: 100%;
}
.dropdown-toogle {
margin-right: 100px;
float: right;
position: relative;
height: 100%;
width: 50px;
background-color: yellow;
}
.dropdown-menu {
position: absolute;
top: 100%;
right: 0;
width: 70%;
height: 200px;
background-color: grey;
z-index:1000;
}
.z-depth-2 {
}
答案 1 :(得分:0)
首先,非常感谢Don,他的方法完全有效,聪明,甚至可能比我使用的更好。 但是,我认为我会发布我的最终解决方案以及有人可能会重视有两种方法。我所做的就是我添加了一个&#34;假的&#34;梯度绝对位于标题和侧边栏的右侧。 我之所以这样做,基本上是我使用了我所知道并且可以信赖的技术。我也不喜欢内容上的溢出自动。无论如何,就是这样:
https://jsfiddle.net/79gykeu3/11/
<div class="layout">
<div class="header">
<div class="header__shadow">
</div>
<div class="dropdown-toogle">
<div class="dropdown-menu">
</div>
</div>
</div>
<div class="page-wrapper">
<div class="sidebar">
<div class="sidebar__shadow">
</div>
</div>
<div class="content">
</div>
</div>
</div>
的CSS
.layout {
width: 100 %;
height: 100 %;
position: relative;
}
.header {
position: fixed;
top: 0;
left: 0;
right: 0;
height: 70px;
background - color: blue;
z - index: 103;
}
.sidebar {
position: fixed;
top: 70px;
left: 0;
width: 200px;
background - color: green;
bottom: 0;
z - index:101;
}
.content {
padding - left: 200px;
height: 8000px;
}
.page - wrapper {
padding - top: 70px;
height: 100 %;
}
.dropdown - toogle {
margin - right: 100px;
float: right;
position: relative;
height: 100 %;
width: 50px;
background - color: yellow;
}
.dropdown - menu {
position: absolute;
top: 100 %;
right: 0;
width: 400px;
height: 200px;
background - color: grey;
z - index:1000;
}
.header__shadow {
position: absolute;
height: 7px;
left: 200px;
right: 0;
top: 100 %;
background: linear - gradient(to bottom, rgba(0, 0, 0, 0.35) 0%,rgba(0, 0, 0, 0) 100%);
}
.sidebar__shadow {
position: absolute;
left: 100 %;
top: 0;
bottom: 0;
width: 7px;
background: linear - gradient(to right, rgba(0, 0, 0, 0.35) 0%,rgba(0, 0, 0, 0) 100%);
}