CSS不是一種編程語言。 CSS3在這裏或那裏有一些邏輯,但沒有switch()
。
你的目的,是迄今爲止最簡單的辦法是JavaScript的一個觸摸,這裏提供假設你使用jQuery:
var $navLis = $('nav[role=navigation] > ul > *');
$navLis.addClass('count'+$navLis.length); // add a class to every li indicating
// total number of list items
然後在你的CSS:
nav[role=navigation] li { /* default styling & width */ }
nav[role=navigation] li.count2 { /* your conditional styling */ }
nav[role=navigation] li.count5 { /* your conditional styling */ }
/* etc */
或只設置寬度直接與jQuery:
$navLis.style('width', (100/$navLis.length)+'%');
如果你需求純粹的CSS,然後拿出你的邏輯帽子,並查看CSS3 selectors specification。你可以構造一些拜占庭式的,相當脆弱的CSS代碼來僞造邏輯,比如下面的選擇器。
nav[role=navigation] li:first-child + nav[role=navigation] li:last-child {
/* matches last of two items if a list has only two items */
}
如果您使用的是CMS,知道它有多少項目要在列表中,以便把,那麼你可以通過添加PHP的小位你的CSS讓您的服務器後端花哨:
<?php header('Content-type: text/css');
if (isset($_GET['navcount']) && $_GET['navcount'] != "") {
$navcount = $_GET['navcount'];
} else { $navcount = 5.0; } // Default value
?>
/* ... your css code here... */
nav[role="navigation"] li {
float: left;
width: <?php echo (100.0/$navcount); ?>%;
}
然後你從你的HTML請求這樣的CSS/PHP腳本:
<link rel="stylesheet" type="text/css" href="/path/to/style.php?navcount=5" />
有幾個偉大的工具,有書寫樣式表縮混很好地爲CSS,有的甚至提供PHP我實現動態的實現。現在最強大的CSS擴展是Sass,它只是你正在尋找的那種語法。我建議通過Compass使用Sass,這是Sass的一個框架,它確實給了它一些機會。您可以使用以下方式將Sass解析爲CSS:phamlp
儘管Compass(和Sass)是非常棒的工具,但將它們插入現有項目可能比其價值更麻煩。你可能只想使用Javascript來做簡單的邏輯。
很全面的帖子,謝謝! – wonea 2011-02-17 14:30:30