【问题标题】:Need html checkbox label to wrap "nicely"需要 html 复选框标签来“很好地”包装
【发布时间】:2011-09-30 23:14:28
【问题描述】:

我有一个复选框网格,其中每个单元格都有固定的宽度,每个复选框前面都有一个小图像。在标签文本太长的情况下,我很难让文本在复选框下方换行。

参考上面的截图,我希望“换行的文本”与复选框对齐,而不是像这样换行:

我已经使用我当前的标记和样式设置了 fiddle。我无法更改的是 HTML 结构,但任何 CSS 更改都可以。

这是一个代码sn-p:

.checkbox-list {
}
img.placeholder{
    width:16px;
    height:16px;
    background-color:lightblue;
}
td {
    padding:2px;
    width:150px;
    vertical-align:top;
}
label {
    /*display:inline-block;*/
}
<table class="checkbox-list">
    <tbody><tr>
        <td>
            <img class="placeholder"/>
            <label>
                <input type="checkbox"/>
                <span>Some really long text that wraps</span></label></td>
        <td>
            <img class="placeholder"/>
            <label>
                <input type="checkbox"/>
                <span>Foo</span></label></td>
        <td>
            <img class="placeholder"/>
            <label>
                <input type="checkbox"/>
                <span>Foo</span></label></td>
    </tr><tr>
        <td>
            <img class="placeholder"/>
            <label>
                <input type="checkbox"/>
                <span>Foo</span></label></td>
        <td>
            <img class="placeholder"/>
            <label>
                <input type="checkbox"/>
                <span>Foo</span></label></td>
        <td>
            <img class="placeholder"/>
            <label>
                <input type="checkbox"/>
                <span>Foo</span></label></td>
    </tr>
</tbody></table>

【问题讨论】:

  • 嗯...我没有看到浅蓝色框。
  • @AllenLiu 你用的是什么浏览器?我在 chrome 和 IE 上测试过。
  • 我在 Windows 7 上的 FF v7 上使用。我只是添加了一个 'float:left;'到img.placeholder,我现在可以看到这些框了。

标签: html css checkbox


【解决方案1】:

您可以将margin-bottom 应用于图像和float: left

img.placeholder{
    width:16px;
    height:16px;
    background-color:lightblue;
    margin-bottom: 1em;
    float: left;
}

JS Fiddle demo.


已编辑,因为我显然是一个白痴,并且没有意识到最简单的方法是将display: block;margin-left: 18px; 分配给label 元素,并浮动.placeholder 元素:
img.placeholder{
    width:16px;
    height:16px;
    background-color:lightblue;
    float: left;
}

label {
    display: block;
    margin-left: 18px;
}

JS Fiddle demo.

浮动图像可防止label 从换行开始,label 上的左边距是图像的宽度和一个 2px 的小“间距”,用于在视觉上分隔图像和复选框 (显然要适应口味)。

【讨论】:

  • 这很接近,但是当文本跨越超过 2 或 3 行时会发生什么?它最终将开始再次包裹在图像下方。它还在第二行复选框下方添加了一个边距,其中没有任何标签环绕。
【解决方案2】:

这是我的建议:

imginputspan制作成块元素和float: left

http://jsfiddle.net/9s8Db/4/

【讨论】:

    【解决方案3】:

    display:inline-block 指定标签并给它一个宽度似乎可以解决问题。虽然理想情况下我不必指定标签宽度。

    http://jsfiddle.net/9s8Db/7/

    【讨论】:

      【解决方案4】:

      如果您限制labelwidth 和浮动img.placeholderlabel,它应该可以按您的要求工作:

      http://jsfiddle.net/9s8Db/8/

      img.placeholder{
          width:16px;
          height:16px;
          background-color:lightblue;
          float: left;
      }
      td {
          padding:2px;
          width:150px;
          vertical-align:top;
      }
      label {
          /*display:inline-block;*/
          float: left;
          width: 100px;
      }
      

      【讨论】:

      • 谢谢。类似于我的解决方案,尽管我无需浮动任何元素就可以管理
      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 2019-04-09
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      相关资源
      最近更新 更多