Sassでちょっとつまったところ
SCSSを使っていて、ちょっとつまったのでメモを残しておきます。
うまく行かないコード
以下のようなHTML、SCSS(CSS)を書きました。
※SCSSはLive Sass CompilerでCSSに変換しています。
HTML
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Hamburger_Menu</title> <link rel="stylesheet" href="style.css"> </head> <body> <ul class="parents"> <li class="child"><a href="">トップ</a></li> <li class="child"><a href="">概要</a></li> <li class="child"><a href="">お問い合わせ</a></li> </ul> <ul class="parents red"> <li class="child"><a href="">トップ</a></li> <li class="child"><a href="">概要</a></li> <li class="child"><a href="">お問い合わせ</a></li> </ul> </html>
SCSS
@mixin child { display: inline-block; padding: 30px 20px; a { text-decoration: none; color: white; } } body { padding: 0; margin: 0; } ul { padding: 0; margin: 0; } .parents { text-align: center; background-color: black; .child { @include child; } .red { text-align: center; background-color: red; .child { @include child; } } }
CSS
body { padding: 0; margin: 0; } ul { padding: 0; margin: 0; } .parents { text-align: center; background-color: black; } .parents .child { display: inline-block; padding: 30px 20px; } .parents .child a { text-decoration: none; color: white; } .parents .red { text-align: center; background-color: red; } .parents .red .child { display: inline-block; padding: 30px 20px; } .parents .red .child a { text-decoration: none; color: white; }
JavaScriptでclass名「red」を付与したら、ナビゲーションの背景色が変更される事を想定して、SCSSを書きました。
ただ、思うような結果になりませんでした。
ご覧のとおり、背景色が黒のままです。
そこで以下のように変更したらうまく行きました。試行錯誤した過程も含めてコードを示します。
うまく行ったコード(経緯含む)
HTML
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>Hamburger_Menu</title> <link rel="stylesheet" href="style.css"> </head> <body> <ul class="parents"> <li class="child"><a href="">トップ</a></li> <li class="child"><a href="">概要</a></li> <li class="child"><a href="">お問い合わせ</a></li> </ul> <ul class="parents red"> <li class="child"><a href="">トップ</a></li> <li class="child"><a href="">概要</a></li> <li class="child"><a href="">お問い合わせ</a></li> </ul> <ul class="parents blue"> <li class="child"><a href="">トップ</a></li> <li class="child"><a href="">概要</a></li> <li class="child"><a href="">お問い合わせ</a></li> </ul> <ul class="parents"> <div class="red"> <li class="child"><a href="">トップ</a></li> <li class="child"><a href="">概要</a></li> <li class="child"><a href="">お問い合わせ</a></li> </div> </ul> </body> </html>
SCSS
@mixin child { display: inline-block; padding: 30px 20px; a { text-decoration: none; color: white; } } body { padding: 0; margin: 0; } ul { padding: 0; margin: 0; } .parents { text-align: center; background-color: black; .child { @include child; } .red { text-align: center; background-color: red; .child { @include child; } } } .parents.blue { text-align: center; background-color: blue; .child { @include child; } }
CSS
body { padding: 0; margin: 0; } ul { padding: 0; margin: 0; } .parents { text-align: center; background-color: black; } .parents .child { display: inline-block; padding: 30px 20px; } .parents .child a { text-decoration: none; color: white; } .parents .red { text-align: center; background-color: red; } .parents .red .child { display: inline-block; padding: 30px 20px; } .parents .red .child a { text-decoration: none; color: white; } .parents.blue { text-align: center; background-color: blue; } .parents.blue .child { display: inline-block; padding: 30px 20px; } .parents.blue .child a { text-decoration: none; color: white; }
ちょっと長いですが、こう記述する事で以下のような結果となります。
きちんと背景色が青と赤に変わりました。
結局どういう事?
今回何がわかったかというと、CSSで以下の2つの違いがわかった。
CSS
.parents .red { } .parents.blue { }
.parentsと.redの間に半角スペースがあるのがポイント。
.parentsと.blueの間に半角スペースはありません。
これらのCSSに対応したHTMLの書き方は以下のとおり。
<div class="parents"> <div class="red"> ・・・ </div> </div> <div class="parents blue"> ・・・ </div>
JavaScriptでよく使う形式は<div class="parents blue">の方だと思います。
最初、CSSをredの書き方にしていたので思ったように動作しないという話でした。