2023-12-18

CSSってプログラミング言語以上に厄介な「癖」がありませんか?

たとえばulフレックスコンテナとして、その子要素liの子要素imgに対してmax-width:100%をかけていたとします。

デフォルトだと、imgを内包したliがulの中で横並びになり、さらにliの横幅は自動的に親要素の横幅をliの個数で割った分だけ縮小されますが、ここでflex-wrapにwrapをかけると、imgで表示する画像サイズがある程度大きいと、wrapとしないときよりもliごと大きく表示されます

しかしliの横幅はそもそも指定していなくて、しかもその子要素のimgに対してmax-width:100%をかけているということは、そのcss指定意味論理的日本語で表すならば、imgはliの大きさを基準にその100パーセント分の大きさで表示しろという意味指定になると思います

しかしその基準であるliの大きさを定めていないのだから、imgの大きさも定まりようがないというのが論理的解釈だと思います

それでも実際はwrapをかけるかかけないかでそれぞれ一意的にある大きさでimgが表示されるわけです。

ようするにcssはそこに記述されているプロパティの兼ね合いで最終的にある要素がどういう風に表示されるのか、その挙動を理詰めで予測するのが困難な部分があって、それはプログラミング言語よりもある種厄介な癖として立ちはだかっているように思います

上記の例の場合も理詰めで挙動予測するには、プロパティ性質に関する論理的情報が不足しているように感じます。「imgはliの大きさを基準にその100パーセント分の大きさで表示しろ」という情報から、実際どのような大きさでliやimgが表示されるのかはっきり言って予測しようがないと思います

多くの参考書にもどう挙動するのか一意的な推測を可能とするだけの情報は書かれていません。

しかしたらcss公式仕様を端から端まで参照することで過不足なく挙動を把握するための情報が手に入るのかもしれませんが、仕様のどこか今の自分仕事にとって必要情報なのか見極めるのにはなかなか困難なところがあるという意味で、情報に対するアクセスの困難性があると思います

私はjava学習しました。極めたというところには全く到達していませんが、それでもああいった言語は書いた通りに動くものであるということを実感しています。つまり自分が今書いた、書こうとしているコードがどのような動きをするのかを予測するための、各記法関数に関する文法情報として過不足なく学習者に提供されているように思います

cssにも事実上として「文法」なるものはあることは前述の例からも疑いの余地がない(先に書いた解釈以上に要素の表示を決定づけるための文法がないなら、要素の大きさは決定不能ということになる)のに、その情報いまいち曖昧提供されているきらいがあるように感じます

https://coliss.com/articles/build-websites/operation/css/about-css-layout-algorithms.html

↑このような「レイアウトアルゴリズム」と語るサイトも見つけはしましたが、私の言っている文法、すなわち、要素の表示のされ方を決定づけるための処理のフローと、概念的に同質なのかはいまいち不明です。

他の端的な例としては隣接する要素同士がネガティブマージンなので重なった場合、z-index指定してない場合はどういう法則でどちらの要素が上にくるのかとかも、本来は明確なアルゴリズム文法に則って決定されているはずなのに、多くの初学者あるいは中級以上の方でさえも当て推量とセンス試行錯誤で、なんとか自分意図通りの表示になるように調整を繰り返すことを余儀なくされているかもしれません(意外と単純で要素の名前について辞書ベースでどちらが上にくるか決定されてる?)。理詰めで考えさえて設計しさえすれば一発で自分で思い通りの挙動(表示)をさせる、ということが困難な言語CSSの癖として立ちはだかっているように思います。それはある種プログラミング言語が持つそれよりも厄介な癖だと思いますプログラミング言語の方がある意味で「素直」に挙動してくれると私は思います

同じように感じた人は教えてください。またそういう感覚卒業してCSS挙動論理的に手に取るようににわかるぞという方は今後の学習に関するアドバイスをしていただけると助かります

  • いうてブラウザ自作するにはCSSの仕様を完璧に把握してこそdomとか解釈して表示する機能を実現できるわけで、それはプログラミング言語によるものなのだから、やっぱプログラミング...

記事への反応(ブックマークコメント)

ログイン ユーザー登録
ようこそ ゲスト さん