WordPressを使用して、bs4navwalker(https://github.com/nicgene/bs4navwalker#bs4navwalker)を使用して写真内に透明なナビゲーションバーを作成しました。デスクトップ版では問題ないように見えます。
ただし、モバイルバージョンでは、ナビゲーションバーメニューボタンをクリックした後、メニューエントリがページ上のテキストでオーバーレイされます。
誰かがモバイルナビゲーションバーのメニューボタンをクリックしたらすぐに、メニューの背景色をインディゴに変更したいと思います。ボタンがクリックされていない場合、ボタン自体はそのままである必要があります。
これまで、cssを介してプロパティを変更したい適切なクラスを見つけようとしましたが、bs4navwalker.phpファイル内に適切なクラスが見つかりませんでした。
テーマのheader.php内で、navbarが宣言されています。
<nav id='navbar_0' style="postion: relative;" class="navbar navbar-default navbar-expand-md navbar-light fixed-top indigo topBotomBordersIn">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<?php
wp_nav_menu([
'menu' => 'primary',
'theme_location' => 'top',
'container' => 'div',
'container_id' => 'navbarCollapse',
'container_class' => 'collapse navbar-collapse',
'menu_id' => false,
'menu_class' => 'navbar-nav mr-auto',
'depth' => 0,
'fallback_cb' => 'bs4navwalker::fallback',
'walker' => new bs4navwalker()
]);
?>
</nav>
私のCSSは
.indigo{
background:rgba(63,81,181,0.90); /* indigo, 4th value is alpha, better than opacity, which makes also the font transparent */
color: white !important; /* font color for transition */
transition: background-color 1s ease 0s;
.transparent{
background:rgba(255,255,255,0.0);
.solid{
background-color:rgba(63,81,181,0.75); /* indigo */
color: #ffffff !important; /* font color */
transition: background-color 1s ease 0s;
}
そして、javascript関数navbar_transparent()を介して、Webサイトの1ページのみのnavbarに透過クラスを適用しました。また、関数navbar_animation()を適用しました。この関数は、ユーザーがページを25ピクセル以上下にスクロールするとすぐに、ナビゲーションバーをソリッドナビゲーションバーに変換します。
function navbar_transparent(){
jQuery('.navbar').removeClass('indigo');
jQuery('.navbar').addClass('transparent');
function navbar_animation(){
jQuery(document).ready(function() {
// Transition effect for navbar
jQuery(window).scroll(function() {
// checks if window is scrolled more given value, adds/removes solid class
if(jQuery(this).scrollTop() > 25) {
jQuery('.navbar').addClass('solid');
}else{
jQuery('.navbar').removeClass('solid');
}
});
});
}
誰かがヒントを持っていますか?
いくつかの実験の後、私は答えを見つけました。これは、nav要素が一度に3つのカラークラス(透明、インディゴ、またはソリッド)のうちの1つだけを持つ必要があるという要求に基づいています。さらに、関数navbar_animation()は、メディアクエリが原因で、ウィンドウの幅が768ピクセル以上の場合、ナビゲーションバーにのみ影響します。つまり、モバイルビューでは、navbar_functionは効果がありません。これは、変更されたjavascript関数によって実現されます。
function navbar_transparent(){
jQuery('.navbar').removeClass('indigo');
jQuery('.navbar').addClass('transparent');
jQuery('.navbar-toggler').click(function(){ // navbar should have only one of the three color classes: transparent, solid, indigo
var el = document.getElementById('navbar_0');
if(el.classList.contains('transparent')){
jQuery('nav').removeClass('transparent');
jQuery('nav').addClass('solid'); // switch to solid
}
else if(el.classList.contains('indigo')){
jQuery('nav').removeClass('indigo');
jQuery('nav').addClass('solid'); // switch to solid
}
else if(el.classList.contains('solid')){
jQuery('nav').removeClass('solid');
jQuery('nav').addClass('transparent'); // switch back to transparent
}
})
}
function navbar_animation(){
jQuery(document).ready(function(){
// Transition effect for navbar
jQuery(window).scroll(function(){
// checks if window is scrolled more given value, adds/removes solid class
var x = window.matchMedia("(min-width: 768px)") // perform transition to indigo navbar only, if in desktop view
if(x.matches){
var el = document.getElementById('navbar_0');
if(jQuery(this).scrollTop() > 25){ // if scrolled enough, make navbar indigo
if(el.classList.contains('transparent')){
jQuery('.navbar').removeClass('transparent');
jQuery('.navbar').addClass('indigo');
}
}
else{
if(el.classList.contains('indigo')){ // if scrolled up again, switch back to transparent navbar
jQuery('.navbar').removeClass('indigo');
jQuery('.navbar').addClass('transparent');
}
}
}
});
});
}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加