ぎみっく@gimmickgang
-
721
ななしのよっしん
2023/04/28(金) 23:26:09 ID: t8iAHHP7AI
-
722
ななしのよっしん
2023/07/10(月) 00:18:55 ID: 1GYNunEedb
-
「ソフトウェアトーク劇場のシリーズ一覧」を編集してくださりありがとうございます。
「【百チャレ】スマートフォンから記事が綺麗に見られるように編集しよう2023」にて教えてくださったレイアウトの再計算の仕様について確認したいことがあるのですが、よろしいでしょうか。
私はCSSを十分に理解できていないため、おかしな発言をしているようであれば申し訳ありません。
ぎみっく様の説明について、loading属性を用いた場合でも、画像が読み込まれるまでの間はalt属性に設定されたテキストの表示が優先されるため、レンダリング中にレイアウトの再計算が発生することに変わりはなく、max-widthであらかじめ要素の最大幅を設定しておくことによりサイズを固定すれば、それを回避できる、というように私は理解しました。
-
👍1高評価👎低評価
-
723
ななしのよっしん
2023/07/10(月) 00:31:20 ID: 1GYNunEedb
-
👍1高評価👎低評価
-
724
ななしのよっしん
2023/07/10(月) 01:18:10 ID: 1GYNunEedb
-
👍1高評価👎低評価
-
725
ななしのよっしん
2023/07/10(月) 02:00:11 ID: t8iAHHP7AI
-
👍1高評価👎低評価
-
726
ななしのよっしん
2023/07/10(月) 02:25:03 ID: t8iAHHP7AI
-
そして、その小さくなった部分から遅延読み込み部分に対応して再度のレンダリング計算がブラウザ側で発生することにより、途中での表のズレが起こります。
遅延読み込み部分が独自のjavascriptによる動作なのは主要各ブラウザがloading属性に完全対応していなかった頃から遅延読み込みを採用していたからで、
挙動としては
・初期状態ではsrcは空 data-srcとして保持
・width、heightは200×200として一旦レンダリング
・width属性、height属性およびstyle属性でのwidth、heightがある場所は上記の200×200を上書きしたサイズで一旦レンダリング
・img画像にalt属性、title属性が付与されている場合、画像代替のalt、titleの表示が優先
(これは、alt、titleに対して遅延処理では無操作のため)
という動作になっています。
(※記事内に貼られた最初のimgタグ画像に対しては、この遅延操作は行われず除外対象になっています) -
👍2高評価👎低評価
-
727
ななしのよっしん
2023/07/10(月) 02:39:18 ID: t8iAHHP7AI
-
そして、スマホ版独自の仕様によりimg画像に対してはmax-width: 100%;が付与されることにより、
固定してある幅での表示のはずなのに文字列に置き換わった状態で横幅が変化するので途中での再レンダリングによりズレが発生しています。
この代替文字列は文字列なので指定したフォントサイズやword-breakなどの影響を受けます。
ご指摘される通り、一旦画像が読み込みに失敗した状態を意図的に作り出しているので、loading属性での挙動とは若干異なります。
loading属性自体もブラウザ間でまだ仕様が統一されていない部分もあり、読み込み完了前に代替文字列を表示する/しないの部分も統一されていなかったりバージョンによって変わったり…と、一概に言えないところもあります。 -
👍2高評価👎低評価
-
728
ななしのよっしん
2023/07/10(月) 03:32:44 ID: t8iAHHP7AI
-
もともとimgタグの画像はiflameタグと同様に置換要素なのですが、上記のような形となっているためにこのようなことが起こってます。
外部での例、ありがとうございます。
インライン要素のspanタグと置換要素のimgタグでの表示の違いが分かりやすいですね。他の方にも伝わりやすいと思います。
ご提示頂いた例でも確認できるかと思いますが、spanタグとimgタグでは折り返し不可能なときの文字の表示が異なりますよね?
私ができますよと言ってたようにwidth、max-widthで明示してやるとはみ出し部分は表示されないのでサイズが固定されるのですが、それはそれで見切れることなってしまいますが…。
さて、スマホへの対応について主眼を移しますと、
公式ブロマガでも遅延読み込みがloading属性へと変更になる改修予定とのアナウンスがされましたが
loading属性のみでの実装だと、最初に挙げさせていただいた200×200で一旦仮レンダリングでサイズ確保しておくような処理がなくなるので
今度はPC版も含めた大百科全体でheightが一旦0で計算されてからの遅延読み込みによる再計算が起こるので、縦のズレが大きく発生してしまいます。
これを、回避するためにwidth、heightを明確に入れると
スマホでmax-width: 100%;の影響により画像の縦横比が変わってしまう例が散見されることになり、運営どうするんだろ?って思っています。
aspect-ratioプロパティが解禁されれば…とも思いますが、loading属性による遅延読み込み時の読み込み前の状態ではwidthとheightで明確に指定していないと反映されないので、
javascriptで読み込み完了前を判定してwidth属性、height属性、style属性のwidth、height関連から縦横比算出してheightを仮置きする…みたいなすこく面倒くさいことをしなきゃいけないような…本当にどうするんだろ???
…話がそれましたが、コメントいただきありがとうございます。
私も不勉強なことばかりなので、またご教示いただけたらと思います。
また、ニコニコ大百科はHTML、CSSに不慣れな方も編集されますので、そういった方々も編集しやすいようになるべく簡単な方法で表示できるようにできたらいいなと思っているので、お知恵をお貸しいただけたらと思います。 -
👍2高評価👎低評価
-
729
ななしのよっしん
2023/07/10(月) 09:19:59 ID: t8iAHHP7AI
-
ってごめんなさい。
マヨネ~ズさんが提示してくださった例も、私が提示した話もそもそも、ブラウザ間のレンダリングの差異の部分が抜けていましたね。
FireFoxのGeckoエンジンとChromeのBlinkエンジン、SafariのWebkitエンジンでは、そもそもこの文字列として扱っているときの部分に差異が出ます。
分かりやすいようにFireFoxとChromeの両方で、マヨネ~ズさんの挙げてくださった例を見比べると、
双方が言及していたことが理解しやすいかと思われます。
画像の代替なので画像を読み込めなかったとき画像の指定範囲を越えても全部表示しなきゃいけない→FireFox
画像の代替なので画像を読み込めなかったとき画像の指定範囲内におさめなきゃいけない→Chrome
と根本的に別の表示になることがレンダリングエンジンの解釈の差異によって発生しています。
どちらが正しいのかは…どちらも解釈としては正しいので、解釈の不一致でしかないのですが…。
現状の限られた範囲の中で妥協できる範疇において、他の方にも編集しやすい形にするのがベストかなと個人的には。 -
👍2高評価👎低評価
-
730
ななしのよっしん
2023/07/11(火) 00:34:22 ID: 1GYNunEedb
-
>>725-729
わかりやすく説明してくださりありがとうございます。
よろしければ、loading属性のみでの実装では不具合が発生する旨について、一つ確認したいことがありますがよろしいでしょうか。
「heightが一旦0で計算されてからの遅延読み込みによる再計算が起こる」という表現をなされていますが、HTML Living Standardを再度確認したところ、lazy設定時は、読み込み前であればwidth、heightなどの設定が要素サイズに適用されるため、閲覧中にネットワークが切断されるようなことがない限り、そのようなズレは発生しないように思えました。
https://html.spe c.whatwg .org/mul tipage/i mages.ht ml#parsi ng-a-siz es-attri bute 
>現状の限られた範囲の中で妥協できる範疇において、他の方にも編集しやすい形にするのがベストかなと個人的には。
私としては、とりあえずoverflow: hidden;を設定したブロック要素で囲んでおくのがベターかと勝手に考えています。
display: inline-block;が使用できれば、レイアウトへの影響を最小限に抑えつつ対策できますが、なかなか難しいところです。 -
👍2高評価👎低評価
-
731
ななしのよっしん
2023/07/11(火) 00:52:49 ID: 1GYNunEedb
-
実際にこちらの端末でGecko、Blinkを用いて確認したところ、以下のような結果になりました。
HTMLについては、こちらのソースコードをテキストエディタにコピーして、適当な場所に保存してから開いてください。
https://pastebin .mozilla .org/zPN PF8Cu 
Vivaldi 6.1.3035.111
スクロール前
ID 0 = 160x32, ID 1 = 50x100, ID 2 = 50x10, ID 3 = 160x16, ID 4 = 50x10
下方までスクロールした後
ID 0 = 160x32, ID 1 = 160x32, ID 2 = 50x10, ID 3 = 160x16, ID 4 = 50x10
Firefox 102.13.0esr
スクロール前
ID 0 = 160x17, ID 1 = 50x100, ID 2 = 50x10, ID 3 = 160x17, ID 4 = 50x10
下方までスクロールした後
ID 0 = 160x17, ID 1 = 160x17, ID 2 = 160x17, ID 3 = 160x17, ID 4 = 50x10 -
👍1高評価👎低評価
-
732
ななしのよっしん
2023/07/11(火) 01:12:18 ID: 1GYNunEedb
-
すみません。width、heightなどによるサイズ指定がない場合の話であることを見落としていました。
変なことを書いてしまいすみません。
現在のJavaScriptによる遅延読み込みの実装ですと、「VOICEROID」の記事のように、記事冒頭に複数の画像が掲載されており、最初からimg要素がビューポートに入っている場合に、一旦全体がレンダリングされてから二つ目以降の画像の読み込みが始まります。
そのため、loading属性による遅延読み込みの実装に切り替えたほうがレンダリング速度を改善できるのではないかといった考えもあり、以前に問い合わせをしていました。
width、heightなどによるサイズ指定がない場合の対応を完全に失念していたことを謝ります。
-
👍1高評価👎低評価
-
733
ななしのよっしん
2023/07/11(火) 02:25:33 ID: t8iAHHP7AI
-
👍2高評価👎低評価
-
734
ななしのよっしん
2023/08/25(金) 07:51:52 ID: l/cLr58M3B
-
👍0高評価👎低評価
-
735
ななしのよっしん
2023/08/25(金) 08:13:28 ID: t8iAHHP7AI
-
👍1高評価👎低評価
-
736
義陣華
2023/09/20(水) 18:04:00 ID: dV+MVV69Bz
-
737
ぎみっく
2023/09/20(水) 19:13:10 ID: t8iAHHP7AI
-
👍0高評価👎低評価
-
738
ななしのよっしん
2024/06/02(日) 02:09:42 ID: H7hqenPHlq
-
エジソンの記事ちゃんと作れ
-
👍1高評価👎低評価
-
739
ななしのよっしん
2024/09/19(木) 23:45:22 ID: YdJB2+RAWI
-
740
ぎ
2024/09/20(金) 16:20:48 ID: t8iAHHP7AI
-
👍0高評価👎低評価
-
741
ラーメンとチャーハン食べた奴
2025/03/24(月) 22:54:04 ID: YOY6ulTlIP
-
742
ぎみっく
2025/03/24(月) 23:01:17 ID: t8iAHHP7AI
-
👍1高評価👎低評価


