我的网站导航中有一个状态信息栏(.nav-infobar__container
),当.active
时,必须改变它的位置和减少另一个分开 div
(#s_body
)。
但是,只有部分功能正常工作 - 状态栏的位置正在改变,但另一个div
的宽度保持不变。
我尝试了以下 CSS :
div#s_body{
position: fixed;
top: 48px;
left: 270px;
width: calc(100% - 270px);
height: calc(100% - 48px);
transition: width 213ms;
z-index: 1;
overflow: auto;
}
.nav-infobar__container.active div#s_body{ // should be affecting #s_body
width: calc(100% - 650px);
overflow: hidden;
}
.nav-infobar__container{
position: fixed;
top: 48px;
right: -380px;
width: 379px;
height: calc(100% - 48px);
transition: right 213ms;
}
.nav-infobar__container.active{
right: 0px;
}
但无济于事。我希望 JavaScript 成为最后的手段,因为我不想在此处添加更多,并且已经相当大的 JS 网站。
这是我正在使用的(简化的)降价:
<!-- navigation !-->
<div class="navigation-container">
<div class="nav-infobar__container">
<div class="nav-infobar__outer-content">
<!-- some content !-->
</div>
</div>
</div>
<!-- body !-->
<div id="s_body"> <!-- this div should be decreasing in width, but isn't !-->
<div class="main__fixed-container">
<!-- some content !-->
</div>
</div>
我对所有东西进行了三重检查,一切看起来都很好(就像我以前做过的那样);所以我很困惑,此时此刻。
感谢所有帮助!谢谢:))
答案 0 :(得分:0)
在目前的形式中,您的CSS没有按照您的期望行事。当.nav-infobar__container.active div#s_body
为div
的孩子时,s_body
会定位.nav-infobar__container
.nav-infobar__container
active
,而div#s_body
也有.nav-infobar__container
类。
目前没有CSS选择器允许您从active
定位.navigation-container
,因为他们不是兄弟姐妹,因此需要将.nav-infobar__container.active div#s_body
课程添加到.navigation-container.active+div#s_body
代替。您可以通过进行以下更改来在CSS中获得所需的结果:
+
更改为div#s_body
。此规则使用相邻的兄弟(.navigation-container
)选择器定位$(".navigation-container").on("click", function() {
$(this).toggleClass("active");
});
div#s_body {
position: fixed;
top: 48px;
left: 270px;
width: calc(100% - 270px);
height: calc(100% - 48px);
transition: width 213ms;
z-index: 1;
overflow: auto;
background: red;
}
.navigation-container.active+div#s_body {
width: calc(100% - 650px);
overflow: hidden;
background-color: green;
}
.nav-infobar__container {
position: fixed;
top: 48px;
/*right: -380px;*/
width: 379px;
height: calc(100% - 48px);
transition: right 213ms;
background: blue;
height: 200px;
}
.nav-infobar__container.active {
right: 0px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<!-- navigation !-->
<div class="navigation-container">
<div class="nav-infobar__container">
<div class="nav-infobar__outer-content">
<!-- some content !-->
</div>
</div>
</div>
<!-- body !-->
<div id="s_body">
<!-- this div should be decreasing in width, but isn't !-->
<div class="main__fixed-container">
<!-- some content !-->
</div>
</div>
&#13;
<!DOCTYPE html>
<html>
<head>
<script
src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous">
</script>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body>
<div class="container">
<div class="row">
<div class="advanced_filt" id="adv">
<div class="advanced_filter">
<span>Advanced Filter Menu</span>
</div>
</div>
<div class="main-section" id="main">
<a href="#" id="showHide">Hide / Show Advanced Filter</a>
<div class="search_list">
</div>
</div>
</div>
</div>
</body>
</html>
&#13;
.advanced_filt{
width : 25%;
display : inline-block;
float : left;
}
.main-section{
width : 75%;
display : inline-block;
float : left;
}
.advanced_filter {width:100%; height:500px; background:red;}
.advanced_filter span {color:#fff; position:relative; top:50%; width:100%;}
.search_list {width:100%; height:500px; background:yellow;}
&#13;