[解決済み] CSS3メディアクエリでSass変数を使用する
2022-05-02 08:35:50
質問
以下のように、Sass変数の使用と@mediaクエリを組み合わせようとしています。
$base_width:1160px;
@media screen and (max-width: 1170px) {$base_width: 960px;}
@media screen and (min-width: 1171px) {$base_width: 1160px;}
$base_width
は、スタイルシートの様々な箇所で定義され、流動的なレイアウトを生成するためにパーセンテージベースの測定を行います。
このようにすると、変数はきちんと認識されているようですが、メディアクエリの条件がずれてしまいます。 例えば、上記のコードでは、画面幅に関係なく1160pxのレイアウトが生成されます。 このように@mediaの記述を反転させると。
@media screen and (min-width: 1171px) {$base_width: 1160px;}
@media screen and (max-width: 1170px) {$base_width: 960px;}
画面幅に関係なく、これまた960pxのレイアウトが出来上がります。 また、最初の行の
$base_width: 1160px;
を実行すると、未定義の変数に対するエラーが返されます。 何が足りないのでしょうか?
解決方法は?
これは単純にあり得ないことです。トリガーは
@media screen and (max-width: 1170px)
はクライアントサイドで発生します。
期待される結果を得るには、SASS が
$base_width
変数にコピーし、それに応じて変更します。
自動ではうまくいかないので、このように手作業で行うこともできます。
@media screen and (max-width: 1170px)
$base_width: 960px // you need to indent it to (re)set it just within this media-query
// now you copy all the css rules/properties that contain or are relative to $base_width e.g.
#wrapper
width: $base_width
...
@media screen and (min-width: 1171px)
$base_width: 1160px
#wrapper
width: $base_width
...
これは本当の意味でのDRYではありませんが、あなたができる最善の方法です。
もし、変更点が毎回同じであれば、変更する値をすべて含むmixinを用意すれば、繰り返す必要はないでしょう。さらに、そのmixinに特定の変更点を組み合わせてみることもできます。みたいな感じ。
@media screen and (min-width: 1171px)
+base_width_changes(1160px)
#width-1171-specific-element // additional specific changes, that aren't in the mixin
display: block
そして、Mixinは次のようになります。
=base_width_changes($base_width)
#wrapper
width: $base_width
関連
-
[解決済み] メディアクエリ。デスクトップ、タブレット、モバイルをターゲットにする方法とは?
-
[解決済み] CSS メディアクエリ: max-width OR max-height
-
[解決済み] Sass Nesting for :hover が機能しない [重複].
-
[解決済み] Sass .scss: ネストと複数クラス?
-
[解決済み] メディアクエリは画面ではなく、div要素に基づいてサイズを変更できますか?
-
[解決済み] Twitter Bootstrap 3:メディアクエリを使うには?
-
[解決済み] CSS3メディアクエリでSass変数を使用する
-
[解決済み] Sassはパーセントマイナスpxを計算する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン