css将宽度100%划分为3列

时间:2013-09-13 08:30:21

标签: html css

我有一个布局,我有3列。

因此,我将100%除以3。

结果显然是33.333 ......

目标完美屏幕的1/3

问题:

CSS可以处理多少个数字以指定1/3的宽度?

e.g。 33.33333 (n=5)←{c}可以处理多少n

HTML:

<div id="wrapper">
    <div id="c1"></div>
    <div id="c2"></div>
    <div id="c3"></div>
</div>

CSS:

#c1, #c2, #c3 {
    width: 33%; // 1/3 of 100%
}

有没有更好的方法除以3?

11 个答案:

答案 0 :(得分:86)

使用 CSS calc()

body {
  margin: 0;
}

div {
  height: 200px;
  width: 33.33%; /* as @passatgt mentioned in the comment, for the older browsers fallback */
  width: calc(100% / 3);
  display: inline-block;
}

div:first-of-type { background-color: red }
div:nth-of-type(2) { background-color: blue }
div:nth-of-type(3) { background-color: green }
<div></div><div></div><div></div>

JSFiddle


参考文献:


更新:因为它是2018.使用flexbox - 不再有inline-block 空白问题:

body {
  margin: 0;
}

#wrapper {
  display: flex;
  height: 200px;
}

#wrapper > div {
  flex-grow: 1;
}

#wrapper > div:first-of-type { background-color: red }
#wrapper > div:nth-of-type(2) { background-color: blue }
#wrapper > div:nth-of-type(3) { background-color: green }
<div id="wrapper">
  <div id="c1"></div>
  <div id="c2"></div>
  <div id="c3"></div>
</div>

如果您要创建网格,甚至可以CSS grid

body {
  margin: 0;
}

#wrapper {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-auto-rows: minmax(200px, auto);
}

#wrapper>div:first-of-type { background-color: red }
#wrapper>div:nth-of-type(2) { background-color: blue }
#wrapper>div:nth-of-type(3) { background-color: green }
<div id="wrapper">
  <div id="c1"></div>
  <div id="c2"></div>
  <div id="c3"></div>
</div>

答案 1 :(得分:22)

如何使用CSS3 flex模型:

HTML代码:

<div id="wrapper">
    <div id="c1">c1</div>
    <div id="c2">c2</div>
    <div id="c3">c3</div>
</div>  

CSS代码:

*{
    margin:0;
    padding:0;
}

#wrapper{
    display:-webkit-flex;
    -webkit-justify-content:center;

    display:flex;
    justify-content:center;

}

#wrapper div{
    -webkit-flex:1;
    flex:1;
    border:thin solid #777;

}

答案 2 :(得分:21)

完全跨浏览器支持的CSS(IE9以下任何东西)都不能存在完美的1/3。我个人会这样做:(这不是完美的解决方案,但它与所有浏览器一样好)

#c1, #c2 {
    width: 33%;
}

#c3 {
    width: auto;
}

答案 3 :(得分:8)

使用this fiddle,您可以使用每个div的width。我在Chrome和IE中都尝试过,我注意到33%33.3%之间的宽度不同。我还注意到33.3%33.33%之间的差异非常小。我没有注意到任何不同之处。

33.33%与理论33.333...%之间的差异仅仅是0.00333...%

为了论证,请说我的屏幕宽度为1960px;相当高但常见的分辨率。这两个宽度之间的差异仍然只有0.065333...px

因此,超过两位小数,精度差异可以忽略不计。

答案 4 :(得分:7)

如果你想知道,在Bootstrap模板系统(这是非常准确的),下面是它们在你应用类.col-md-4(12列系统的1/3)时划分列的方式)

CSS

.col-md-4{
    float: left;
    width: 33.33333333%;
}

我不是浮动的粉丝,但是如果你真的希望你的元素完全是你页面的1/3,那么你没有选择,因为有时当你使用inline-block元素时,浏览器可以考虑您的HTML中的空间为1px空间,这将破坏您完美的1/3。希望它有所帮助!

答案 5 :(得分:5)

以防有人仍在寻找答案,

让浏览器处理这个问题。试试这个:

    容器元素上的
  • display: table
  • 关于子元素的
  • display: table-cell

无论您有3列还是10列,浏览器都会平均分配。

修改

容器元素也应该有:table-layout: fixed否则浏览器将确定每个元素的宽度(大部分时间都不差)。

答案 6 :(得分:2)

提出另一种方法来解决这个问题(如果你真的不关心支持IE):

软编码解决方案是使用display: table(IE7中不支持)和table-layout: fixed(以确保相等的宽度列)。

详细了解此here

答案 7 :(得分:1)

我发现有时需要 6位小数(至少在Chrome中)1/3才能返回完美的结果。

例如,1140px / 3 = 380px

如果您在1140容器中有3个元素,则在Chrome的检查工具显示它们为380px之前,它们的宽度必须设置为33.333333%。任何少量的小数位数,Chrome返回的宽度 379.XXX px

答案 8 :(得分:1)

2018年更新 这是我使用的方法width: 33%; width: calc(33.33% - 20px);前三个用于不支持在width属性中使用calc()的浏览器,第二个需要是以-webkit-和-moz为前缀的供应商 - 为了获得最佳的跨浏览器支持。

#c1, #c2, #c3 {
    margin: 10px; //not needed, but included to demonstrate the effect of having a margin with calc() widths/heights
    width: 33%; //fallback for browsers not supporting calc() in the width property
    width: -webkit-calc(33.33% - 20px); //We minus 20px from 100% if we're using the border-box box-sizing to account for our 10px margin on each side.
    width: -moz-calc(33.33% - 20px);
    width: calc(33.33% - 20px);
}

tl;博士计算您的保证金

答案 9 :(得分:1)

.selector{width:calc(100% / 3);}

答案 10 :(得分:0)

我不认为你可以在CSS中做到这一点,但你可以使用javascript计算像素完美宽度。假设您使用jQuery:

HTML code:

<div id="container">
   <div id="col1"></div>
   <div id="col2"></div>
   <div id="col3"></div>
</div>

JS代码:

$(function(){
   var total = $("#container").width();
   $("#col1").css({width: Math.round(total/3)+"px"});
   $("#col2").css({width: Math.round(total/3)+"px"});
   $("#col3").css({width: Math.round(total/3)+"px"});
});