質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

1回答

152閲覧

css background-image を縮小のみして表示する方法

snlqjgdq5r

総合スコア0

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2024/11/19 17:14

編集2024/11/20 07:12
background-size: contain;

を使えば画像サイズが領域より大きい場合に自動で全体が見えるよう調整されますが、
画像が小さい場合に拡大されてしまいます。

拡大は不要で縮小のみしたいのですが、 background-image を使う場合に実現可能でしょうか?


条件:

  • JSは使用不可
  • imgタグに変更不可
  • サーバーが生成するHTML等の変更不可

既存画面に対してCSSのみ変更(既存のものに追加)可能です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2024/11/20 07:59

質問の編集を拝読。 その条件では難しいのではないかと思いました。
snlqjgdq5r

2024/11/20 09:57

画像表示にback-ground-imageが使われるケースはよく見るので表示範囲に収まる形で表示するというありがちな表示方法は実現できる手段があるかと思い質問しましたが、難しいのですね。それがわかっただけでも良かったです。ありがとうございました。
guest

回答1

0

background-size は max() や min() を許容するので 最大サイズと 可変サイズを合わせて min() すれば いいのではないでしょうか?(なんなら calc() で計算してもいいかもしれません。

例えばこう

このコードだと 幅が 100% か 500px の 小さい方なので 500px 未満になると その幅に合わせて小さくなります。高さは auto なので 幅に 比率を合わせます

css

1:root { 2 background-image: url(https://picsum.photos/id/0/300/300); 3 background-repeat: no-repeat; 4 background-position: center center; 5 background-size: min(100%, 500px) auto; 6}

参考

追伸

background-size の仕様を確認したら background-size: 数値background-size: 数値 auto の省略形だそうで、 上記の例だと background-size: min(100%, 500px); でも全く同じ動作しますね。

In the following example, the background is shown with a width of 3em and its height is scaled proportionally to keep the original aspect ratio:

css

1div { 2 background-image: url(image2.png); 3 background-repeat: repeat; /* default */ 4 background-size: 3em } /* = '3em auto' */

EXAMPLE14 - CSS Backgrounds and Borders Module Level 3

投稿2024/11/19 23:40

編集2024/11/20 01:35
juner

総合スコア453

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2024/11/20 01:52

横からすみません。 その場合、要素が横長だった場合、上下が見切れることになると思いますので、contain と違う動作になりそうです。 ラッパー要素を置いて @container (orientation: portrait) のようにコンテナクエリで場合分けするなどの対応が必要かもしれません。 (それなら image 要素を置いて object-fit: scale-down でいいじゃん、ということになりそうで、問題の解決にならなさそうですが)
snlqjgdq5r

2024/11/20 04:35

その方法場合500pxは画像のサイズですよね? 画像サイズはユーザーが投稿するものでして、事前にはわからず画像次第で可変です。 サイズを取得するにはJSが必要ですが今回はJSが使えない前提なので今回の方法には使えなそうです。 ありがとうございました。
juner

2024/11/20 04:41

画像のサイズは 300px x 300px ですが 500px に拡大して使っています
Lhankor_Mhy

2024/11/20 05:21

たびたび横からすみません。 > snlqjgdq5r さん > 画像サイズはユーザーが投稿するものでして、事前にはわからず画像次第で可変です。 ということは、サーバ側のコードによってHTMLに画像ファイルのパスが動的に出力されるのでしょうから、同様にサーバ側で内在サイズを取得し動的にHTMLに埋め込めばいいのではないでしょうか。 <div style="--image-width:{{image.width}}">のような形で。
snlqjgdq5r

2024/11/20 07:10

質問の条件に記載していなくて申し訳ないのですがサーバーサイドは一切触れることはできず、CSSによる簡易なカスタムのみが可能です。既存画面に対してCSSを差し込めるくらいのため、JSやimgタグ等も使えない形です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問