サルワカさんのサイト
https://saruwakakun.com/html-css/reference/nav-drawer
このサイトにあるように、CSSでハンバーガーメニューを作っているのですが、
ページを開いたときに、メニューの中身が左側へ移動してるのが表示されてしまいます。
サルワカさんのデモでは、最初から左側へ隠れているのですが、
自分のエディタにコピペして表示させると、上記の不具合が生じます。
回答よろしくお願いします。
【追加】
ページを更新した時の表示です。(2回更新ボタン押しています)
windows10のChromeをつかっています。
該当のソースコード
HTML <header> <div id="nav-drawer"> <input id="nav-input" type="checkbox" class="nav-unshown"> <label id="nav-open" for="nav-input"><span></span></label> <label class="nav-unshown" id="nav-close" for="nav-input"></label> <div id="nav-content">ここに中身を入れる</div> </div> </header> CSS header { padding:10px; background: skyblue; } #nav-drawer { position: relative; } /*チェックボックス等は非表示に*/ .nav-unshown { display:none; } /*アイコンのスペース*/ #nav-open { display: inline-block; width: 30px; height: 22px; vertical-align: middle; } /*ハンバーガーアイコンをCSSだけで表現*/ #nav-open span, #nav-open span:before, #nav-open span:after { position: absolute; height: 3px;/*線の太さ*/ width: 25px;/*長さ*/ border-radius: 3px; background: #555; display: block; content: ''; cursor: pointer; } #nav-open span:before { bottom: -8px; } #nav-open span:after { bottom: -16px; } /*閉じる用の薄黒カバー*/ #nav-close { display: none;/*はじめは隠しておく*/ position: fixed; z-index: 99; top: 0;/*全体に広がるように*/ left: 0; width: 100%; height: 100%; background: black; opacity: 0; transition: .3s ease-in-out; } /*中身*/ #nav-content { overflow: auto; position: fixed; top: 0; left: 0; z-index: 9999;/*最前面に*/ width: 90%;/*右側に隙間を作る(閉じるカバーを表示)*/ max-width: 330px;/*最大幅(調整してください)*/ height: 100%; background: #fff;/*背景色*/ transition: .3s ease-in-out;/*滑らかに表示*/ -webkit-transform: translateX(-105%); transform: translateX(-105%);/*左に隠しておく*/ } /*チェックが入ったらもろもろ表示*/ #nav-input:checked ~ #nav-close { display: block;/*カバーを表示*/ opacity: .5; } #nav-input:checked ~ #nav-content { -webkit-transform: translateX(0%); transform: translateX(0%);/*中身を表示(右へスライド)*/ box-shadow: 6px 0 25px rgba(0,0,0,.15); }
当方の環境でご提示のコードで試してみましたが、ハンバーガーメニューは隠れていました。
つまり、「ページを開いたときに、メニューの中身が左側へ移動してるのが表示されてしまいます」という問題が再現しません。
Re0922さんの環境では、ご提示のコード*だけ*で問題が再現しますか?
再現するのであれば、環境の問題だと思います。問題が再現するであろう環境をご提示ください。
再現しないのであれば、ご提示いただいていない部分に問題があると思います。問題が再現するコードをご提示ください。
htmlに関しては
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<header>
<div id="nav-drawer">
<input id="nav-input" type="checkbox" class="nav-unshown">
<label id="nav-open" for="nav-input"><span></span></label>
<label class="nav-unshown" id="nav-close" for="nav-input"></label>
<div id="nav-content">ここに中身を入れる</div>
</div>
</header>
</body>
</html>
といった具合で、ほとんど余計なものはない状態です。
CSSは上記そのままです。
よろしくお願いします。
上記のHTMLと質問文のCSSのコードで試してみましたが、やはり問題が再現しません。
可能性としては二つあります。
・特定の状況でないと再現しない問題である。
→ 特定のブラウザやOSの時だけ問題が起きる、など。
・問題の認識に齟齬がある。
→ 私の環境でも問題が再現しているが、私がそれを問題だと認識していない、など。
前者であれば、当方の環境は win10 の Chrome と Firefox でテストしています。環境が大きく違うようであればお知らせください。
後者であれば、問題の部分をスクリーンショットや動画などで提示していただければ、解決するかもしれません。
質問の変更を拝読。
やはり、問題が再現していないようです。
コピペでサンプルを書いてみました。
https://jsfiddle.net/Lhankor_Mhy/bftry415/
↑このページで問題は再現しますか?
そちらのページでは、問題は発生せずうまくいきました。
なぜでしょうか?
うーん、当方としては、ご提示のコードをコピペしただけなので、逆に「実際のコードとは何が違うのですか?」とお聞きしたいぐらい……
HTMLもCSSも、ご提示されているもの以外に一切ないのであれば、考えられそうなのは、
・JavaScriptの影響
・ユーザースタイルシートが効いている
・キャッシュが効いているなどして、最新のコードが読み込まれていない。
などでしょうか。
ああ、あとは、pjaxだともしかしたらそんな現象が起きるかもしれないですね。
同じコードをFireFoxで表示してみたら、うまくいきました!
よって、恐らくChromeに問題があるのだと思うですが、初心者ですので原因わかりません。
是非、ご教授の程よろしくお願いします。
まず、当方で問題が確認できないので、これ以上のことはどうしようもありません。
Chromeで問題を再現できるコードをご提示ください。
コードは、上述したのと同じです。
Chromeの設定をデフォルトに戻すなど、疑わしいことは全て試しましたが、うまくいかなかったのであきらめようと思います。
親切な対応、ありがとうございました。
私の環境では(バージョン: 81.0.4044.92(Official Build) (64 ビット))は再現します。
ただすぐには解決方法がわかりません。
今わかっているのは再現するパターンとしないパターンがあり。
HTMLに直接CSSを<script>タグなどで書くと再現しません。
このスレッド内に記載されたようにcssを外部ファイルにして<link>で読み込むと再現します。
分っているのはそれだけです。
追記。
ちょっとwebサーバに乗せて表示してみました。
サーバにファイルがある場合ではリフレッシュではこの現象は再現しませんでした。
ただ、スパーリフレッシュでは再現しますね。
元にしたサルワカさんのSANGOというサイトでは外部ファイルで読み込んでいても再現しないので
そこと比較してみても良いかと思います。
確かに、私の環境でもHTMLに直接CSSを書き込んだ場合では、問題は再現しませんでした。
正直、この問題は初心者の私には重すぎるので、別の方法でハンバーガーメニューを作ろうと思っています。ご回答ありがとうございました。
ただ、解決方法が分かった方は、いつでもよいのでご教授いただけるとありがたいです。
storm3さんのコメントを見て、ローカルサーバではなく、ローカルのfileスキームで実行してみたところ、Chromeで問題が再現しました。
なるほど……
ただ、ローカルサーバの場合、スーパーリロードをかけても再現しませんでした。
普通に考えて、CSSの読み込み中はレンダリングブロックがかかるはずですよね。これは、何なんだろう?
回答1件
あなたの回答
tips
プレビュー