在我的网站上,我有一个侧面导航栏,你可以隐藏,我还有一个主要的中央div,它将包含一个工资单计算器。我希望这个div始终是水平集中的。但截至目前,它只是忽略了navbar
,并且仅仅根据父div的位置。
我猜测一旦它表现得如此正确地集中,它会在侧栏被隐藏时进行调整。
这是页面结构的html:
<div id="Main">
<div id="content">
<div id="navBar">
<div class="navBtn navBtnText">
Calculator
</div>
<div class="navBtn navBtnText">
About
</div>
<div class="navBtn navBtnText">
Services
</div>
</div>
<div id="Content-header">
<div id="navBar-control">
<a href="#" id="toggle-slide-button">
<img src="Images/menu_default.png" onmouseover="this.src='Images/menu_hoverr.png'" onmouseout="this.src='Images/menu_default.png'" />
</a>
</div>
<div>
<span>Calculator</span>
</div>
</div>
<div id="calc-box">
</div>
</div>
</div>
#Main {
width: 1164px;
height: 1000px;
margin: 0 auto;
border: 0px;
background-color: white;
}
}
#navBar{
background-color: #660000;
height: 100%;
width: 85px;
float: left;
}
#logo{
width: 132px;
height: 60px;
background-image: url(Images/ADPHeaderLogo.png);
background-size: contain;
}
.navBtn{
color: white;
width: 100%;
height: 70px;
cursor: pointer;
border-bottom: 1px solid rgba(255,255,255,.2);
opacity: 1;
font-size: 12px;
text-align: center;
}
.navBtnText {
line-height: 120px;
vertical-align: bottom;
}
.navBtn:hover{
background-color:#990000;
}
#navBar-control {
margin-top: 5px;
width: 25px;
height: 25px;
padding: 0 15px;
float: left;
}
#content {
height: 100%;
width: auto;
}
#Content-header {
padding-top: 15px;
width: auto;
}
#calc-box {
margin: 0 auto;
margin-top: 15px;
background-color: #CCCCCC;
height: 500px;
width: 50%;
box-shadow: 10px 10px 5px #888888;
}
内容div中的另一个div是向左浮动并且在导航栏中点击并停止并随之移动,如果我将其设置为向左浮动,则对于calc div也是如此,但我不明白为什么边距忽略它只是基于父母的位置。
答案 0 :(得分:1)
浮动元素会突破其父级的定位流,因此#content
会在计算边距时忽略它。
请参阅:http://fiddle.jshell.net/vz4srfe0/4/
需要注意的事项:
Main
拥有财产clear:both
#navBar
和#content
拥有财产float: left
#content
宽度计算为calc(100% - 85px)
,因为navBar
的宽度为85px
修改强>
视觉上的诡计使我认为上述工作 - 然而,它只会在导航打开时才会居中。不确定这是否可以仅使用CSS - 如何使用调整#content
宽度的javascript添加类? http://fiddle.jshell.net/vz4srfe0/6/
答案 1 :(得分:1)
正如另一个答案所说:&#34;浮动元素会突破其父级的定位流,因此#content会在计算边距时忽略它。 &#34;
因此,为了在侧边栏处于活动状态时设置计算器div的精确边距,获取侧边栏宽度的一半,并将此值设置为计算器div左边的偏移量。
var real_mar = $('#navBar').width() / 2;
real_mar = real_mar + "px";
为了给出一个例子,我添加了相对于计算器div的位置,并使用jQuery为calc div的left属性添加/删除值
#calc-box {
position: relative;
}
$("#toggle-slide-button").click(function () {
if (!state) {
$('#navBar').animate({width: "toggle"}, 200);
$('#calc-box').css({"left":"0px"}); // remove the offset
state = true;
}
else {
$('#navBar').animate({width: "toggle"}, 200);
$('#calc-box').css({"left":real_mar}); // add the offset
state = false;
}
});
<强> UPDATED FIDDLE 强>
答案 2 :(得分:1)
您必须使用div包装calc-box和Content-header,如下所示:
<div id="inner">
<div id="Content-header">
<div id="navBar-control">
<a href="#" id="toggle-slide-button">
<img src="Images/menu_default.png" onmouseover="this.src='Images/menu_hoverr.png'" onmouseout="this.src='Images/menu_default.png'" />
</a>
</div>
<div>
<span>Calculator</span>
</div>
</div>
<div id="calc-box">
</div>
</div>
然后你必须在你的CSS中向#inner添加一个margin-left作为默认值,它必须等于你的导航宽度:
#inner{
margin-left: 85px;
}
最后你必须改变你的jQuery-Code,所以当你切换你的导航时它会改变左边距:
var state = false;
$("#toggle-slide-button").click(function () {
if (!state) {
$('#navBar').animate({width: "toggle"}, 200, 'swing', function(){
$('#inner').css('margin-left', '0');
state = true;
});
}
else {
$('#navBar').animate({width: "toggle"}, 200, 'swing', function(){
$('#inner').css('margin-left', $('#navBar').css('width'));
state = false;
});
}
});