JavaScriptを使用したSvelteの強化
我々はすべての“モバイル最初の”デザインについて聞いたが、JavaScriptの最後の?それは本当に固執するためにcatacher名を必要とするでしょう、しかし、JavaScriptが無効になったか、失敗したとしても、基本的なサイト機能が働くのがどれくらい重要かについて、我々の多くは無視します.JavaScriptを無効にすると、Webを閲覧する本当の痛みをすることができますが、それはあなたが期待するより多くの発生します.
私の信頼Kobo Aura H20 しかし、JavaScriptが無効にされ、率直にハードウェアが近代的なJSヘビーサイトを処理することができる方法はありません.ニューヨークの地下鉄に乗るとすぐにどのようにあなたのセルの信号をどのようにspottty実現することができますし、どのようにサイトが壊れたマークアップロードされますが、JavaScriptの1.3 MBの接続が終了する前に終了していないでしょう.
TLドクターClick here の例ではSvelte REPL . またはこのサイトのメニューを試して-あなたのJavaScriptを無効にし、モバイルビューを取得するには、ウィンドウを縮小すると、メニューはまだ動作します!
モバイルメニューを壊すな
The hamburger menu まだ良いか悪いかのモバイルナビゲーションデザインの王です.隠されたメニューを使用すると、最後にしたいのは、お客様のサイトを回避することができなくなっているので、彼らは無効にJSを選択するためです.さらに悪いことに、あなたのサイトがあなたのJavaScriptを完全に壊すかもしれない取り扱われていない例外を打つならば.
メニューはほぼ確実にインターフェイスされ、デザインとアニメーションを優先させる.キーは、HTMLとCSSだけで動作するようにあなたのメニューを構築することです.あなたのJavaScriptは、CSSでよくできない通知バッジまたはアニメーションのようなものでメニューを強化しなければなりません.
例に学ぶ
我々は、これがどのようにすることができるかについて見ますSvelte , しかし、同じ概念を任意のフレームワークに適用することができます.
先に行って作業例を試してみてください.一旦スクリプトがロードされるならば、メニューはSvelteのものを利用しますslide 遷移あなたのブラウザーでJSを無効にしてください、そして、我々のメニューはまだ動きます-それは動き出しません、しかし、訪問客は開いて、どんな問題も回避できません.
Svelteの基本的なヘッダー
メニューなしで表示
HTMLチェックボックスには擬似セレクタがあります:checked , CSSからメニューを表示/非表示にしましょう.
両方の世界の最高
何を待ちますか.
一歩一歩壊しましょう.
最初に
また、2番目のブールフラグを追加しました
最後に、CSSは、チェックボックスが持っていない限り、メニューの表示を変更するように更新されました
ボーナスポイント
スベルトuse:action 機能は、これを少し再利用できるように使用することができます.アクションは自分の完全なブログ記事に値するが、短い
チェックアウトREPL example 作業例のカスタム
私の信頼Kobo Aura H20 しかし、JavaScriptが無効にされ、率直にハードウェアが近代的なJSヘビーサイトを処理することができる方法はありません.ニューヨークの地下鉄に乗るとすぐにどのようにあなたのセルの信号をどのようにspottty実現することができますし、どのようにサイトが壊れたマークアップロードされますが、JavaScriptの1.3 MBの接続が終了する前に終了していないでしょう.
TLドクターClick here の例ではSvelte REPL . またはこのサイトのメニューを試して-あなたのJavaScriptを無効にし、モバイルビューを取得するには、ウィンドウを縮小すると、メニューはまだ動作します!
モバイルメニューを壊すな
The hamburger menu まだ良いか悪いかのモバイルナビゲーションデザインの王です.隠されたメニューを使用すると、最後にしたいのは、お客様のサイトを回避することができなくなっているので、彼らは無効にJSを選択するためです.さらに悪いことに、あなたのサイトがあなたのJavaScriptを完全に壊すかもしれない取り扱われていない例外を打つならば.
メニューはほぼ確実にインターフェイスされ、デザインとアニメーションを優先させる.キーは、HTMLとCSSだけで動作するようにあなたのメニューを構築することです.あなたのJavaScriptは、CSSでよくできない通知バッジまたはアニメーションのようなものでメニューを強化しなければなりません.
例に学ぶ
我々は、これがどのようにすることができるかについて見ますSvelte , しかし、同じ概念を任意のフレームワークに適用することができます.
先に行って作業例を試してみてください.一旦スクリプトがロードされるならば、メニューはSvelteのものを利用しますslide 遷移あなたのブラウザーでJSを無効にしてください、そして、我々のメニューはまだ動きます-それは動き出しません、しかし、訪問客は開いて、どんな問題も回避できません.
Svelteの基本的なヘッダー
<script>
import { slide } from 'svelte/transition'
let menuOpen = false
</script>
<header>
<div class="header__top">
<h1>Navillus</h1>
<button on:click={() => menuOpen = !menuOpen}>
☰
</button>
</div>
{#if menuOpen}
<nav transition:slide>
<!-- NAV LINKS GO HERE -->
</nav>
</header>
何もまだここに行く狂気.あなたがよく知らないならばSvelte , transition:slide
エントリと終了アニメーションを<nav>
要素.メニューなしで表示
HTMLチェックボックスには擬似セレクタがあります:checked , CSSからメニューを表示/非表示にしましょう.
<header>
<div class="header__top">
<h1>Navillus</h1>
<label for="toggle">☰</label>
</div>
<input id="toggle" type="checkbox" class="sr-only"/>
<nav>
<!-- NAV LINKS GO HERE -->
</nav>
</header>
<style>
#toggle ~ nav {
display: none;
}
#toggle:checked ~ nav {
display: block;
}
</style>
何が正確にそこに起こっている?Aの代わりに<button>
がある<label>
チェックボックスに接続します.CSSでnav
要素はデフォルトで隠され、チェックボックスが:checked
.両方の世界の最高
<script>
import { onMount } from 'svelte'
import { slide } from 'svelte/transition'
let menuOpen = true
let mounted = false
onMount(() => {
menuOpen = false
mounted = true
})
</script>
<header>
<div class="header__top">
<h1>Navillus</h1>
<label for="toggle">☰</label>
</div>
<input id="toggle" type="checkbox" class="sr-only" class:js={mounted} bind:checked={menuOpen} />
{#if menuOpen}
<nav>
<!-- NAV LINKS GO HERE -->
</nav>
{/if}
</header>
<style>
#toggle:not(.js) ~ nav {
display: none;
}
#toggle:not(.js):checked ~ nav {
display: block;
}
</style>
何を待ちますか.
一歩一歩壊しましょう.
最初に
menuOpen
が最初にtrueに設定され、SvelteonMount ライフサイクルフック.Onmountが呼ばれるならば、我々はJavaScriptサポートをして、メニューを強化することができます.また、2番目のブールフラグを追加しました
mounted
, とclass:js={mounted}
我々は、svelteを追加するにはjs
コンポーネントのスクリプトがマウントされたら、チェックボックスにクラスします.最後に、CSSは、チェックボックスが持っていない限り、メニューの表示を変更するように更新されました
js
クラス.これは、JavaScriptがマウントされてSvelte ' sが表示されるまで、CSSをショー/非表示の機能を扱うようにしましょうslide
移行は、メニューをアニメーション化する準備ができています.Oops! It's very easy to inadvertently create accessibility bugs. When manually testing I realized the hidden checkbox wasn't binding to our
menuOpen
state in svelte. The code block above was updated June 2, 2021 to includebind:checked={menuOpen}
to make sure keyboard users can toggle the menu after Svelte hydrates.
ボーナスポイント
スベルトuse:action 機能は、これを少し再利用できるように使用することができます.アクションは自分の完全なブログ記事に値するが、短い
action
Svelteでは、HTMLノードを使用して呼び出されるマークアップを追加できます.チェックアウトREPL example 作業例のカスタム
enhance
アクションmounted
and onMount()
上記の論理.Reference
この問題について(JavaScriptを使用したSvelteの強化), 我々は、より多くの情報をここで見つけました https://dev.to/navillusbv/progressively-enhancing-svelte-with-javascript-db4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol