2017-06-23 11 views
1

私はHTMLとCSSでいくつかのコードを書いています。出力がスクリーンショットに表示されます。 メニュー項目が選択されている(展開されている)とき、上記のメニューが選択されている間(マウスが項目をホバリングしていない)、メニューの右側のカラーセクションは消えます。 マウスをメニューの上に置いていなくてもカラーを維持する方法は?CSSマルチレベルアコーディオンメニュー

(任意のJavaスクリプトコードを示唆していないしてください。)

CSS Multi-Level Accordion Menu

* { 
 
    margin: 0; 
 
    padding: 0; 
 
    font-family: Arial; 
 
    font-size: 14px; 
 
} 
 

 
.block { 
 
    float: right; 
 
    max-width: 360px; 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: white; 
 
    overflow: hidden; 
 
    margin: 0; 
 
} 
 

 
    .block > div { 
 
     display: block; 
 
     position: relative; 
 
     background-color: #fff; 
 
     color: #767676; 
 
     border-bottom: 1px solid #e5e5e5; 
 
     border-left: 1px solid #e5e5e5; 
 
    } 
 

 
     .block > div:nth-child(1):before { 
 
      font-family: 'FontAwesome'; 
 
      content: "\F0CA"; 
 
      font-size: 16px; 
 
      width: 50px; 
 
      font-weight: bold; 
 
      text-align: center; 
 
      position: absolute; 
 
      right: 0; 
 
      top: 0; 
 
      line-height: 50px; 
 
      margin: 0; 
 
      color: #767676; 
 
      border-right: 4px solid #E94B3B; 
 
      background: none; /* For browsers that do not support gradients */ 
 
      background: -webkit-linear-gradient(to right, rgba(0,0,0,0) 50%, #E94B3B 50%); /* Safari 5.1-6.0 */ 
 
      background: -o-linear-gradient(to right, rgba(0,0,0,0) 50%, #E94B3B 50%); /* For Opera 11.6-12.0 */ 
 
      background: -moz-linear-gradient(to right, rgba(0,0,0,0) 50%, #E94B3B 50%); /* For Firefox 3.6-15 */ 
 
      background: linear-gradient(to right, rgba(0,0,0,0) 50%, #E94B3B 50%); /* Standard syntax */ 
 
      background-size: 200% 100%; 
 
      transition: all 0.25s ease-in-out; 
 
     } 
 

 
     .block > div:nth-child(1):hover:before { 
 
      background-position: 100% 0; 
 
      color: white; 
 
     } 
 

 
     .block > div:nth-child(2):before { 
 
      font-family: 'FontAwesome'; 
 
      content: "\F0F6"; 
 
      font-size: 16px; 
 
      width: 50px; 
 
      font-weight: bold; 
 
      text-align: center; 
 
      position: absolute; 
 
      right: 0; 
 
      top: 0; 
 
      line-height: 50px; 
 
      margin: 0; 
 
      color: #767676; 
 
      border-right: 4px solid #ffb61c; 
 
      background: none; /* For browsers that do not support gradients */ 
 
      background: -webkit-linear-gradient(to right, rgba(0,0,0,0) 50%, #ffb61c 50%); /* Safari 5.1-6.0 */ 
 
      background: -o-linear-gradient(to right, rgba(0,0,0,0) 50%, #ffb61c 50%); /* For Opera 11.6-12.0 */ 
 
      background: -moz-linear-gradient(to right, rgba(0,0,0,0) 50%, #ffb61c 50%); /* For Firefox 3.6-15 */ 
 
      background: linear-gradient(to right, rgba(0,0,0,0) 50%, #ffb61c 50%); /* Standard syntax */ 
 
      background-size: 200% 100%; 
 
      transition: all 0.25s ease-in-out; 
 
     } 
 

 
     .block > div:nth-child(2):hover:before { 
 
      background-position: 100% 0; 
 
      color: white; 
 
     } 
 

 
     .block > div > input + label { 
 
      cursor: pointer; 
 
      display: block; 
 
      line-height: 50px; 
 
      background-color: white; 
 
      transition: background-color 0.5s; 
 
      color: #767676; 
 
      padding-right: 60px; 
 
      text-align: right; 
 
     } 
 

 
     .block > div > input ~ div { 
 
      visibility: hidden; 
 
      max-height: 0; 
 
      padding: 0; 
 
      opacity: 0; 
 
      transition: all 0.5s; 
 
     } 
 

 

 
     .block > div > input:checked + label { 
 
      background-color: #f3f3f3; 
 
      transition: background-color 0.5s; 
 
      color: black; 
 
     } 
 

 
     .block > div > input:checked ~ div { 
 
      display: block; 
 
      opacity: 1; 
 
      visibility: visible; 
 
      height: auto; 
 
      max-height: 10000px; 
 
      padding: 0; 
 
      transition: all 0.5s; 
 
     } 
 

 
    .block a { 
 
     display: block; 
 
     line-height: 50px; 
 
     text-decoration: none; 
 
     color: black; 
 
     border-top: solid 1px #e5e5e5; 
 
     padding-right: 50px; 
 
     text-align: right; 
 
    } 
 

 
     .block a:hover { 
 
      background: #eeeeee; 
 
     } 
 

 

 
@font-face { 
 
    font-family: 'FontAwesome'; 
 
    src: url('../fonts/FontAwesome.otf') format('opentype'); 
 
}
<div class="block"> 
 
     <div> 
 
      <input type="radio" name="item" id="item-one" hidden /> 
 
      <label for="item-one">First</label> 
 
      <div> 
 
       <p><a href="#">Menu 1.1</a></p> 
 
       <p><a href="#">Menu 1.2</a></p> 
 
       <p><a href="#">Menu 1.3</a></p> 
 
      </div> 
 
     </div> 
 
     <div> 
 
      <input type="radio" name="item" id="item-two" hidden /> 
 
      <label for="item-two">second</label> 
 
      <div> 
 
       <p><a href="#">Menu 2.1</a></p> 
 
       <p><a href="#">Menu 2.2</a></p> 
 
       <p><a href="#">Menu 2.3</a></p> 
 
      </div> 
 
     </div> 
 
    </div>

+0

は、ここで最初の入力が新しいスタイルを使用して2つ目は、あなたのオリジナルと同じであるスニペットです、またはあなたの投稿を編集して、あなたの質問に対する確かな答えを得る可能性が高くなります。 –

+0

@JamesKraus ok。 –

答えて

0

ホバー状態を実現することができるように、あなたは、あなたのHTMLビットをリファクタリングすることができます代わりに:checkedを入力してください。

最初に.block>divの擬似要素を、labelの後に続くspan要素に置き換えます。 inputの後ろにあるものが必要なので、CSSの親セレクタがないので、CSSでそれを選択できます。入力に擬似要素を使用することはできないため、代わりにスパンを追加します。私は擬似要素からあなたcontent財産の少し外箱のシンボルを取り、spanに入れて張り出す

<div class="block"> 
    <div> 
    <input type="checkbox" name="item" id="item-one" hidden /> 
    <label for="item-one">First</label> 
    <span></span> 
    <div> 
     <p><a href="#">Menu 1.1</a></p> 
     <p><a href="#">Menu 1.2</a></p> 
     <p><a href="#">Menu 1.3</a></p> 
    </div> 
    </div> 
</div> 

注意。

その後、セレクタを変更するだけです。したがって、この...

.block > div:nth-child(1):before { ... } 
.block > div:nth-child(1):hover:before { ... } 

は、このになり...それだ

#item-one + label + span { ... } 

.block>div:nth-child(1):hover #item-one + label + span, 
#item-one:checked + label + span { ... } 

spanには、擬似要素のない高さを明示的に追加する必要があります。また、スパンをdisplay: blockに設定する必要があります。残りのスタイルはまったく同じです。

最後に、入力をtype="radio"からtype="checkbox"に変更しました。そうすれば、一度クリックするだけでいつでも開くように強制するのではなく、それらを折りたたむことができます。あなたの作業コードとjsfiddleを投稿する場合は、単にFYI

* { 
 
    margin: 0; 
 
    padding: 0; 
 
    font-family: Arial; 
 
    font-size: 14px; 
 
} 
 
.block { 
 
    float: right; 
 
    max-width: 360px; 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: white; 
 
    overflow: hidden; 
 
    margin: 0; 
 
} 
 
.block>div { 
 
    display: block; 
 
    position: relative; 
 
    background-color: #fff; 
 
    color: #767676; 
 
    border-bottom: 1px solid #e5e5e5; 
 
    border-left: 1px solid #e5e5e5; 
 
} 
 
#item-one + label + span { 
 
    display: block; 
 
    font-family: 'FontAwesome'; 
 
    content: "\F0CA"; 
 
    font-size: 16px; 
 
    width: 50px; 
 
    height: 50px; 
 
    font-weight: bold; 
 
    text-align: center; 
 
    position: absolute; 
 
    right: 0; 
 
    top: 0; 
 
    line-height: 50px; 
 
    margin: 0; 
 
    color: #767676; 
 
    border-right: 4px solid #E94B3B; 
 
    background: none; 
 
    /* For browsers that do not support gradients */ 
 
    background: -webkit-linear-gradient(to right, rgba(0, 0, 0, 0) 50%, #E94B3B 50%); 
 
    /* Safari 5.1-6.0 */ 
 
    background: -o-linear-gradient(to right, rgba(0, 0, 0, 0) 50%, #E94B3B 50%); 
 
    /* For Opera 11.6-12.0 */ 
 
    background: -moz-linear-gradient(to right, rgba(0, 0, 0, 0) 50%, #E94B3B 50%); 
 
    /* For Firefox 3.6-15 */ 
 
    background: linear-gradient(to right, rgba(0, 0, 0, 0) 50%, #E94B3B 50%); 
 
    /* Standard syntax */ 
 
    background-size: 200% 100%; 
 
    transition: all 0.25s ease-in-out; 
 
} 
 
.block>div:nth-child(1):hover #item-one + label + span, 
 
#item-one:checked + label + span { 
 
    background-position: 100% 0; 
 
    color: white; 
 
} 
 
.block>div:nth-child(2):before { 
 
    font-family: 'FontAwesome'; 
 
    content: "\F0F6"; 
 
    font-size: 16px; 
 
    width: 50px; 
 
    font-weight: bold; 
 
    text-align: center; 
 
    position: absolute; 
 
    right: 0; 
 
    top: 0; 
 
    line-height: 50px; 
 
    margin: 0; 
 
    color: #767676; 
 
    border-right: 4px solid #ffb61c; 
 
    background: none; 
 
    /* For browsers that do not support gradients */ 
 
    background: -webkit-linear-gradient(to right, rgba(0, 0, 0, 0) 50%, #ffb61c 50%); 
 
    /* Safari 5.1-6.0 */ 
 
    background: -o-linear-gradient(to right, rgba(0, 0, 0, 0) 50%, #ffb61c 50%); 
 
    /* For Opera 11.6-12.0 */ 
 
    background: -moz-linear-gradient(to right, rgba(0, 0, 0, 0) 50%, #ffb61c 50%); 
 
    /* For Firefox 3.6-15 */ 
 
    background: linear-gradient(to right, rgba(0, 0, 0, 0) 50%, #ffb61c 50%); 
 
    /* Standard syntax */ 
 
    background-size: 200% 100%; 
 
    transition: all 0.25s ease-in-out; 
 
} 
 
.block>div:nth-child(2):hover:before { 
 
    background-position: 100% 0; 
 
    color: white; 
 
} 
 
.block>div>input+label { 
 
    cursor: pointer; 
 
    display: block; 
 
    line-height: 50px; 
 
    background-color: white; 
 
    transition: background-color 0.5s; 
 
    color: #767676; 
 
    padding-right: 60px; 
 
    text-align: right; 
 
} 
 
.block>div>input~div { 
 
    visibility: hidden; 
 
    max-height: 0; 
 
    padding: 0; 
 
    opacity: 0; 
 
    transition: all 0.5s; 
 
} 
 
.block>div>input:checked+label { 
 
    background-color: #f3f3f3; 
 
    transition: background-color 0.5s; 
 
    color: black; 
 
} 
 
.block>div>input:checked~div { 
 
    display: block; 
 
    opacity: 1; 
 
    visibility: visible; 
 
    height: auto; 
 
    max-height: 10000px; 
 
    padding: 0; 
 
    transition: all 0.5s; 
 
} 
 
.block a { 
 
    display: block; 
 
    line-height: 50px; 
 
    text-decoration: none; 
 
    color: black; 
 
    border-top: solid 1px #e5e5e5; 
 
    padding-right: 50px; 
 
    text-align: right; 
 
} 
 
.block a:hover { 
 
    background: #eeeeee; 
 
} 
 
@font-face { 
 
    font-family: 'FontAwesome'; 
 
    src: url('../fonts/FontAwesome.otf') format('opentype'); 
 
}
<div class="block"> 
 
    <div> 
 
    <input type="checkbox" name="item" id="item-one" hidden /> 
 
    <label for="item-one">First</label> 
 
    <span></span> 
 
    <div> 
 
     <p><a href="#">Menu 1.1</a></p> 
 
     <p><a href="#">Menu 1.2</a></p> 
 
     <p><a href="#">Menu 1.3</a></p> 
 
    </div> 
 
    </div> 
 
    <div> 
 
    <input type="checkbox" name="item" id="item-two" hidden /> 
 
    <label for="item-two">second</label> 
 
    <div> 
 
     <p><a href="#">Menu 2.1</a></p> 
 
     <p><a href="#">Menu 2.2</a></p> 
 
     <p><a href="#">Menu 2.3</a></p> 
 
    </div> 
 
    </div> 
 
</div>

+0

この質問にお答えいただきありがとう♥ –

+0

絶対に!このソリューションはあなたのために機能しますか? – cjl750

+0

はい。君は最高だ。 ty –