2017-11-02 2 views
0

私は、アクティブなメニューリンクページの背景が異なる色のメニューの純粋なCSS/HTML構造を作ろうとしています。そのために私は:checkedセレクタを使用しています。私は入力要素をクリックすることでこれを実現できますが、実際のリンク自体をクリックすると何も起こりません。私が現在使っているページを強調表示した純粋なCSSメニュー

私は、メニューのすべてのページにメニューコードを入れたくないので、それをインクルードファイルに含めました。私が正しくしていないことを教えてください。私はこの目的のためにjavascript/jqueryを使いたくない。

編集 -

これらの個別のリンクを持つ独立したページです。私は私のコードの外に出ないようにすべてのリンクを同じにしていました。

これが私のcodepenある - https://codepen.io/anon/pen/zPrOoj、これは私の抜粋です -

.nav { 
 
    float: left; 
 
    width: 100%; 
 
    background-color: rgba(248, 220, 192, 1); 
 
    color: black; 
 
    display: table; 
 
    table-layout: fixed; 
 
} 
 
.nav ul { 
 
    width: 100%; 
 
    float: left; 
 
    white-space: nowrap; 
 
    display: flex; 
 
    flex-direction: row; 
 
\t overflow: hidden; 
 
\t margin: 0; 
 
    padding: 0; 
 
} 
 

 
.nav ul li.nav_bar { 
 
    display: inline; 
 
    padding: 1% 0% .5% 0.75%; 
 
    border-right: solid 1px rgba(78, 52, 25, 1); 
 
\t flex-grow: 1; 
 
} 
 
.nav ul li a { 
 
    color: black; 
 
\t display: block; 
 
\t 
 
} 
 
.nav ul li.active { 
 
\t  background-color: rgba(103, 140, 57, 1); 
 
\t \t 
 
} 
 
.nav ul li.active a { 
 
    border-bottom: none; 
 
    padding-bottom: 4px; 
 
\t color : #ccc; 
 
} 
 
.nav ul li.nav_bar:last-child { 
 
    border-right: none; 
 
} 
 
a.nav_bar { 
 
    text-align: center; 
 

 
    text-decoration: none; 
 
    font-family: verdana; 
 
    font-size: 16px; 
 
} 
 
a.nav_bar:hover { 
 
    color: red; 
 
} 
 
.menu1:checked ~ ul.nav_bar>.num1+li.first { 
 
    background: blue; 
 
} 
 
.menu2:checked ~ ul.nav_bar>.num2+li.second { 
 
    background: red; 
 
} 
 
.menu3:checked ~ ul.nav_bar>.num3+li.third { 
 
    background: pink; 
 
} 
 
.menu4:checked ~ ul.nav_bar>.num4+li.fourth { 
 
    background: yellow; 
 
}
<div class="nav" > 
 
<input class="menu1" id="_menu1" type="checkbox"> 
 
    <input class="menu2" id="_menu2" type="checkbox"> 
 
    <input class="menu3" id="_menu3" type="checkbox"> 
 
    <input class="menu4" id="_menu4" type="checkbox"> 
 
    
 
\t <ul id="respons-text1" class="nav_bar"> 
 
    <label class="num1" for="_menu1"> 
 
<span></span></label> 
 
\t \t <li class="nav_bar active first"><a class="nav_bar" href="#">home</a> 
 
\t \t </li> 
 
    <label class="num2" for="_menu2"> 
 
<span></span></label> 
 
\t \t <li class="nav_bar second"><a class="nav_bar" href="#">about</a> 
 
\t \t </li> 
 
    <label class="num3" for="_menu3"> 
 
<span></span></label> 
 
\t \t <li class="nav_bar third"><a class="nav_bar" href="#">work areas</a> 
 
\t \t </li> 
 
    <label class="num4" for="_menu4"> 
 
<span></span></label> 
 
\t \t <li class="nav_bar fourth"><a class="nav_bar" href="#">contact</a> 
 
\t \t </li> 
 
\t </ul> 
 
</div>

+0

は、私はあなたが新しいページをロードするとき、あなたは、各ページのチェックボックスを繰り返さない限り確認し、正しいチェックボックスを維持して置くことができる方法はありませんので、あなたはjavascriptをせずにそれを達成することができないと思いますチェックされた属性を正しい入力に置き換えます。とにかくうまくいきません。これはHTMLとCSSだけですか、データベースを使用していますか?その場合、現在のページを取得し、現在のページにクラスを動的に割り当てることができます。 –

+0

これはHTMLとCSSだけです。メニュー項目はデータベースからフェッチされません。 – user20152015

答えて

1

あなたはにリンクCodepenはだけCSSで作ることができます。しかし、まだは、新しいページが読み込まれたときの問題を回避しないので、どのnav項目がアクティブであるかを知る方法がありません。

アクティブなナビアイテムを強調表示するCSS専用ソリューションです。他のページ要素がクリックされた後でもリンクが強調表示されたままになっています(:focusを使用した場合は発生しません)。

body{ 
 
    font-sze:14px; 
 
} 
 

 
.container{ 
 
max-width:960px; 
 
    margin:0 auto; 
 
} 
 
nav ul li{ 
 
    list-style:none; 
 
    float:left; 
 
    padding-right:20px; 
 
} 
 
nav ul li a{ 
 
    text-decoration:none; 
 
    color:#222; 
 
    background-color:#ccc; 
 
    padding:4px 5px; 
 
} 
 

 
input { 
 
    display: none; 
 
} 
 

 
input:checked + a { 
 
    background-color:#d90000; 
 
    color:#fff; 
 
} 
 
<body> 
 
    <div class="container"> 
 
    <nav class="navecation"> 
 
     <ul id="navi"> 
 
     <li><input name="nav" type="radio" id="about"><a class="menu" href="#"><label for="about">About</label></a></li> 
 
     <li><input name="nav" type="radio" id="contact"><a class="menu" href="#"><label for="contact">Contact</label></a></li> 
 
     <li><input name="nav" type="radio" id="services"><a class="menu" href="#"><label for="services">Services</label></a></li> 
 
     <li><input name="nav" type="radio" id="contactus"><a class="menu" href="#"><label for="contactus">Contact Us</label></a></li> 
 
     <li><input name="nav" type="radio" id="blog"><a class="menu" href="#"><label for="blog">Read Our Blog</a></a></li> 
 
     </ul> 
 
    </nav> 
 
    </div> 
 

 

 
    <body>

+0

目標は、メニューバーで強調表示されるリンクとページを含むCSSメニューを持つことです。だから、リンクが必要です、私はそれを削除することはできません。私は 'label'で' li'をラップしようとしましたが、それは完全にスタイリングを台無しにします。 – user20152015

+0

しかし、チェックボックスとラベルはなぜですか? –

+0

チェックボックスとラベルは、 ':checked' CSSセレクタプロパティを使うためのものです。チェックボックスは非表示になります。 – user20152015

関連する問題