css

PC & モバイル

【object-fit】画像の縦横比をCSSだけで固定する手軽な方法

レスポンシブ時代の昨今、ワンソースでPCやタブレット、スマホなど画面サイズが異なる様々なデバイスに対応させることに翻弄されている人も少なくないだろう。

WordPressなどのCMSを使っていると、一見、完璧そうに思えるテーマでもデバイスによっては画像が「びょ~~ん」と伸び縮みしてしまうことがある。この手の解決手法は根が深い場合は本当に苦労するし、当たり前のことが当たり前にできていないのを当たり前にするだけ、という心身が疲れ果てる作業なのである。

そんな場合に一発解決できるかも知れないCSSを紹介する。なお、サイトの構造によっては、もっと色々やらないと解決できない場合もあるからご承知おきを。

古典的(?)手法

該当の歪んでしまったCSSに下記のコードを当てる。大抵はこれでうまく行くか、入り組んでいる場合は無理なこともある。

width: 100%;
height: auto;

最近(?)の手法

古めのブラウザやIEなどでは対応しない場合もあるが、便利なコードなので知っておくと良い。

object-fit

詳しくはリンク先で確認して欲しいが(なげやり)、親要素にはめ込むために存在しているプロパティ。アスペクト比(縦横比)を維持したままフィットさせるとかができる。

古典的手法で駄目な場合でも、これで一発解決できる場合もあるから、心身疲れ果てる前にお試しあれ。

WEB制作

【Mac対策用CSS】なぜかMacだけ文字が太い時はfont-smoothingで一発解決

特にMac対応のためにあるわけじゃないが、Windowsではどのブラウザで見てもすごくいい感じなのに、Macだとどのブラウザで見てもフォントが汚い(妙に太いとか)時は、font-smoothingというCSSをぶち込めば解決するかも、という覚書。

フォント問題はOSでバラバラだから苦労する

モバイルファーストの時代に、普通のサイトだったら1桁%しかいないMacユーザー対応する必要あるのか疑問ではあるけど、Macで見ると我慢ならないくらいフォントがおかしい場合がある。

黒っぽい背景に20~30pxくらいの太文字を表示させた時がそうだった。Windowsではメイリオの太字でいい感じなのだが、Macだとメイリオはない。ヒラギノ角ゴとかMacの定番を使うも、太字にすると妙におかしい。Windowsが太字でMacはノーマル、というのが簡単にできればいいのだが、対応コストや検証が手間かかり過ぎる。

游ゴシック(YuGothic)というWindows10と新しい目のMacに標準で入っているフォントを使うことも検討したが、游ゴシックも問題が山ほどあってクソ使いにくい。

結論は、Macのフォント描画システムがおかしい(?)から

おかしいというと語弊があるが、少なくとも多数派であるWindowsと同じ表示をしない。

黒っぽい背景に文字を載せるとMacだけ妙に太く見えるのは、Macのフォント描画のせいだと思うので、font-smoothingというフォント描画を制御するCSSを付け足す。アンチエイリアシングに関する設定らしいが、Windowsではこんなことしないので答えがわかるまで苦労した。丸1日くらい色々悩んだ。

実装例

↓こんな感じで目的の文字(h1とか、h2とか)に付け足すだけ。微妙なものかと思ったら、びっくりするくらい変わってWindowsと同じになった。

-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;

WEB制作

CSSの強制継承「inherit」は他人が作ったグダグダなCSSをリセットしたい時に有効

cssの基本として親要素のプロパティ(色とか)を子要素が引き継ぐというものがある。

自分が書いたcssならまだしも、前任者から引き継いだcssをいじるとなると、その人の手癖や自分よりレベルの高い書き方(笑)などの要因によって、修正したり書き換えるのが困難な場合がある。

これはCSSに限らず、プログラミング言語などでも他人が書いたコードをいじるというのは難しいのだ。

ひたすらデベロッパーツールをいじくりまわしても、何がどうなっているか簡単に見つけ出すことができない。

やっと目的のクラスやプロパティらしきものを発見しても、複数のcssによってプロパティが上書き、上書きとグダグダになっている場合、簡単に修正できない場合がある。

むしろ初期状態に戻すのがinherit

そういうグダグダな作りのcssの場合、往々にしてあなたが想定している継承が無効化されていることがある。CMSで動的に強い力でcssが割り当てられているようなケースだ。

そんな時には強制的に継承させるプロパティ「inherit」が役に立つ。どちらかというと初期状態に戻す処理になる。

もしかしたら、人によってはあまり使ったことがないかもしれないが「inherit」は色やフォントなども含め、全てのプロパティに適用させることができる。

使い方の例
#sidebar h2 { color: inherit; }

詳しい使い方を知りたい場合はこちらのページが役に立つ。
https://developer.mozilla.org/ja/docs/Web/CSS/inherit