我想创建一个强大的CSS样式,几乎适用于所有浏览器(包括IE7,firefox 3) 这显示了两个列和一个页脚划分为虚线边框。 我试图实现以下代码, 但我有一个问题: 当我应用border-right-style时:点缀;离开课堂 A和B不在同一水平面上。 请停下来修复css样式。
Click here for the current example
HTML
<div class="container">
<div clas="left">A</div>
<div class="right">B</div>
<div class="footer">C</div>
</div>
CSS
div.container {
background:#eee;
margin: 0 auto;
width: 750px;
}
.left{
background:#ddd;
float: left;
width: 50%;
border-right-style:dotted;
}
.right {
background:#eee;
float: right;
width: 50%;
}
.footer {
background: none repeat scroll 0 0 #eef;
clear: both;
border-top-style:dotted;
}
答案 0 :(得分:3)
固定
你必须记住的是,一个边界计算了所分配的%的数量。
所以说你有一个100px宽的盒子(100%),你把一边带1px边框(1%),实际上是101%。所以在你的情况下,它会突破到下一行空间,从而给你错误。
在我的修复中,我只需将正确的容器设置为49%。这对于流体解决方案来说非常有用,或者如果您有固定的布局,请将其设置为固定值。
请记住,填充也是一样的...它将计算分配的大小或百分比。
希望这有帮助!
答案 1 :(得分:3)
您遇到的问题是元素的边框不包含在该元素的定义宽度内;所以元素是父元素宽度的50%,但是边框添加了额外的宽度。
如果将元素的宽度减少到例如48%,那么它似乎可以按照您的意愿工作:
div.container {
background:#eee;
margin: 0 auto;
width: 750px;
}
.left{
background:#ddd;
float: left;
width: 48%;
border-right-style:dotted;
}
.right {
background:#eee;
float: right;
width: 48%;
}
使用更新
编辑对于Firefox和Chromium(Ubuntu 11.04上的FF5.x和Chromium 12.x),您可以使用:
div {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-o-box-sizing: border-box; /* Left this in, but it doesn't seem to work... */
}
将边框宽度合并到元素的宽度中;使用这种方法,您可以在元素上保留width: 50%;
,边框将自行排序。不幸的是,它不适用于Opera,或者可能是IE。
答案 2 :(得分:2)
A和B处于不同级别的原因是因为它们不适合一个宽度。你有他们每个用width: 50%
声明,但其中一个也有边框。边框宽度添加到div的宽度 - 因此两个div加上边框不适合水平间距。
例如,尝试将width: 49%
放在每个上面 - 你会发现差异。这并不理想,因为您并不总是知道视口的宽度。如果你可以使用精确的像素宽度,那将更容易。试试这个CSS进行更改:
div.container {
background:#eee;
margin: 0 auto;
width: 750px;
}
.left{
background:#ddd;
float: left;
width: 374px;
border-right:dotted 2px black;
}
.right {
background:#eee;
float: right;
width: 374px;
}
.footer {
background: none repeat scroll 0 0 #eef;
clear: both;
border-top-style:dotted;
}
答案 3 :(得分:1)
这是因为50%
+ 50%
+ 1px
(边框)高于100%
。
如果您的.container
不会改变宽度,则可以为它们提供固定的像素值。
但是如果您的.container
要更改宽度,您可以尝试添加另一个仅包含边框的元素,如下所示:
.border {
height:100%;
width:0;
border-left:3px dotted #000;
position:absolute;
left:50%;
top:0;
}
不要忘记给.container
position:relative;
。
答案 4 :(得分:1)
@Antojs; padding & border
如果元素的百分比产生问题,则为元素添加宽度。所以;可以给这样的宽度:
div.container {
background:#eee;
margin: 0 auto;
width: 750px;
}
.left{
background:#ddd;
float: left;
width: 50%;
border-right-style:dotted;
}
.right {
background:#eee;
overflow:hidden;
}
现在在.right
,如果你给border & padding
它不会影响任何事情&amp;您也可以使用css3 box-sizing: border-box;
但IE7不支持
答案 5 :(得分:0)
问题是边框会使div
为.left
增加宽度。由于容器div
似乎具有固定宽度,因此您可以简单地为.left
和.right
元素赋予固定宽度值(或减小其宽度百分比),并使{{1}稍窄一点:
.left
这是一个updated fiddle。我还建议您阅读box model以了解边框,填充等对宽度的影响。
答案 6 :(得分:0)
50%和50%= 100%因此没有边框空间。
答案 7 :(得分:0)
将你的div放在div左侧
<div class="left">section left
<div class="right">section right</div>
</div>
并改变一点css
.left{
background:#ddd;
float: left;
width: 50%;
}
.right {
background:#eee;
float: right;
border-left-style:dotted;
}