#4 2020年11月にツイートしたHTML/CSS/JavaScriptのTipsまとめ
2020 年 11 月にツイートした HTML/CSS/JavaScript のツイートまとめです。見出しをクリックするとツイート元に遷移するので、気に入ったらフォロー・ファボ・リツイートお願いします。
input[type="date"]
1.input[type="date"]
がモダンブラウザで使えるようになりました。対応ブラウザを見る限り、まだしばらくはライブラリを使うのが良さそうですが。
<input type="date">
:is()セレクタ
2.:is()
セレクタを使うとセレクタを列挙する必要がなくなり、簡潔に記述できます。
/* 3層(以上)の順序なしリストに四角形を使用 */
ol ol ul, ol ul ul, ol menu ul, ol dir ul,
ol ol menu, ol ul menu, ol menu menu, ol dir menu,
ol ol dir, ol ul dir, ol menu dir, ol dir dir,
ul ol ul, ul ul ul, ul menu ul, ul dir ul,
ul ol menu, ul ul menu, ul menu menu, ul dir menu,
ul ol dir, ul ul dir, ul menu dir, ul dir dir,
menu ol ul, menu ul ul, menu menu ul, menu dir ul,
menu ol menu, menu ul menu, menu menu menu, menu dir menu,
menu ol dir, menu ul dir, menu menu dir, menu dir dir,
dir ol ul, dir ul ul, dir menu ul, dir dir ul,
dir ol menu, dir ul menu, dir menu menu, dir dir menu,
dir ol dir, dir ul dir, dir menu dir, dir dir dir {
list-style-type: square;
}
これは以下のように簡略化できます。
/* 3層(以上)の順序なしリストに四角形を使用 */
:is(ol, ul, menu, dir) :is(ol, ul, menu, dir) ul,
:is(ol, ul, menu, dir) :is(ol, ul, menu, dir) menu,
:is(ol, ul, menu, dir) :is(ol, ul, menu, dir) dir {
list-style-type: square;
}
:is()
に対応していなくても、:-webkit-any()
や :-moz-any()
、:matches()
を使えばモダンブラウザでは使えます。
文字を等幅に
3.等幅でないフォントの数字部分を等幅に揃えられます。カウントアップのアニメーションなどで横幅が変わるのを防いだりできます。
.tnum {
font-variant-numeric: tabular-nums;
font-feature-settings: 'tnum';
}
OpenType フォントの拡張機能なので、フォント自体に tnum
が設定されていなければ使えません。
グラデーション文字
4.Apple の Web サイトでも使われているおしゃれなグラデーション文字の作り方です。
<h2>そのコンピュータは、コンピュータの先を行く。</h2>
h2 {
color: transparent;
font-size: 4em;
background-image: radial-gradient(
circle at 100% 100%,
#6b16a7 1%,
#2c318c 5%,
rgba(255, 255, 255, 0) 20%,
rgba(255, 255, 255, 0)
),
radial-gradient(
circle at 0% 80%,
#d00c3a 20%,
#178ee2 55%
);
-webkit-background-clip: text;
background-clip: text;
}
radial-gradient()
関数を複数組み合わせておしゃれなグラデーションを描画し、background-clip: text;
で文字の背景部分だけくり抜いています。
美しいメニューバー
5.Apple の Web サイトで使われている美しいメニューバーは backdrop-filter
と blur()
関数でただぼかすだけでなく、saturate()
関数を使って調整もしています。
nav {
backdrop-filter: saturate(180%) blur(20px);
}
stickyの状態を検知
6.position: sticky;
を使った際、要素が固定されたときを検知するテクニックです。
<div class="sticky">...</div>
.sticky {
position: sticky;
top: 0;
}
const observer = new IntersectionObserver(
([event]) => event.target.classList.toggle('is-sticky', event.intersectionRatio < 1),
{rootMargin: '-1px 0px 0px', threshold: [1]},
)
observer.observe(document.querySelector('.sticky'))
sticky ライブラリでは固定されたときにイベントが用意されていますが、標準の position: sticky;
では用意されていないため、IntersectionObserver
を使っています。
resizeやscrollイベントの負荷軽減
7.resize
や scroll
イベントの負荷軽減には、setTimeout()
よりも requestAnimationFrame()
を使った方がいいかもしれないです。
const debounce = (fn, time = 60) => {
let timeout
return (...args) => {
clearTimeout(timeout)
timeout = setTimeout(() => fn.apply(this, args), time)
}
}
widow.addEventListener('resize', debounce(event => {
console.log('debounce setTimeout()', event)
}))
const debounce = fn => {
let timeout
return (...args) => {
window.cancelAnimationFrame(timeout)
timeout = window.requestAnimationFrame(() => fn.apply(this, args))
}
}
widow.addEventListener('resize', debounce(event => {
console.log('debounce requestAnimationFrame()', event)
}))
requestAnimationFrame()
だと別タブに移動したときに実行されないようになったり、他の処理の割り込みがあってもレンダリングが遅延することなく適切なタイミングで実行されます。
ピクセルパーフェクト
8.Twitter 上で話題になったピクセルパーフェクトについて、海外の記事が書かれていたので要約すると、ピクセルパーフェクトはデバイスやブラウザによってレンダリングが微妙に異なるため現実的には不可能とのことです。
Webアクセシビリティ
9.
Checka11y.css
10.Checka11y.css は CSS を読み込むだけでアクセシビリティの問題点を表示してくれるライブラリです。
Plyr
11.Plyr はアクセシブルでカスタマイズ性にも富んだ動画プレイヤーを作成できるライブラリです。
Cleave.js
12.Cleave.js は input
要素に入力できる値を特定の形式に限定できるライブラリです。
Dexie.js
13.Dexie.js は IndexedDB ストレージを扱いやすくしたライブラリです。
jsdiff
14.jsdiff はテキストの差分を取得できるライブラリです。
graphery
15.graphery は SVG をヒューマンリーダブルなコードで実装できるライブラリです。
XRegExp
16.XRegExp は正規表現の構文を大幅に拡張して使いやすくしたライブラリです。
spacetime
17.spacetime は時刻から特定の地域の現地時間を算出できるライブラリです。
NoSleep.js
18.NoSleep.js は iOS や Android ブラウザで閲覧中にスリープさせないようにできるライブラリです。
japanese-addresses
19.japanese-addresses は全国の町丁目レベル(189,540件)の住所データです。
Tabler Icons
20.Tabler Icons は 900 種類以上のカスタマイズ可能なアイコン集です。
Simple Icons
21.Simple Icons は 1700 種類以上の SVG 製ブランドアイコン集です。
SvgPathEditor
22.SvgPathEditor は Web ページ上で SVG のパスを編集できるオンラインジェネレーターです。
imagemaps
23.imagemaps はイメージマップを簡単に作れるオンラインジェネレーターです。
patternico
24.patternico はシームレスパターンを作れるオンラインジェネレーターです。
Dev Fonts
25.Dev Fonts はコーディングにぴったりのフォントを探せるオンラインサービスです。
Discussion