CSSを記述するときはSassを使っています。そしてメディアクエリを多用しており、今回作ったサイトでは同じ画面サイズのメディアクエリがあちこちに存在する状況になっています。
このメディアクエリを簡潔にするため、gulpとPostCSSを使って同じ画面サイズのメディアクエリを1つにまとめようとしています。
わたしがCSSを記述するときの順序ですが、わたしは基本的にモバイルファーストで作成しています。
つまり最初にスマホ画面のCSSを作成し、その後、メディアクエリで徐々に大画面のCSSを作る方針をとっています。
わたしのサイトで使ったメディアクエリは次の通りです(style.scssファイルに記述します)。
CSS
1// style.scssファイルの記述 2@media (max-width: 374px) {} 3@media (min-width: 768px) {} 4@media (min-width: 992px) {} 5@media (min-width: 1200px) {} 6@media (min-width: 1366px) {}
このCSSから推測できるように、わたしは画面サイズの基準を375pxとしてサイトを作っています。
そのためメディアクエリを設定するときも基本的にmin-widthを使うことになるのですが、小さなスマホ画面に対応するため、例外的に@media (max-width: 374px) {}を使っている個所もあります。
さてこのようにメディアクエリを設定したのですが、最初に書いたようにこれらのメディアクエリはCSSファイルのあちこちに必要に応じて点在しています。
そこでgulpとPostCSSでメディアクエリをまとめたのですが、次のような順で出力されました(style.cssファイルに出力されます)。
CSS
1// style.cssファイルの出力 2@media (min-width: 768px) {} 3@media (min-width: 1366px) {} 4@media (min-width: 992px) {} 5@media (max-width: 374px) {} 6@media (min-width: 1200px) {}
しかしこのような出力順になったため、1366px以上のときの設定が、@media (min-width: 992px) {}や@media (min-width: 1200px) {}によって打ち消されてしまいました。
また@media (max-width: 374px) {}の記述が@media (min-width: 992px) {}と@media (min-width: 1200px) {}の間に挟まれているのも気になります。
今回はこの位置に@media (max-width: 374px) {}がきても影響はなかったのですが、@media (max-width: ●px) {}のサイズやプロパティの設定によってはmin-widthに挟まれるとデザインが崩れる可能性があります。
そのため@media (max-width: ●px) {}と@media (min-width: ●px) {}を併用するにしても、デザインが崩れない順に出力したいと考えています。
今回の場合だと、メディアクエリの出力順を
@media (max-width: 374px) {}
@media (min-width: 768px) {}
@media (min-width: 992px) {}
@media (min-width: 1200px) {}
@media (min-width: 1366px) {}
としたいのですが、どのようにすればいいのでしょうか。
よろしくお願いします。
わたしとしてはてっきりPostCSSを使うと自然に小画面~大画面となるようにメディアクエリが設定されると思っていたのですが、やはりgulpfile.jsの設定が十分ではないということでしょうか。
念のためわたしの使ったpackage.jsonとgulpfile.jsのコードを記載します。
json
1{ 2 "name": "mediaqueryfiles", 3 "version": "1.0.0", 4 "description": "このフォルダは、Sassのメディアクエリをまとめるために作られたフォルダです。", 5 "main": "index.js", 6 "scripts": { 7 "test": "echo \"Error: no test specified\" && exit 1" 8 }, 9 "keywords": [], 10 "author": "", 11 "license": "ISC", 12 "devDependencies": { 13 "autoprefixer": "^10.3.0", 14 "css-declaration-sorter": "^6.0.3", 15 "css-mqpacker": "^7.0.0", 16 "gulp": "^4.0.2", 17 "gulp-postcss": "^9.0.0", 18 "gulp-sass": "^5.0.0", 19 "node-sass": "^6.0.1", 20 "sass": "^1.35.2" 21 } 22}
js
1// gulpプラグインの読み込み 2var gulp = require("gulp"); 3var sass = require('gulp-sass')(require('sass')); 4var postcss = require("gulp-postcss"); 5var mqpacker = require("css-mqpacker"); // メディアクエリをまとめる 6var cssdeclsort = require("css-declaration-sorter"); // プロパティ順の分類 7 8// scssの監視タスクを作成する 9gulp.task("default", function () { 10 // scssファイルを監視 11 return gulp.watch("scss/*.scss", function () { 12 // scssの更新があった場合の処理 13 // scssファイルを取得 14 return ( 15 gulp 16 .src("scss/*.scss") 17 // Sassのコンパイルを実行 18 .pipe( 19 sass({ 20 outputStyle: "expanded", // expandedとして圧縮する 21 }) 22 // Sassのコンパイルエラーを表示 23 // (これがないと自動的に止まってしまう) 24 .on("error", sass.logError) 25 ) 26 // sassの後に指定 27 .pipe(postcss([cssdeclsort({ order: "concentric-css" })])) // concentric-cssでソートする(ボックスモデルの外側からソートする) 28 .pipe(postcss([mqpacker()])) 29 // cssフォルダー以下に保存 30 .pipe(gulp.dest("css")) 31 ); 32 }); 33});
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/26 11:13