像素边框和比例宽度
Posted
技术标签:
【中文标题】像素边框和比例宽度【英文标题】:Pixel Border and Percentage width in Proportion 【发布时间】:2011-12-30 11:15:08 【问题描述】:我想我可能已经知道了这个问题的答案,但我需要进行全面检查!
说我有
#gridtest
width:590px;
我可以使用 RESULT=TARGET/CONTEXT 将宽度更改为百分比。在这种情况下,上下文是一个最大宽度设置为 1000px 的容器,所以我可以这样做:
#gridtestpercent
width:59%; /*590/1000*/
如果我将窗口缩小,则 div 将始终与其容器成比例。但是如果我想做呢
#gridtest
width:570px;
border:10px solid red;
我可以根据现在的目标 570 来计算宽度,但是随着窗口的缩小,所有比例都会不同步。
#gridtestpercentnoborder
width:57%; /*570/1000*/
border:10px solid red;
我不能使用百分比边框。我不想使用 JS 继续检查上下文,我还不能使用 CSS3 box-border 声明。
如果我想使用 Ethan Marcotte 在响应式网页设计中描述的技术,在这种技术中,一切都相互缩小,如果使用边框,我会不走运吗?
干杯!
【问题讨论】:
【参考方案1】:在 CSS3 中,您还可以使用新的 box-sizing
属性将像素和填充计数包含到元素的 width
中:
box-sizing: border-box;
【讨论】:
【参考方案2】:接受的答案不正确。你实际上有两个选择:
使用box-sizing
属性,因此所有的内边距和边框都被视为大小的一部分:
.column
width: 16%;
float: left;
margin: 0 2% 0 2%;
background: #03a8d2;
border: 2px solid black;
padding: 15px;
font-size: 13px;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
或者,使用outline
属性而不是边框属性。您仍然会遇到填充问题,但添加起来更容易。示例:
.column
width: 16%;
float: left;
margin: 0 2% 0 2%;
background: #03a8d2;
outline: 2px solid black;
完整解释:http://designshack.net/articles/css/beating-borders-the-bane-of-responsive-layout/
【讨论】:
这非常适合我正在做的事情 - 使用基于百分比的容器在移动视口上进行响应式设计。虽然我通常不使用 box-sizing 因为它不是最受支持的属性 - 它对于我需要它工作的平台上的流体容器来说足够好。完美!【参考方案3】:如果可能,根据您的设计,我喜欢将边框设置为绝对 div,宽度为 3px(例如),高度高于其父 div。然后我在父 div 上设置溢出隐藏。
【讨论】:
【参考方案4】:您可以使用 CSS3 calc() 函数,
.selector
border: 5px solid black;
width: -moz-calc(50% - 10px);
width: -webkit-calc(50% - 10px);
width: calc(50% - 10px);
SASS 混合
@mixin calc($property, $expression)
#$property: -moz-calc(#$expression);
#$property: -webkit-calc(#$expression);
#$property: calc(#$expression);
article
border: 1px solid red;
@include calc( width, '100% - 2px')
【讨论】:
这太棒了!谢谢朋友的提示!【参考方案5】:您可以使用插入框阴影代替边框:
box-shadow: 0px 0px 0px 10px red inset;
只需填充容器内部即可补偿。
编辑:我写的是“pad”,但当然,如果你使用 padding,它会抛弃盒子的尺寸。而是将内容放在里面。
【讨论】:
box-shadow 有性能开销,应谨慎使用 - 特别是在低端和移动设备上【参考方案6】:如果你想保持语义,你可以使用div box-sizing:border-box;
或一些绝对定位的:after
元素。见帖子How do I add 1px border to a div whose width is a percentage?
【讨论】:
【参考方案7】:很遗憾,是的,你运气不好。解决此问题的一种巧妙方法是使用包装器div
来创建边框。因此,外部div
将是 57%(在您的示例中),背景是您所需边框的颜色。然后,内部div
的宽度将达到 96% 左右(使用确切的数字来找到适合您设计的边框)。
【讨论】:
谢谢你 - 我真的很想避免这样做,但如果我遇到它至少有一个修复。另一种稍微笨拙的方法是为边框设置多个背景图像,但目前这不是跨浏览器。 是的,多背景在旧版浏览器中无法使用;但是,它不会像使用边框框那样破坏任何东西。所以也许这是一个很好的优雅降级选项。以上是关于像素边框和比例宽度的主要内容,如果未能解决你的问题,请参考以下文章
泰山OFFICE技术讲座:叶边框影响底纹高亮宽度的原因及选择