【问题标题】:CSS/HTML: What is the "right" way to create this effect?CSS/HTML:创建这种效果的“正确”方法是什么?
【发布时间】:2012-01-17 12:13:31
【问题描述】:

我正在为一家小型律师事务所开发网站。顶部有一个菜单栏,我想与 | 等间距。每个项目之间: Link。 (标题横幅正下方的白条)

这看起来完全正确,但我正在使用表格来完成它。使用 XHTML/CSS 是否有“更正确”的方法?

我的代码如下:

<div id="topMenu" class="spanningMenu">
        <table>
            <tr>
                <td class="topMenuEnd"></td>
                <td class="topMenuMiddle"><a href="index.htm">Home</a></td>
                <td class="topMenuMiddle">|</td>
                <td class="topMenuMiddle"><a href="contact.htm">Contact Us</a></td>
                <td class="topMenuMiddle">|</td>
                <td class="topMenuMiddle"><a href="directions.htm">Directions</a></td>
                <td class="topMenuMiddle">|</td>
                <td class="topMenuMiddle"><a href="disclaimer.htm">Disclaimer</a></td>
                <td class="topMenuEnd"></td>
            </tr>
        </table>
    </div>

还有 CSS:

.spanningMenu {
    border-style: solid;
    border-width: 4px 0px;
    padding: .2em;
}

#topMenu td.topMenuMiddle {
    width: 12.5%;
}

#topMenu td.topMenuEnd {
    width: 6.25%;
}

我喜欢我的解决方案,因为它非常健壮,但它肯定在 HTML 中包含布局信息,而我一直在努力避免这种情况。

【问题讨论】:

  • 您是否需要一些“动态”的东西(如果您添加更多项目会自行调整),或者您只是想要一种更语义化的方式来在视觉上实现完全相同的东西?
  • ul/ol 和 css 可以很好地做到这一点 - 无论如何对于静态宽度(避免 div 因为这确实是一个 list 结构)。取出边距并使用display:block-inline,或者,如果您需要支持IE6,请保持原样:P
  • @pst:您正在考虑display: inline-block(供将来参考)。
  • @thirtydot:动态会很棒,但不是必需的。如果我添加另一个项目,我不介意更改一些数字。兼容性将非常重要。这是一家与老年人打交道的律师事务所。
  • @JoshuaD:这需要在 IE6 中工作吗?另外,我认为它必须在 IE7 中工作?

标签: html css xhtml w3c


【解决方案1】:

好吧,布局的表格是错误的,菜单的表格是不正当的......

Please please please read this

你应该这样做:

HTML:

<ul>
    <li>Item1 |</li>
    <li>Item2 |</li>
    <li>Item3</li>
</ul>

CSS:

ul li {
    float:left;
    margin-left:5px;
}

http://jsfiddle.net/Mutant_Tractor/wyQFb/

【讨论】:

  • 这不是所需的功能。我知道如果我希望项目折叠起来会起作用,但我希望它们分散到页面的一侧,并且无论包含的文本的宽度如何,它们之间的距离都是等距的。我正在研究内联块格式,这可能是诀窍。
  • 我不确定当使用 float 时如何反对表格 - 对于希望没有人使用它们的浏览器来说,这就像不正当的黑客攻击 :)跨度>
  • 顺便说一句,侮辱性语言是没有必要的,尤其是考虑到我来这里是说“我知道这是错误的方式,什么是正确的方式?”
  • @JoshuaD 但您提到在 HTML 中使用样式元素,这很公平,但没有像使用非表格数据的结构元素(表格)那样糟糕。也可以使用padding-left/right: whatever px; 来做。
  • @pst 我会使用&lt;nav&gt;,但 IE6 和 Netscape 不喜欢这样:P
【解决方案2】:

我刚刚拼凑了一些东西来给你一个想法。这是我一直使用的方法。您可以根据需要调整宽度。这是一个小提琴:http://jsfiddle.net/pfkgw/

#menu {
    background:#ECD8B1;
    overflow:auto;
    border-top: 2px solid white;
    border-bottom: 2px solid white;
    padding: 5px 0px;
}
ul li {
    width: 24%;
    border-right:1px solid #000;
    float:left;
    text-align:center;
}

ul li.last {
    border-right:none;
}

li a {
    display:block;
    padding:5px;
    color:#000;
}

<div id='menu'>
    <ul>
        <li><a href='#'>Home</a></li>
        <li><a href='#'>Contact Us</a></li>
        <li><a href='#'>Directions</a></li>
        <li class='last'><a href='#'>Disclaimer</a></li>
    </ul>
</div>

【讨论】:

  • 首先,您有padding;5px,中间有一个分号而不是冒号(另外,该行末尾缺少一个分号)。而且,我知道这很挑剔,但是您使用width: 24% 意味着在右边缘有一些(不均匀)未使用的空间。我知道如果你输入width: 25%1px 的边框会因为width: 100% + borders 而按下最后一个按钮。最简单的解决方案是将边框放在&lt;a&gt; 标签上(以及其他一些调整)。
  • @thirtydot,是的,您对宽度绝对正确。只将它放在那里,否则小提琴将无法正常工作。由于 OP 提到他可以为链接提供精确的宽度,所以我让它成为。我也修正了你提到的错别字。
【解决方案3】:

一般认为导航栏是一个链接列表,所以应该在&lt;ul&gt;&lt;/ul&gt;标签中。

我不会包含管道字符|,因为那是也是表示性的。您可以使用 li:after { content: "|"; } 或添加 CSS border 属性将其添加到 CSS 中。

有关横向设置列表样式的信息,请查看Listamatic

【讨论】:

    【解决方案4】:

    试试这个:

    <style type="text/css">
    #menu { width: 100%; }
    #menu a { display: block; float: left; width: 20%;
    border-right: 1px solid #000; text-align: center; }
    #menu a.last { border-right: 0px solid #000; clear: both; }
    </style>
    
    <div id="menu">
    <a href="/">Link 1</a>
    <a href="/">Link 2</a>
    <a href="/" class="last">Link 3</a>
    </div>
    

    【讨论】:

    • 这可能会奏效,我会告诉你的。 @Myles:他的解决方案中的表格在哪里? :困惑:
    • @JoshuaD 他说的是为正确的角色使用正确的标记
    • 当然可以为菜单使用 ul-tag ......这是相同的概念(浮动等)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 2017-09-09
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-10
    相关资源
    最近更新 更多