感謝您考慮此問題。JavaScript:帶下拉的動態導航欄干擾下拉元素寬度
該代碼可以在GitHub上找到,here。
這裏有一些事情要做,所以在我們開始代碼之前,我想解釋一下它。
我有一個函數makeNavigation,它需要三個參數來製作導航欄:導航欄的項目數組,導航欄的元素ID以及大小。
如果不包括邊距,這種方法效果相當好。然而,只要邊緣的兩條線未被註釋掉,那麼下拉內容就比它應該大得多。思考?
此外,當窗口儘可能小時,而不是隻有一個下拉元素,「Home」和下拉條被堆疊。爲什麼/我該如何解決這個問題?
注:我源W3 CSS和hover-master
所以對於我們的網頁和「大小」的變量。
var pages = ["HOME","ABOUT","PAGE3","PAGE4","PAGE5","PAGE6","PAGE7","PAGE8"];
var extraSmall, small, medium, large;
extraSmall = 610;
small = 700;
medium = 800;
large = 1250;
對於函數:
function getSizeInText(size) {
if (size > large) {
return("large")
};
if (extraSmall < size && size < medium) {
return("small")
};
if (medium <= size && size <= large) {
return("medium")
};
if (size <= extraSmall) {
return("extraSmall")
}
}
function makeNavigation(navArray, navID, size) {
var theID = document.getElementById(navID);
var mar = 8;
var pad = 2;
theID.innerHTML = null;
// theID.style.marginRight = mar + "%";
// theID.style.marginLeft = mar + "%";
theID.style.marginTop = mar/4 + "%";
if (size == "extraSmall") {
var numNav = navArray.length;
theID.innerHTML += '<li class="w3-dropdown-hover w3-centered" '+
'style="width:' + spaceAllocated + '%" >' +
'<a class="hvr-reveal navFont">' +
'<i class="fa fa-bars"></i></a>' +
'<ul id="dropDownContent" class="w3-dropdown-content" style="width:'+ spaceAllocated +'%">' +
'</ul>' + '</li>';
for (var i = 0; i < numNav; i++) {
document.getElementById('dropDownContent').innerHTML+=
'<li style="width:' +
(100 - 2*pad) + '%">'+
'<a class="hvr-reveal navFont" href="' + navArray[i].toLowerCase() + '.html">' +
navArray[i] + '</a></li>';
}
}
if (size == "small") {
var numNav = navArray.length;
var spaceAllocated = (100)/2;
for (var i = 0; i < 1; i++) {
theID.innerHTML +=
'<li style = "width:' +
spaceAllocated +
'%"><a class="hvr-reveal navFont"' +
' href="' +
navArray[i].toLowerCase() +
'.html">' +
navArray[i] + '</a></li>';
};
theID.innerHTML += '<li class="w3-dropdown-hover w3-centered" '+
'style="width:' + spaceAllocated + '%" >' +
'<a class="hvr-reveal navFont">' +
'<i class="fa fa-bars"></i></a>' +
'<ul id="dropDownContent" class="w3-dropdown-content" style="width:'+ spaceAllocated +'%">' +
'</ul>' + '</li>';
for (var i = 1; i < numNav; i++) {
document.getElementById('dropDownContent').innerHTML+=
'<li style="width:' +
(100 - 2*pad) + '%">'+
'<a class="hvr-reveal navFont" href="' + navArray[i].toLowerCase() + '.html">' +
navArray[i] + '</a></li>';
}
}
if (size == "medium") {
var numNav = navArray.length;
var half = Math.floor(numNav/2);
var spaceAllocated = (100)/(half+1);
for (var i = 0; i < half; i++) {
theID.innerHTML +=
'<li style = "width:' +
spaceAllocated +
'%"><a class="hvr-reveal navFont"' +
' href="' +
navArray[i].toLowerCase() +
'.html">' +
navArray[i] + '</a></li>';
};
theID.innerHTML += '<li class="w3-dropdown-hover w3-centered" '+
'style="width:' + spaceAllocated + '%" >' +
'<a class="hvr-reveal navFont">' +
'<i class="fa fa-bars"></i></a>' +
'<ul id="dropDownContent" class="w3-dropdown-content" style="width:'+ spaceAllocated +'%">' +
'</ul>' + '</li>';
for (var i = half; i < numNav; i++) {
document.getElementById('dropDownContent').innerHTML+=
'<li style="width:' +
(100 - 2*pad) + '%">'+
'<a class="hvr-reveal navFont" href="' + navArray[i].toLowerCase() + '.html">' +
navArray[i] + '</a></li>';
}
};
if (size == "large") {
var numNav = navArray.length;
var spaceAllocated = (100)/numNav;
for (var i = 0; i < numNav; i++) {
theID.innerHTML +=
'<li style = "width:' +
spaceAllocated +
'%"><a class="hvr-reveal navFont"' +
' href="' +
navArray[i].toLowerCase() +
'.html">' +
navArray[i] + '</a></li>';
};
};
}
然後在HTML:
<div class="w3-container w3-section"><ul id="navBar" class="w3-navbar w3-center"></ul></div>
<script type="text/javascript">
var windowWidth;
var size;
jQuery(document).ready(function(){
windowWidth = jQuery(window).width();
size = getSizeInText(windowWidth);
if (windowWidth > large) {}
if (windowWidth < medium) {}
if (medium <= windowWidth && windowWidth <= large) {}
});
jQuery(window).resize(function() {
windowWidth = jQuery(window).width();
size = getSizeInText(windowWidth);
if (windowWidth > large) {
makeNavigation(pages, "navBar", size);
}
if (windowWidth < medium) {
makeNavigation(pages, "navBar", size);
}
if (medium <= windowWidth && windowWidth <= large) {
makeNavigation(pages, "navBar", size);
}
});
</script>
更新
programmer5000給了一個解決這個特殊的問題。但是,不使用w3-css時,相同的解決方案不起作用。怎麼來的?
/* Drop down content */
li a, .dropbtn {
display: inline-block;
text-align: center;
text-decoration: none;
}
li.dropdown {
display: inline-block;
}
.dropdown-content {
display: none;
position: absolute;
text-align: center;
width: inherit;
z-index: 1;
}
.dropdown-content a {
text-decoration: none;
display: block;
}
.dropdown:hover .dropdown-content {
display: block;
}
<nav id ='navigation-bar'>
<ul>
<li><a href="#"> HOME </a></li>
<li class="dropdown">
<a class="dropbtn">TEST</a>
<div class="dropdown-content">
<a>1</a>
<a>2</a>
<a>3</a>
</div>
</li>
</ul>
</nav>
我沒有看到任何無法用CSS和HTML解決的問題。那麼我可以問你爲什麼用jQuery/javascript構建這個導航?無論哪種方式,你沒有標記jQuery/JavaScript,並有很多jQuery/JavaScript。 – caramba
@caramba我是web-dev的新手,我無法弄清楚如何在沒有jQuery或其他監聽器的情況下更改窗口大小時如何調整導航欄大小...如果您可以顯示/教我一種簡單的方法用HTML做這件事,我渴望學習 – SumNeuron
關於CSS媒體查詢呢? –