【发布时间】:2012-09-07 04:52:26
【问题描述】:
我正在尝试使用 Less 或 Sass 使我的 bootstrap 2.1 标记更具语义化。考虑 Bootstrap 标准导航栏的以下标记:
<header id="main-nav" class="navbar navbar-static-top" role="banner">
<nav class="navbar-inner" role="navigation">
<div class="container">
<!-- Collapse nav button -->
<button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<!-- Nav -->
<nav id="navlinks" class="nav-collapse collapse pull-right">
<ul class="nav nav-pills">
<li class="active">@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>
</nav>
</div>
</nav>
</header>
显然,将 DIV 更改为更具语义的 HTML 5 标记很容易,但从标记中删除类链则更加困难。如果您要使用 mixin,例如:
header #main-nav {
.navbar;
.navbar-static-top;
}
以下定义不起作用,因为复合类不受影响:
.navbar .btn-navbar {
display: none; // hide button in full width (Why a compound class? Redundant?)
}
理想情况下,如果 less 或 sass 有这样的语法就好了:
header#main-nav $= .navbar; // copy .navbar definitions using #main-nav as the name
或
header#main-nav @= .navbar; // rename .navbar definitions to #main-nav
这可以吗?如果没有,如何实现语义标记?
【问题讨论】:
-
一想到这件事的影响,我的后背不寒而栗……
-
使用这些预处理器的主要原因之一是语义标记,尤其是在使用 css 框架时(提示:引导程序)。如果你能以某种方式让类自动应用到标签(如导航、菜单等),那么你基本上是无家可归的。我试图看看是否有办法消除那些长长的类链,但是这些类有很多嵌套和 JavaScript 依赖,因此几乎不可能在不丢失任何东西的情况下实现。
标签: twitter-bootstrap less sass