居中一个没有宽度的div块

当我尝试将div块“产品”居中时,我遇到了一个问题,因为我事先不知道div宽度。 任何人都有解决方案?

更新:我遇到的问题是我不知道要显示多少产品,我可以有1,2或3种产品,如果它是固定数字,我可以将它们居中,因​​为我知道父级的宽度div,我只是不知道如何做内容是动态的。

.product_container {
  text-align: center;
  height: 150px;
}

.products {
  height: 140px;
  text-align: center;
  margin: 0 auto;
  clear: ccc both; 
}
.price {
  margin: 6px 2px;
  width: 137px;
  color: #666;
  font-size: 14pt;
  font-style: normal;
  border: 1px solid #CCC;
  background-color:	#EFEFEF;
}
<div class="product_container">
  <div class="products" id="products">
    <div id="product_15">
      <img src="/images/ecommerce/card_default.png">
      <div class="price">R$ 0,01</div>
    </div>

    <div id="product_15">
      <img src="/images/ecommerce/card_default.png">
      <div class="price">R$ 0,01</div>
    </div>   

    <div id="product_15">
      <img src="/images/ecommerce/card_default.png">
      <div class="price">R$ 0,01</div>
    </div>
  </div>
</div>

更新2015年2月27日:我的原始答案不断得到投票,但现在我通常使用@ bobince的方法。

.child { /* This is the item to center... */
  display: inline-block;
}
.parent { /* ...and this is its parent container. */
  text-align: center;
}

我的历史用途的原始文章:

你可能想尝试这种方法。

<div class="product_container">
    <div class="outer-center">
        <div class="product inner-center">
        </div>
    </div>
    <div class="clear"/>
</div>

这是匹配样式:

.outer-center {
    float: right;
    right: 50%;
    position: relative;
}
.inner-center {
    float: right;
    right: -50%;
    position: relative;
}
.clear {
    clear: both;
}

的jsfiddle

这里的想法是,你包含你想要集中在两个div,一个外部和一个内部的内容。 你浮动两个div,使他们的宽度自动缩小,以适应你的内容。 接下来,你相对定位外部的div,它的右边缘位于容器的中心。 最后,你相对定位内部div的相反方向的一半宽度(实际上是外部div的宽度,但它们是相同的)。 最终将内容集中在任何容器中。

如果您依靠“产品”内容来调整“product_container”的高度,则可能需要最后一个空的div。


带有'display:block'的元素(默认为div)的宽度由其容器的宽度决定。 您不能根据其内容的宽度来制作块的宽度(缩小到适合)。

(除了CSS 2.1中'float:left / right'的块以外,这对于居中无用。)

您可以将'display'属性设置为'inline-block',以将块变为可由其父级的文本对齐属性控制的缩小到适合的对象,但浏览器支持是不确定的。 如果你想要这样做,你可以通过使用黑客(例如,参见-moz-inline-stack)来获得它。

另一种方式是桌子。 如果您的列的宽度实际上无法预先知道,则这可能是必需的。 我无法真正告诉你要从示例代码中做什么 - 没有什么明显的需要缩小到适合的块 - 但产品列表可能被视为表格。

[PS。 不要在网页上使用'pt'作为字体大小。 如果你真的需要固定大小的文本,'px'更加可靠,否则像'%'这样的相对单位更好。 和“清楚:ccc都” - 一个错字?]

.center{
   text-align:center; 
}

.center > div{ /* N.B. child combinators don't work in IE6 or less */
   display:inline-block;
}

的jsfiddle


大多数浏览器都支持display: table; CSS规则。 这是一个很好的技巧,可以在不添加额外的HTML的情况下在容器中对div进行居中,也不会向容器应用约束样式(如text-align: center;会将所有其他内联内容集中在容器中),同时保持容器的动态宽度DIV:

HTML:

<div class="container">
  <div class="centered">This content is centered</div>
</div>

CSS:

.centered { display: table; margin: 0 auto; }

.container {
  background-color: green;
}
.centered {
  display: table;
  margin: 0 auto;
  background-color: red;
}
<div class="container">
  <div class="centered">This content is centered</div>
</div>
链接地址: http://www.djcxy.com/p/75739.html

上一篇: Centering a div block without the width

下一篇: Walking a hierarchical tree