Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

画像表示を最適化してレイアウトシフトを防ぐ #508

Closed
gaaamii opened this issue Aug 23, 2023 · 1 comment
Closed

画像表示を最適化してレイアウトシフトを防ぐ #508

gaaamii opened this issue Aug 23, 2023 · 1 comment

Comments

@gaaamii
Copy link
Owner

gaaamii commented Aug 23, 2023

ブログ記事内の画像表示によるレイアウトシフトを防ぎたい。

現状

118ba27d660d12e77bb65b24de717d10.mp4

画像表示の領域が確保されておらず、ガクッとする。

どうしたいか

ガクッという感じがなくしたい。

どうするか(ざっくり)

瞬時に画像枠の幅と高さを確保する。

どうするか(詳しく)

どうやら最新のベストプラクティスとしては、width属性とheight属性を指定するだけで良いらしい。

現在HTMLの出力はreact-markdownというライブラリでやっているので、このコンポーネントのcomponents propsにimgのものを追加し、そこにwidthとheightが入るようにする必要がある。ただ、ソースコードの時点ではもちろん画像のアスペクト比はわからない。どうしたものか。

検索すると、以下の記事が参考になりそう(ありがたや)。

Next.js で Markdown 中の画像を next/image に対応させる

こちらの記事だと、画像のサイズを取得する処理をrehypeプラグインに書いている。rehypeはHTMLを入力としてHTMLを出力するようなもので、今回の場合だとimgのwidthとheightを差し込むことがこれによって可能になるようだ。

上記の記事にもあるように、画像のサイズを取得するには https://github.com/image-size/image-size というライブラリが使えそう。https://github.com/image-size/image-size#using-a-url を見るとURLからサイズを取得する方法がわかる。

でもあれだな、そのまま書くとwidthとheightの取得を待ってくれないな。rehypeプラグインの処理を待つことはできないだろうか。

参考

@gaaamii
Copy link
Owner Author

gaaamii commented Aug 25, 2023

done by #512

@gaaamii gaaamii closed this as completed Aug 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant