1 ポイント 投稿者 GN⁺ 2023-07-18 | 1件のコメント | WhatsAppで共有
  • Firefoxデスクトップ版ユーザーにだけ表示されるブログのミニマップは、Firefoxの低い市場シェア 4% の中でも、ブラウザ専用CSS機能を実験した事例
  • 核心はFirefoxだけが対応する element() CSS関数で、実際の実装ではベンダープレフィックス付きの -moz-element() を使用
  • この関数は任意のHTML要素を画像のように表示しつつ、テキスト選択、スクロール、遅延読み込み画像の変化までリアルタイムに反映する
  • ミニマップの背景は #main DOMノードを background として描画するCSS 1行が担い、現在のビューポートボックスの移動にはJavaScriptも併用
  • Firefox専用機能を活用すると、別途Canvasレンダリングを行わずにページの一部をミニマップの背景として再利用できる

Firefox専用の element() ベースのミニマップ

  • ブログ記事のミニマップはFirefoxデスクトップ版ユーザーに表示される機能で、Firefoxの市場シェアは現在 4% と言及されている
  • Firefoxは CSS element() 関数 に対応する唯一のブラウザであり、実際の利用にはベンダープレフィックスが必要
  • element() 関数は、ページ内の任意のHTML要素を画像のように表示できる
    • 表示対象は静的なスクリーンショットではなく、ライブ画像のように動作する
    • テキスト選択や、スクロール中に遅延読み込み画像が表示される変化も反映される

実装方法

  • 別のHTML要素を背景画像として定義するCSSは次の形
mini-map .screen-image .canvas {
  background: white -moz-element(#main) no-repeat scroll center center / contain;
}
  • -moz-element(#main)#main DOMノードをミニマップの背景画像として描画する役割を果たす
  • ミニマップ内の現在のビューポートボックスの移動にはJavaScriptも使われるが、別のDOMノードを描画する核心はCSS 1行
  • Firefoxでは -moz-element を使って、ページの一部をミニマップのように表示できる

1件のコメント

 
GN⁺ 2023-07-18
Hacker Newsの意見
  • 10年前、DOM要素を紙のように折りたたむおもちゃのようなJSライブラリ https://oridomi.com を作ったが、折りたたむたびにノードを退屈に複製する代わりに element() が使えるようになることを期待していた。
    10年経った今でも、このニッチなCSS機能は他のブラウザに採用されておらず、同時期の CSSカスタムフィルター 仕様もすぐ使えるようになると思っていたのに、いまだに traction を得られていない。

    • ブラウザ開発者たちは、CSSカスタムフィルター仕様を見て 安全に実装するのが難しすぎる と判断したのだと理解している。
      一方では、安全にできないから機能を諦めるのは理解できるが、他方ではCSSカスタムフィルターを本当に欲しかったし、今でもそれでできたはずのことをよく思い出す。
      https://lists.webkit.org/pipermail/webkit-dev/2014-January/0...
  • ミニマップ付きのエディタを使うと、まず最初に オフにする
    コーディングではほぼ最も役に立たない機能で、サイトでも同じように役に立たなさそうだ。内容が小さすぎてどこへ行くのか把握しにくく、短いページでも長いページでも、画面スペースの損失や気の散りを受け入れるほどの利点がない。説明的なタイトルの付いたまともな索引や検索機能のほうが、ページ内ナビゲーションにははるかに優れている。
    ミニマップが映えるのは、大きな画像や地図のような本質的に視覚的な対象で、拡大したときに全体のどこを見ているか確認できる場合だ。未来的でクールな機能ではあるが、この実装はあまり優れているようには見えない。

    • オンにしている。マウスやトラックパッドのようなポインティングデバイスでスクロールするとき、より大きなスクロールバー のように機能する。
      最近のOSはスクロールバーを隠したりできるだけ小さくしたりしようとするが、ミニマップはその問題を解決しつつ、ファイル内容の視覚的な形も少し見せてくれる。テキストは読めないが、長く作業したファイルなら何を見ているのか正確に分かる。
    • まったく逆の使い方をしている。長いファイルをよく扱うので、ミニマップを ずっと優れたスクロールバー として多用している。
      じっと見ることは少なくても視界に入っているので、無意識にしょっちゅう目を走らせている。こういう機能が明らかに万人向けではないのは確かだが、気に入らないからといって役に立たないと考えるのは間違いだ。
    • 小さい文字を読もうとしているのではなく、コードの形 を見ようとしている。
      たとえばVSCodeはミニマップ内でエラーを赤く目立つように表示してくれるので、その場所へ移動しやすくなる。
    • ミニマップは、古典的なスクロールバーの プレビュー機能 を改善するのにも向いているかもしれない。
      スクロールバーはページの長さを教えてくれるので読み続けるか判断できるが、ミニマップは「短い記事の後ろに無視していいコメントが何ページも付いている場合」と「そもそも読むには長すぎる記事」を見分ける助けになる。
    • ミニマップはかなり好きだ。必須であるべきではないし、オフにしたくなる理由も完全に理解できる。場所をかなり取るし、ファイルを頻繁に分割表示する人にはかなり邪魔になりうる。
      ただ、自分はコードを 視覚的・空間的 に考えるタイプで、ファイルも必要になるまで分割しないので、ファイルの「形」を見て素早く移動する助けになる。特にファイルが明確なセクションに分かれているときはそうだ。
      大きな画像や地図についても同意する。ほとんどの画像エディタにはそうしたビューポート機能があり、細かな作業をするときかなり便利だ。
  • 用途は分かるが、かなり wild だ。テキストを選択すると リアルタイム更新 され、ほぼ同じコンテンツに向けた別個のビューポートのように見える。
    ユースケースや含意について考えているところだが、offscreen や overflow:hidden のトリックで隠された要素にも動作させられる。とはいえ、知る限りライブラリなしでその要素を画像に変換する方法はまだなく、おそらくプライバシー保護のためだろう。
    MDNのページがかなり短いので疑問が多い。CSSフィルターや歪みを要素に直接適用できるのだろうが、これが背景のように扱われることで新しい可能性が開けるのだろうか。かなり前から存在していたのに初めて聞いたし、こういう機能がCSS候補に入っているとは思わなかった。Firefoxだけを対象にしてChromeは気にしないとした場合、ビューポート複製以上の用途がどれほどあるのか気になる。

    • 鏡、虫眼鏡、画面外にあるページの一部を常に表示し続ける機能など、面白い使い道 がかなりありそうだ。
      たとえば編集用途にも使えるし、見落としているユースケースも多そうだ。根本的に必須の機能ではないが、それぞれなりにクールではある。
  • 毎日 Chromeでしか動かないサイト に出くわす。そろそろ反撃の時間だ :)

    • Firefoxだけを使ってごく普通にWebを閲覧しているが、そんなことはほとんどない。月に1回よりずっと少なく、おそらく3か月に1回くらいだ。
    • 地域的な現象だろうか? 自分には非常にまれだ。ただし、定期的に使う一部の Googleサイト はFirefoxでChromeより動作が悪い。
    • Firefoxで、MacでもLinuxでも一部のチェックボックスがまったく表示されない問題があった。
      先月American航空の国際線チェックインをしていたとき、Firefoxでは必要なチェックボックスが表示されずチェックイン手続きを完了できなかったが、Chromeでは見えると分かってようやく進めた。
    • そういうサイトに出会うと腹が立つ。特に 2023年にもなって言い訳の余地はない
      Vanguardのより obscure なページでコンソールエラーが出て壊れるのを経験し、Chromeに切り替えると動いた。
    • その通り。昔の Firefoxを妨害するオープンソースのサボタージュ に関する噂や事実を思い出す。
      Firefoxで問題なく動いていたページが今では動かないことをよく目にし、時々ほかのブラウザを起動しなければならない。本当にそういうことではないと願っている。デフォルトではFirefoxを使っている。
  • Firefoxではelement()が2011年から-moz-付きで完全にサポートされていたのに、他のブラウザでは部分的なサポートすらないようで驚いた https://caniuse.com/css-element-function
    クロスブラウザ対応さえあれば、ミニマップ以外にもいくつか強力なユースケースが思い浮かぶ。ChromeやWebKitチームにつながりのある人がいたら、その理由が気になる。単に関心が薄いのか、性能よく実装するのが難しいのか、厄介なセキュリティ問題があるのか知りたい

  • ミニマップもかわいいが、タブを3分間idle状態にしておくと起動するスクリーンセーバーのほうがもっと面白い
    Webにまだこういう遊び心が残っているのがうれしい

  • これは、右クリックでの画像保存やテキスト選択のようなブラウザの基本機能をわざと壊すサイトにひどく悪用されそうな機能に見える
    ページ全体を背景画像としてレンダリングしてしまえば、コンテンツを検査したり保存したり翻訳したりできなくなる。これは最初に思いついた例にすぎず、この関数で読者を困らせる悪質なやり方はいくらでもありそうだ

    • 悪用されそうだという点には同意するが、挙げられている例は当てはまらない。そうした機能は、すでにごく少量のCSSやJSだけでも防げるので、elementキャンバスで複雑にやる必要はない
      たいていのWebサイトがそんなことをしない理由は、能力がないからではなく、実際にそうする気がないからであり、ひどいWebサイトには人々が競合へ離れていくという経済的な罰が伴う
      ただし、企業のイントラネットポータルやひどい地方自治体サイトのように自由市場ではない領域では、この原理はあまり機能せず、ユーザーに敵対的なものがより頻繁に現れる。一般に、Webサイト運営者を意図的に制約すればWebサイトの質が上がると考えるのは誤りで、実際には逆だ
  • 長い記事でミニマップがどれほどうまく動くのか印象的だ。適当にクリックしていたら https://www.stefanjudis.com/notes/should-responsive-images-w... にたどり着いたのだが、ミニマップが即座に表示され、テキスト選択のような操作にも同期して更新されて、ちょっと魔法のように感じる
    Sublime Textのようにミニマップを操作してスクロールできないのは少し残念だが、Webサイト作者の立場では実装がもっと難しそうだ。それでも、Webでこういうことができるのはとてもすごいし、この複雑なCSS機能をChromeやSafariでサポートするにはどれほどの作業が必要なのか気になる

    • 不思議なことに原文ではちゃんと見えるのに、この記事では見えない。拡張機能のせいかもしれない?
  • GPUとChromeの動画デコードの間に妙な非互換があって、この1年はFirefoxを使ってきた
    フレームドロップが起きて、YouTubeの画質も下がった。Firefoxでは本当に良いWeb翻訳機がないこと以外、大きな問題は感じていない。-moz-elementはよさそうだし、他のブラウザにも来てほしい

    • Operaが事実上終わってからFirefoxを使い続けているが、この3〜6か月はVivaldiを本気で使おうとしていた
      主な理由は、フォルダを見るだけでプロファイルを見つけられるポータブル版を標準提供していて、同期にとても便利だからだ。だが遅すぎる。CPUを食いまくるメールやフィードを切っても速くならず、Firefoxに戻って整理してみるとあまりに軽快で、normaldevmediaの3つのプロファイルとブックマークで残りを処理するほうがよいと思った
      VivaldiのUIオプションと設定可能性はすばらしいが、Tree Style Tabsやいくつかのアドオン、UIのCSSハックまで加えると、またFirefoxをメインブラウザにして、何事もなかったかのように振る舞っている
      ただ、Firefoxにはコンパイル済みWebGLシェーダーをキャッシュしてほしい。その点だけはChromeが圧倒している。設定で調整できるのかもしれないが確認はしておらず、デフォルト状態ではシェーダーの多いページを再読み込みすると、Chromeはモバイルでもほぼ即座に終わる一方、Firefoxはシェーダー次第で時間がかかることがある
  • これからは「Chrome/Edgeで最もよく動く」ではなく、Firefoxで最もよく動くを見られるなら悪くないと思う