1、如何實現導覽列就像http://chuangzaoshi.com/code左邊一樣? 2、能用css完全實現嗎?純css怎麼實現? js怎麼實作? 謝謝!
ps:感謝兩位大神的答案,我沒說清楚,我的疑難如下:
左侧导航点击设计等大的标签会自动收起原来的,弹出现在的ul,同时右侧的内容又跟着变化。
這個如何實現不清楚,還望賜教。
你指的是哪個效果? :hover 反白,沒什麼太複雜的。 例子你自己已經給了,你就打開他的程式碼對照即可。 如果有哪個特定樣式或效果不理解,可以再問詳細點。 這樣直接問整個怎麼實現太寬泛了,就是例子當中那樣實現的呀,你注視已經把實現的例子給出來了麼? css 和 js 人家都給你看到了,可以直接參考。
根據你新追加的提問
左側導航點擊設計等大的標籤會自動收起原來的,彈出現在的ul,同時右側的內容又跟著變化。
你可以看到,每次點擊大標籤,其實都是跳到別的頁面,所有大標籤下的 ul 預設都是收起的。 然後根據當前所在頁你會發現當前大標籤會被帶上一個 active 的 class 名,想要打開的 ul 是緊跟其後,於是就簡單了:
css 方法是 .active + ul { display:block; }
.active + ul { display:block; }
jquery 方法是 $('.active').next('ul').css('display','block');
$('.active').next('ul').css('display','block');
其他方式大同小異,都是取得 active 活動標籤,註明其下小標籤清單顯示即可。 根據你給的例子看,由於他不是寫在 css 裡,而是插入 style 屬性,應該是用 js 實現的。
你是要滑鼠移動過去的變色效果吧?
用CSS實現的話,左邊用列表做,然後改樣式,用:hover偽類去配鼠標移動過去的樣式比如
:hover
ul li { ... // 此处为常规样式 } ul li:hover { ... // 此处为鼠标经过的样式 }
如果用JS實現的話,就要監聽對應元素的滑鼠進入事件onmouseenter,將清單的項目中除了當前項,其他的樣式都設定為常規樣式,還要監聽元素的滑鼠離開事件onmouseleave ,在滑鼠離開時需要將先前滑鼠經過時設定的樣式恢復成常規樣式。
onmouseenter
onmouseleave
建議下次問問題時候第一次就把問題詳細情況描述清楚,否則會浪費回答者的時間的。
針對你後來問的問題,
左側的HTML佈置大概是這樣
<ul> <li></li> ... </ul>
然後,老鼠移過變白的,上面已經說過了。 點擊的話,則是給被點擊的加上一個CSS類,比如.active,然後,加上之前的:hover,CSS類似這樣:
.active
ul li { ... // 此处为常规样式 } ul li:hover { ... // 此处为鼠标经过的样式 } ul li.active { ... // 此处为当前标签的样式 }
當然,由於此例子中當前標籤和滑鼠經過樣式一樣,可以把ul li:hover和ul li.active合起來寫作
ul li:hover
ul li.active
ul li:hover, ul li.active { ... // 此处为鼠标经过的样式(即当前标签样式) }
這樣,還不至於能夠切換標籤,右側的HTML佈局大概這樣:
<p id="main"><!-- 此处不一定要是id="main",主要是为了方便定位右侧容器的根元素而已,也方便后面示例讲解 --> <p></p> ... </p>
預設用CSS將#main中第一個子p顯示出來,將其他的隱藏,建議也給p加上.active類,有.active類的顯示,反之隱藏。
#main
p
#main > p { display: none; /* 默认将所有#main下面一级的p全隐藏 */ } #main > p.active { /* 这个表示#main下面有active类的子p */ display: block; }
然後,寫JS事件,不過原生的寫起來比較蛋疼,建議用jQuery來操作,下面給出兩種寫法示例原生:
var li = document.getElementsByTagName('ul')[0].getElementByTagName('li'); // 这个需要自己去写,匹配到ul下的li var main = document.getElementById('main'); var blocks = main.children(); for(var i = 0, len = li.length; i < len; i++) { var bind_li = li[i]; // 给每一个li绑定点击事件,点击事件中,需要清除其他li的`.active`并给自己加上`.active`,另外还要将右侧的p也做一样的操作(上面已经取到p数组blocks)。 bind_li.onclick = function() { for(var j = 0; j < len; j++) { if(j == i) { // j和i相等,表示为当前点击的 li[j].className = 'active'; blocks[j].className = 'active'; } else { li[j].className = ''; blocks[j].className = ''; } } } });
如果用jQuery函式庫,就會簡單很多,如下:
$('ul li').click(function() { // 点击的li元素 var index = $(this).index(); // 获取当前点击的li元素在ul中的顺序, // 稍后要同样对#main中的p进行操作 // 比如点的是第一个li // 也就要使#main中的第一个p显示 $(this) .addClass('active') // 给当前li加上.active .siblings('li') // 选中同一级其他的li .removeClass('active'); // 给同一级其他li去除.active $('#main > p').eq(index) // #main下面第index个p .addClass('active') .siblings('p') .removeClass('active'); });
這解釋了這麼多,但是我想告訴你一個很令人崩潰的消息。就是,你給的範例網站,可能根本沒有這麼做。這個網站有可能是做了4個頁面然後透過連結互相跳轉的,而每個頁面上面當前頁的標籤是一直亮著的。 (由於沒有仔細去看原始碼,但看URL位址不同也不清楚是不是做的路由,所以只是說「可能」)。
你指的是哪個效果? :hover 反白,沒什麼太複雜的。
例子你自己已經給了,你就打開他的程式碼對照即可。
如果有哪個特定樣式或效果不理解,可以再問詳細點。
這樣直接問整個怎麼實現太寬泛了,就是例子當中那樣實現的呀,
你注視已經把實現的例子給出來了麼? css 和 js 人家都給你看到了,可以直接參考。
根據你新追加的提問
你可以看到,每次點擊大標籤,其實都是跳到別的頁面,所有大標籤下的 ul 預設都是收起的。
然後根據當前所在頁你會發現當前大標籤會被帶上一個 active 的 class 名,想要打開的 ul 是緊跟其後,於是就簡單了:
css 方法是
.active + ul { display:block; }
jquery 方法是
$('.active').next('ul').css('display','block');
其他方式大同小異,都是取得 active 活動標籤,註明其下小標籤清單顯示即可。
根據你給的例子看,由於他不是寫在 css 裡,而是插入 style 屬性,應該是用 js 實現的。
你是要滑鼠移動過去的變色效果吧?
用CSS實現的話,左邊用列表做,然後改樣式,用
:hover
偽類去配鼠標移動過去的樣式比如
如果用JS實現的話,就要監聽對應元素的滑鼠進入事件
onmouseenter
,將清單的項目中除了當前項,其他的樣式都設定為常規樣式,還要監聽元素的滑鼠離開事件onmouseleave
,在滑鼠離開時需要將先前滑鼠經過時設定的樣式恢復成常規樣式。Update
建議下次問問題時候第一次就把問題詳細情況描述清楚,否則會浪費回答者的時間的。
針對你後來問的問題,
左側的HTML佈置大概是這樣
然後,老鼠移過變白的,上面已經說過了。
點擊的話,則是給被點擊的
加上一個CSS類,比如
.active
,然後,加上之前的:hover
,CSS類似這樣:當然,由於此例子中當前標籤和滑鼠經過樣式一樣,可以把
ul li:hover
和ul li.active
合起來寫作這樣,還不至於能夠切換標籤,右側的HTML佈局大概這樣:
預設用CSS將
#main
中第一個子p
顯示出來,將其他的隱藏,建議也給p加上.active
類,有.active
類的顯示,反之隱藏。然後,寫JS事件,不過原生的寫起來比較蛋疼,建議用jQuery來操作,下面給出兩種寫法示例
原生:
如果用jQuery函式庫,就會簡單很多,如下:
結語
這解釋了這麼多,但是我想告訴你一個很令人崩潰的消息。就是,你給的範例網站,可能根本沒有這麼做。這個網站有可能是做了4個頁面然後透過連結互相跳轉的,而每個頁面上面當前頁的標籤是一直亮著的。 (由於沒有仔細去看原始碼,但看URL位址不同也不清楚是不是做的路由,所以只是說「可能」)。