Darko Z が以下で述べたように、このちらつきの理由は、ブラウザーが#contact-drawer
要素をレンダリングしてから JavaScript コードを実行するまでに遅延があるためです。ブラウザーは、CSS と HTML によって指示されたとおりに要素を表示します。その後、ドキュメントの解析 (DOM 準備完了) が完了し、JavaScript がトリガーされたことを示します。
これを修正するにはいくつかの方法があります (互換性が異なります)。基本的に、要素のレンダリングと DOM の準備が整うまでの間に、またはその前にコードを解釈する必要があります。
JavaScript でパッチを適用するには、要素の直後にインライン スクリプトを追加して、要素の表示を非表示に設定できます。このコードは、DOM の準備ができたときではなく、ページが解釈されるとすぐに実行されます。これがアクセシビリティの点で最も簡単で安全な方法だと思います。
プレーンな JavaScript:
<section id="contact-drawer"></section>
<script>document.getElementById('contact-drawer').style.display = 'none';</script>
またはjQueryを使用:
<section id="contact-drawer"></section>
<script>$("#contact-drawer").hide();</script>
純粋な CSS で修正するには、要素の表示プロパティを「なし」に設定します。このソリューションでは、JavaScript が無効になっているとフォームにアクセスできないことに注意してください。
CSS
#contact-drawer {
display:none;
}
CSS で修正し、JavaScript が無効になっているときに作業ページを維持するには、追加の:target
CSS セレクターを使用して、リンクと JavaScript を少し変更することができます。ターゲット セレクターは、古いブラウザーと 100% 互換性があるわけではありませんが、上記のプレーンな CSS バージョンよりもアクセスしやすくなっています。
CSS
上記と同じスタイルを追加し、selector で block にコピー設定表示を追加します:target
。これにより、http://zarin.me/#contact-drawerに移動すると、:target スタイルがアクティブになり、 #contact-drawer が表示されます。
#contact-drawer {
display:none;
}
#contact-drawer:target {
display:block;
}
HTML
アンカー href を から#
に変更して、リンクをクリックするとセレクター#contact-drawer
がアクティブになるようにします。:target
<h3 class="contact">
<a href="#contact-drawer" class="toggle-drawer" style="">
<img src="img/envelope.png">
CONTACT
</a>
</h3>
JavaScript
関数の最後に追加して、がクリックされたときreturn false
にブラウザーがナビゲートする(およびセレクター#contact-drawer
をアクティブにする) のを停止します。:target
.toggle-drawer
$('.toggle-drawer').click(function(){
$("#contact-drawer").slideToggle();
return false;
});