【问题标题】:Make div children share the parents width让 div 孩子分享父母的宽度
【发布时间】:2013-08-21 01:15:38
【问题描述】:

基本上,我有一个 div 父元素,它由 1+ div 子元素组成(每个子元素中都有一个按钮)。 现在我希望按钮填充父项的整个宽度 - 但要分享它。 也就是说,如果有一个子按钮,它应该填充 100% - 如果有 2 个,它们的宽度应该是每个大小的 50%,以此类推。

我该怎么做?

编辑:根据要求 - 这是代码(虽然我认为上面的解释更好):

.buttons
{
    background: #f1f1f1;
    border-top: 1px solid #ddd;
    padding: 15px;
    height: 34px;
}

.submitbutton
{
    width: inherit;
    background: #C2E5FC; /* Old browsers */
    background: -moz-linear-gradient(top, #C2E5FC 0%, #008BE8 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#C2E5FC), color-stop(100%,#008BE8)); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top, #C2E5FC 0%,#008BE8 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top, #C2E5FC 0%,#008BE8 100%); /* Opera11.10+ */
    background: -ms-linear-gradient(top, #C2E5FC 0%,#008BE8 100%); /* IE10+ */
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#C2E5FC', endColorstr='#008BE8',GradientType=0 ); /* IE6-9 */
    background: linear-gradient(top, #C2E5FC 0%,#008BE8 100%); /* W3C */
    border: 1px solid #008BE8;
    -webkit-border-radius: 20px;
    -moz-border-radius: 20px;
    border-radius: 20px;
    line-height: 20px;
    font-size: 16px;
    padding: 6px 12px;
    color: #fff;
    text-shadow: -1px -1px #008BE8;
    margin-left: 10px;
    cursor: pointer;
}

html:

<div class="buttons">
    <input class="submitbutton" type="submit" value="Register">
    <input class="submitbutton" type="submit" value="Cancel">
</div>

【问题讨论】:

  • 请贴一些代码。
  • 父div有固定宽度吗?
  • @j08691 我已经更新了代码
  • 这需要某种计算和条件逻辑,因此您需要 javascript;仅使用 CSS 是无法做到的。
  • 如果这是静态 html/css 并且 javascript 不是一个选项,那么你不能按照你的建议去做。如果您使用的是 php 之类的预处理器,那么您可以输出一些内联样式来满足您的需求。如果您可以使用 JS,那么您可以在加载元素后调整样式。没有它,我认为没有办法。我希望有人能提出答案,尽管我很感兴趣。

标签: html css


【解决方案1】:

您可以将它们包含在一个 li 中并使用这个 css:

.buttons > li {
display: table-cell !important; 
width: 1% !important;
float: none !important;
}

.buttons > li >* {
width:100%
}

jsfiddle

【讨论】:

  • 不错的解决方案。您没有必须将它们包含在&lt;li&gt; 元素中。带有display: table-cell 的 div 也同样有效(参见here)。
【解决方案2】:

如果您希望避免使用纯 CSS 添加额外的标记,Flexbox 就是您正在寻找的。​​p>

http://codepen.io/cimmanon/pen/qekml

.buttons {
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
}

.submitbutton {
  -moz-box-flex: 1;
  -webkit-flex: 1;
  -ms-flex: 1;
  flex: 1;
}

大多数浏览器都支持某些版本的 Flexbox,但 IE 直到版本 10 才支持它(请参阅:http://caniuse.com/#feat=flexbox)。请注意,虽然较旧的 Webkit 浏览器(包括移动设备)确实支持 Flexbox,但它doesn't work on buttons,这就是为什么我省略了这些浏览器的属性。

如果您需要比这更好的浏览器支持,则需要使用额外的元素。

http://cssdeck.com/labs/gefz5oxi

<div class="buttons">
  <div class="foo"><input class="submitbutton" type="submit" value="Register"></div>
  <div class="foo"><input class="submitbutton" type="submit" value="Cancel"></div>
</div>

CSS:

.buttons {
  display: table;
  width: 100%;
  box-sizing: border-box; /* optional */
}

.foo {
  display: table-cell;
}

.foo .submitbutton {
  width: 100%;
}

【讨论】:

    【解决方案3】:

    您可以将子元素的宽度定义为百分比或它们的父元素。像这样的:

    <div id="parent" style="width:1000px;">
    <div id="child1" style="width:25%"></div>
    <div id="child2" style="width:25%"></div>
    <div id="child3" style="width:25%"></div>
    <div id="child4" style="width:25%"></div>
    </div>
    

    在这种情况下,每个子元素的宽度为 250 像素。

    根据您的要求,使用 CSS 类也是如此:

    <style type="text/css">
    .parent {
        width:1000px;
    }
    .child {
        width:25%;
    }
    </style>
    <div id="parent" class="parent">
    <div id="child1" class="child"></div>
    <div id="child2" class="child"></div>
    <div id="child3" class="child"></div>
    <div id="child4" class="child"></div>
    </div>
    

    【讨论】:

    • 我明白了 - 但是我想在 css 中定义它并让它以某种方式自动定义宽度。
    • 为您更新了代码。这两个示例提供了相同的最终结果。顺便说一句,使用style="width:25%" 是在 CSS 中定义它,除了我在没有类的情况下这样做。
    • 提问者不提前知道孩子的数量。
    • 抱歉,没有阅读该评论。在这种情况下,如前所述,我将获取子元素的数量并使用 JavaScript/jQuery 设置子元素的宽度。
    【解决方案4】:

    尽管表格已经过时,但我只会使用一个包含一行 () 的表格,并为每个按钮动态添加单元格 ()。给出宽度:100%,你就完成了。大多数实现 Toolbar 类的 js 框架都使用表格。

    【讨论】:

      【解决方案5】:

      如果您不确定您将拥有多少个子按钮,您可以为您的孩子使用一些故障安全类。

      例如像

      .grid4button { width: 25%; }
      .grid3button { width: 33.33333% }
      .grid2button { width: 50%; }
      

      等等(我猜你明白了)

      现在您需要一些 js 来检查子按钮的数量并将所需的类名附加到每个按钮。

      编辑:

      var childs = $(".buttons").children().length;
      $('buttons .submitbutton').addClass('grid'+childs+'button');
      

      可能是使用 jquery 进行的示例性 js 检查。

      【讨论】:

        猜你喜欢
        • 2017-10-26
        • 1970-01-01
        • 2019-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多