我试图用calc填充div中的空格。我用2/3填充第一个div但是1/2应该用红色填充。现在红色条将位于蓝色条下方。我对计算有什么不妥?
查看实际操作:http://codepen.io/anon/pen/PqxVeq
.box {
width: 66.666%;
width: calc( 100% * 2/3);
height: 80px;
background: #09F;
}
.twee {
background: red;
height: 80px;
width: calc( 100% * 2/3 - 1/3);
}
答案 0 :(得分:2)
两个问题。
第一:基础数学。 *
的优先级高于-
。你需要parens来强制你的减法发生。
width: calc( 100% * (2/3 - 1/3) );
第二:Div元素默认为display: block
,因此无论如何都会开始新行。您需要display: inline-block
或类似的东西。
第三:舍入问题。如果像素的百分比不是整数值,则最终会进行舍入,并且在舍入后总计可以超过100%并且回滚包装。
我只是为此使用Flexbox。
答案 1 :(得分:1)
正如昆汀所说,
基础数学。
*
的优先级高于-
。
因此您需要使用width: calc( 100% * (2/3 - 1/3));
代码。
div
位置不佳。
内部div
应该有position: absolute;
,外div
应该有position: absolute
。
内部div
将相对于外部div
放置,因此不会出现空白。
window.onload = function() {
var box = document.querySelector('#container .box');
box.innerText = getComputedStyle( box ).width
}
#container {
width: 300px;
height: 100px;
background: #444;
position:relative;
}
.box {
width: 66.666%;
width: calc( 100% * 2/3);
height: 80px;
background: #09F;
position:absolute;
}
.twee {
background: red;
height: 80px;
width: calc( 100% * (2/3 - 1/3));
position:absolute;
}
<div id="container">
<div class="box"></div>
<div class="twee"></div>
</div>
如果您希望红色div
向右传递,请将right:0
添加到其中。
window.onload = function() {
var box = document.querySelector('#container .box');
box.innerText = getComputedStyle( box ).width
}
#container {
width: 300px;
height: 100px;
background: #444;
position:relative;
}
.box {
width: 66.666%;
width: calc( 100% * 2/3);
height: 80px;
background: #09F;
position:absolute;
}
.twee {
background: red;
height: 80px;
width: calc( 100% * (2/3 - 1/3));
position:absolute;
right:0
}
<div id="container">
<div class="box"></div>
<div class="twee"></div>
</div>
答案 2 :(得分:0)
更改&#39; .twee&#39;的宽度
.twee {width: calc( 100% * 1/3);}
以您的风格添加此CSS
#container, .box, .twee {float:left}