🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

Sass

Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

CSS

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

Q&A

解決済

1回答

3140閲覧

SCSSで%をpx単位にする方法が分かりません..

hirokuro900

総合スコア33

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

レスポンシブWebデザイン

レスポンシブWebデザイン(RWD)は、スクリーンのサイズ、プラットフォーム、オリエンテーションに基づいて様々なデバイスで最適のサイトを生成するのウェブデザインとその開発のアプローチ方法を呼びます。

Sass

Sassは、プログラミング風のコードでCSSを生成できるスタイルシート言語です。 scss ファイルを、変換(コンパイル)してCSSファイルを作成します。

CSS

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

0グッド

0クリップ

投稿2019/12/05 14:38

編集2019/12/06 05:08

scssを使ってレスポンシブデザインをしているのですがwidthの値を元にheightを計算する方法が分かりません。

scss

1@mixin GoldenRatio($maxsize: 100%, $split: 1) { 2 width : calc( #{$maxsize} / #{$split} ); 3 height: calc( #{$maxsize} / ( #{$split} * 1.618)); 4 object-fit: cover; 5 @content; 6} 7 8div.box { 9 width: 90%; 10 img { 11 @include GoldenRatio(); 12 } 13}

現在このようにして100%のwidthを指定してその数値を利用して
黄金比率のheightを指定しようとしているのですがパーセントだと
heightが指定できないためwidthの100%の値をpxに換算してheightに
指定したいです。

vwかemでは指定できるのですがemではデバイスサイズに合わせられなくて
vwでは親要素の幅を無視してしまうので%で考えています。

もしくは100%の値をemに換算してそのemを使用する方法でもいいのかな?とは
思うのですが調べてもpxを%に換算する方法などしか見つけられなくて
困っています。

どなたかお知恵をお貸しいただけないでしょうか?


◆追記
テスト画像
ご回答ありがとうございます!ご教授いただいた方法で高さを黄金比率を
保ったまま配置する事ができました。

SCSS

1@mixin GoldenRatio($maxsize: 100%, $split: 1) { 2 position: relative; 3 width: calc( #{$maxsize} / #{$split} ); 4 @content; 5 &::after { 6 display: block; 7 padding-top: calc( #{$maxsize} / ( #{$split} * 1.618 )); 8 content: ""; 9 } 10 img { 11 position: absolute; 12 width: 100%; 13 height: 100%; 14 object-fit: cover; 15 @content; 16 } 17}

この様な形で実装できました!ありがとうございましたm(_ _)m

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

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

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

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

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

guest

回答1

0

ベストアンサー

heightが指定できないためwidthの100%の値をpxに換算してheightに指定したいです。

width, height プロパティにパーセント値を使用すると、包含ブロックの幅もしくは高さが参照されます。今回の場合、与えられた SCSS のみでは包含ブロックの横幅や高さを知ることは出来ないため、それは SCSS であっても不可能です。

padding プロパティのパーセント値が包含ブロックの width プロパティを参照する性質を利用すると、質問者さんの実現したいことが可能です (動作確認用リンク)。

'padding-top', 'padding-right', 'padding-bottom', 'padding-left'

  • Value: <padding-width> | inherit
  • Initial: 0
  • Applies to: all elements except table-row-group, table-header-group, table-footer-group, table-row, table-column-group and table-column
  • Inherited: no
  • Percentages: refer to width of containing block
  • Media: visual
  • Computed value: the percentage as specified or the absolute length

HTML

1<div class="box"> 2 <img src="http://placehold.jp/3d4070/ffffff/150x150.png"> 3</div>

CSS

1div.box { 2 position: relative; 3 width: 90%; 4 5 &::after { 6 display: block; 7 padding-top: calc(90% / 1.618); 8 content: ""; 9 } 10 11 img { 12 position: absolute; 13 width: 100%; 14 height: 100%; 15 object-fit: cover; 16 } 17}

質問者さんの実現したいことは CSS Box Sizing Module Level 4 において提案された aspect-ratio プロパティを用いて実現出来ますが、このプロパティはまだ大雑把な草案であるため、これを実装しているブラウザは存在しません。もし上記の方法を用いても実現したいことが行えない場合は、現状 JavaScript を用いる方法を考える必要があります。

§ 4.1. Intrinsic Aspect Ratios: the aspect-ratio property

This property sets a preferred aspect ratio for the box, which will be used in the calculation of auto sizes and some other layout functions. The box’s automatic sizes are then calculated the same as for a replaced element with an intrinsic aspect ratio, see e.g. CSS2 § 10 and CSS Flexible Box Model Level 1 § 9.2. The axis in which the preferred size calculation depends on this aspect ratio is called the ratio-dependent axis, and the resulting size is definite if its input sizes are also definite.

投稿2019/12/05 15:57

s8_chu

総合スコア14731

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

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

hirokuro900

2019/12/06 05:15

とても詳しくご回答くださり、感謝しております! web上で検索しているときに何度か拝見したことがあるコードでafterでpadding-topしたら検証画面で変なpaddingができそう..(ただの勉強不足です。すみません)と思っていたのですがそんな事は全く無くキレイな結果になったのでありがたくご使用させていただきます。 動作確認用に添付していただいたツールも初見でとても興味深く色々と勉強になりました! 貴重なお時間を割いていただき感謝しております。 ありがとうございましたm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問