【问题标题】:Too much space (floating divs)空间太大(浮动 div)
【发布时间】:2011-07-08 17:41:36
【问题描述】:

我正在浮动 div,现在有一些差距。这是我的代码:

<style>
ul {
    margin: 0;
    padding: 0;
    list-style: none;
}

ul li {
    display: block;
    float: left;
    border: 1px solid red;
    width: 80px;

}
</style>

<ul>

        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
        <li>Item 5</li>
        <li>Item 6</li>
        <li>Item 7</li>
        <li>Item 8</li>
        <li>Item 9</li>
        <li>Item 10</li>
        <li>Item 11</li>
        <li>Item 12</li>
        <li>Item 13</li>
        <li>Item 14</li>
        <li>Item 15</li>
        <li>Item 16</li>
        <li>Item 17</li>
        <li>Item 18</li>
        <li>Item 19</li>
        <li>Item 20</li>
        <li>Item 21</li>
        <li>Item 22</li>
        <li>Item 23</li>
        <li>Item 24</li>
        <li>Item 25</li>
        <li>Item 26</li>
        <li>Item 27</li>
        <li>Item 28</li>
        <li>Item 29</li>
        <li>Item 30</li>
        <li>Item 31</li>
        <li>Item 32</li>
        <li>Item 33</li>
        <li>Item 34</li>
        <li>Item 35</li>
        <li>Item 36</li>
        <li>Item 37</li>
        <li>Item 38</li>
        <li>Item 39</li>
        <li>Item 40</li>
        <li>Item 41</li>
        <li>Item 42</li>
        <li>Item 43</li>
        <li>Item 44</li>
        <li>Item 45</li>
        <li>Item 46</li>
        <li>Item 47</li>
        <li>Item 48</li>
        <li>Item 49</li>
        <li>Item 50</li>
        <li>Item 51</li>
        <li>Item 52</li>
        <li>Item 53</li>
        <li>Item 54</li>
        <li>Item 55</li>
        <li>Item 56</li>
        <li>Item 57</li>
        <li>Item 58</li>
        <li>Item 59</li>
        <li>Item 60</li>
        <li>Item 61</li>
        <li>Item 62</li>
        <li>Item 63</li>
        <li>Item 64</li>
        <li>Item 65</li>
        <li>Item 66</li>
        <li style="" class="">
    Multiple<br>
    Lines
    </li><li>Item 67</li>
        <li>Item 68</li>
        <li>Item 69</li>
        <li>Item 70</li>
        <li>Item 71</li>
        <li>Item 72</li>
        <li>Item 73</li>
        <li>Item 74</li>
        <li>Item 75</li>
        <li>Item 76</li>
        <li>Item 77</li>
        <li>Item 78</li>
        <li>Item 79</li>
        <li>Item 80</li>
        <li>Item 81</li>
        <li>Item 82</li>
        <li>Item 83</li>
        <li>Item 84</li>
        <li>Item 85</li>
        <li>Item 86</li>
        <li>Item 87</li>
        <li>Item 88</li>
        <li>Item 89</li>
        <li>Item 90</li>
        <li>Item 91</li>
        <li>Item 92</li>
        <li>Item 93</li>
        <li>Item 94</li>
        <li>Item 95</li>
        <li>Item 96</li>
        <li>Item 97</li>
        <li>Item 98</li>
        <li>Item 99</li>
        <li>Item 100</li>
    </ul>

您可以看到“多行”块留下的空白。如何自动“填充”这个空间?

问候, 凯文

【问题讨论】:

  • 你在说什么差距 - jsfiddle.net/WUA9y
  • 多行左边,可能需要稍微调整窗口大小。
  • 这必须动态完成吗?
  • 如何给 ul 一个相对位置和其中包含更多文本的 li “多行”作为具有偏移属性的绝对位置,例如 top: 25;右:10px;这样,它将从文档流中取出,并且不会导致额外的空白。您必须在之前和之后的 lis 上设置边距以腾出空间,以免它们重叠。

标签: css html css-float stylesheet


【解决方案1】:

问题在于,在多行单元格中,只有 2 个像素用于边框,而在两个占据相同空间的单元格中,将使用 4 个像素的边框。这会产生 2 个像素的间隙。

一种解决方案是使用outline 而不是borderoutline 属性占用页面空间;它只是在对象周围绘制边框。

因此,您可以使用outline: 1px solid red,而不是border: 1px solid red

this jfiddle demonstration 上亲自查看。请注意,我还添加了一个line-height: 1.4em,但这只是为了给单元格多一点空间,因为具有outline 属性的单元格实际上要深2 个像素。

【讨论】:

  • + 1 好答案。我认为你正确地解释了他的问题。 “空间”有几个领域。多行左侧、多行下方和多行右侧。我认为你是正确的,他是在摆脱“地下”空间之后。
【解决方案2】:

您可以将min-height 添加到ul li 选择器到“多行”li 的最小高度。

就我而言,我将此添加到ul li

 min-height:37px

但这仅解决了我的默认字体大小的问题,现在,每个 ul li 的高度至少为 37px,这可能不是您想要的。

【讨论】:

  • 但我不想给他们高度;该空间仍将未被使用。仍然感谢您的回答;)!
【解决方案3】:

http://jsfiddle.net/ethBT/

我不认为你可以自动填充这个空间。您的代码的工作方式基本上是这样说的 - 将所有内容都浮动。由于一件物品较大,它占用了更多空间。正如刚才mrk所指出的,你可以将所有li的最小高度设置为多行的高度。尽管这意味着所有单元格都将是原来的两倍,但我认为这不是您想要的。

我想不出一种替代方案,既能获得这种效果,又不依赖于让你有更多控制权的东西。例如一张桌子。

【讨论】:

  • 有趣的是,自从 div 布局成为标准做法后,人们拒绝在布局中使用表格......即使是表格数据!
  • @alquatoun:这不是表格数据,这只是他想要环绕以避免滚动的列表。如果同一行/列上的项目之间存在连接,则为表格数据。例如,如果第 31 项与第 32 到 36 项有特殊关联。
  • 抱歉,并不是说他在使用表格数据,只是指出一般情绪似乎是为了不惜一切代价避免使用表格 :)
  • @alquatoun:“并不是说他在使用表格数据”| “人们拒绝在布局中使用表格……即使是表格数据!”