【问题标题】:inside div automatic fit width of li in ieie里面的div自动适合li的宽度
【发布时间】:2011-04-29 00:39:37
【问题描述】:
<div style='width:500px'>  
<ul>  
  <li> some text in 1 line</li>  
  <li> some text in 1 line</li>  
  <li> some text 2 line</li>  
  <li> some 2</li>  
  <li> 2</li>  
</ul>
</div>

我不知道在 ie 中显示项目的正确 css 代码是什么:

前两个结果自动放入第一行,其余结果自动放入第二行。 所以基本的想法是让li根据数据大小获得自己的宽度。

提前致谢

【问题讨论】:

    标签: html css dhtml css-float


    【解决方案1】:

    浮动 div,它应该会有所帮助...

    【讨论】:

    • 问题不在于 div,而在于 li。 li 必须根据数据大小获得自己的宽度。
    • 它现在在做什么?真的很难理解你真正想要达到的目标......试着让它更清楚。
    • Li 假设在同一行显示项目,这在 Firefox 中通过使用 float:left 而不是在 ie 中发生。问题是 LI 必须根据其内容自动采用宽度,否则转移到下一行。
    【解决方案2】:

    我认为最好的方法是申请

    li { display:inline; }
    

    并在没有此规则的情况下插入 &lt;li&gt; 以执行换行。

    但是你不能把所有数据放在一个&lt;li&gt;的同一行吗?

    【讨论】:

    • 感谢MaTheCat,但是有点击li触发的事件,所以结果就是这样显示的。
    【解决方案3】:

    你有几种方法可以做你想做的事:

    • 正如 MatTheCat 所说,display: inline 和一个 display: block 将起作用
    • 同样,float: left; 除了第二个也可以解决问题
    • 将它们全部设置为display: inline,并在第二个元素的末尾添加&lt;br /&gt;(有点讨厌,但很简单)

    但是,您最好将它们视为两个单独的列表。在不知道你用它做什么的情况下,很难说,但是将元素拆分会使其更具可读性,并让你更好地控制两行的定位和样式。

    如果目标只是让列表元素水平流动以填充 div 并且“第一行的前两个”只是一个示例,那么只需在每个列表元素上设置 display: inline

    如果您特别希望前两个结果的宽度为 250 像素(div 的一半),请将这两个结果的样式设置为 float: left; width: 50%;,并将其余的 diaplay 内联。

    【讨论】:

      【解决方案4】:

      浮动属性可能会有所帮助

      <div style='width:500px; overflow: hidden;'>
      <ul>
      <li> some text in 1 line</li>
      <li> some text in 1 line</li>
      <li> some text 2 line</li>
      <li> some 2</li>
      <li>2</li>
      </ul>
      </div>

      li {
      float: left;
      display: block;
      }

      【讨论】:

        【解决方案5】:

        我认为有两种方法可以实现我认为您所要求的:

        选项 1: 制作&lt;li&gt;标签display:block;float:left;

        选项 2: 制作&lt;li&gt; 标签display:inline-block;white-space:nowrap;

        我自己会选择选项 2,因为它可以避免使用浮动时可能出现的怪癖。此外,您可能会发现您最终还是需要 nowrap,即使使用选项 1。

        [编辑]

        您可能还需要设置&lt;ul&gt; 标记的样式。也许是width:100%; 和/或display:block;

        我还是说display:inline-block;white-space:nowrap; 应该为&lt;li&gt; 标签做这件事。但如果它不起作用,如果你说它不起作用的方式会有所帮助。

        另外:您也一直在说一些答案在 IE 中不起作用,但您没有说 IE 的哪个版本 - IE6、7、8 和 9 具有非常不同的级别对 CSS 的支持;了解您需要支持哪些会有所帮助。

        【讨论】:

        • display:block 在使用浮动规则时无用。
        • @Mat:所有浮动项目都应该是块。 (无论如何使用浮动可能会强制执行此操作,但我总是更喜欢明确)
        • 不是“应该”而是“是”:smashingmagazine.com/2007/05/01/…
        【解决方案6】:

        我建议将导航设置为“像”表格:

        • 容器 div - 显示:表格;相当于&lt;table&gt;
        • 列表容器 - 显示:表格行;相当于&lt;tr&gt;
        • 列表项 - 显示表格:table-cell;相当于&lt;td&gt;

        &lt;a&gt; 元素样式上的填充只是为了均匀间距,可以根据需要进行调整,单元格项计算出剩余宽度并相对于单元格大小使用它。

        在 FF / Chrome / Safair /IE 9 & 8 上工作

        IE7及以下需要使用浮动解决方案!

        工作示例:

        <html>
        <head>
            <title>test</title>
            <style type="text/css">
        
                div {
                    margin: 0 auto 0 auto;
                    width: 954px;
                    height: 36px;
                    border: 1px solid #000000;
                    display: table;
                }
        
                ul {
                    width: 100%;
                    display: table-row;
                    list-style: none;
                    height: 100%;
                }
        
        
                li {
                    display: table-cell;
                    white-space: nowrap;
                    border: 1px solid #00ff00;
                    color: #ff0000;
                }
        
                a {
                    text-align: center;
                    display: block;
                    padding: 0 15px;
                    line-height: 36px;
                }
            </style>
        </head>
        <body>
            <div>
                <ul>
                    <li><a>Item1</a></li>
                    <li><a>Long Item 2</a></li>
                    <li><a>Very Long Item 3</a></li>
                    <li><a>Even longer example Item 4</a></li>
                    <li><a>Item5</a></li>
                    <li><a>Item6</a></li>
                    <li><a>Medium Item7</a></li>
                    <li><a>Item8</a></li>
                </ul>
            </div>
        </body>
        

        【讨论】:

        • display: table 在旧版浏览器中不起作用,因此此解决方案仅在少数情况下有用。尽管您确实会因为保持语义 HTML 结构而获得 +1。
        • 感谢 Jon,我刚刚在 IE 中使用 F12 进行了测试并改回了兼容性,IE7 和向后不支持显示:table*; CSS 选项。
        猜你喜欢
        • 2023-03-03
        • 2019-10-11
        • 2014-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-03
        相关资源
        最近更新 更多