メディアクエリ〜ページ表示する画面サイズによってスタイルの設定を変える〜
5693 ワード
- SCSSをいじっている際にこいつを知らなくて不覚にもウン時間も溶かしたのでメモる。
- 雰囲気で読んでやってください
背景とやりたいこと
- Railsのアプリケーション(SPAでない)を開発中のお話。
- プレゼンテーション層はslim, scssファイルを使っている
- あるページにYouTuneの動画を埋め込む。これを、
-
モバイル機器では、画面の横幅一杯
に表示したい
-
タブレットとデスクトップでは幅520px
で表示したい。
解決策
(1)UserAgentによってhtmlにタグを付け分ける(最初やろうとしてた)
- アクセスした機器のUserAgentに応じて、Railsのviewファイルをレンダリングする際にタグを動的に付与する
- モバイル版では、以下のケースだとdivタグに
mobile
クラスが加わる
- なお、「リクエスト元のUserAgentがどの端末であるかを識別するロジックをアプリケーションの内部に自前で定義している」ことが必要ある
page.html.slim
// @user_agent.mobile?とで、アクセス者がモバイルかを識別する
div class="app-movie #{'mobile' if @user_agent.mobile?}"
iframe src="https://www.youtube.com/embed/xxxxxxxx" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"" allowfullscreen
page.scss
.app-movie {
iframe {
width: 100%;
}
&.mobile {
iframe {
width: 520px;
}
}
}
CSSファイルの中でメディアクエリを使う(最終的にこっちを採用)
- 一発だった。
page.html.slim
div class="app-movie"
iframe src="https://www.youtube.com/embed/xxxxxxxx" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"" allowfullscreen
page.scss
app-movie {
iframe {
// TO読者: 閾値の設定はこの記事を参考にしないでください
@media screen and (max-width:767px) {
width: 100%;
}
@media screen and (min-width:768px) and (max-width:979px) {
width: 520px;
}
@media screen and (min-width:980px) {
width: 520px;
}
}
}
- メディアクエリの使い方をもう少し細かく知りたい時はこちらを参照しよう。
補足
- 「widthじゃなくてmax-widthを520pxに設定したらいいのではないか」と思ったりもしたが、iframeはデフォルトで幅300px, 高さ150pxが設定されており、スクリーンの横幅を広くして行っても、横幅が520pxにまで達することはないため、widthを設定した。
- これも知らなかったため、結構時間を溶かしてしまった
- プレゼンテーション層はslim, scssファイルを使っている
-
モバイル機器では、画面の横幅一杯
に表示したい -
タブレットとデスクトップでは幅520px
で表示したい。
(1)UserAgentによってhtmlにタグを付け分ける(最初やろうとしてた)
- アクセスした機器のUserAgentに応じて、Railsのviewファイルをレンダリングする際にタグを動的に付与する
- モバイル版では、以下のケースだとdivタグに
mobile
クラスが加わる - なお、「リクエスト元のUserAgentがどの端末であるかを識別するロジックをアプリケーションの内部に自前で定義している」ことが必要ある
- モバイル版では、以下のケースだとdivタグに
page.html.slim
// @user_agent.mobile?とで、アクセス者がモバイルかを識別する
div class="app-movie #{'mobile' if @user_agent.mobile?}"
iframe src="https://www.youtube.com/embed/xxxxxxxx" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"" allowfullscreen
page.scss
.app-movie {
iframe {
width: 100%;
}
&.mobile {
iframe {
width: 520px;
}
}
}
CSSファイルの中でメディアクエリを使う(最終的にこっちを採用)
- 一発だった。
page.html.slim
div class="app-movie"
iframe src="https://www.youtube.com/embed/xxxxxxxx" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"" allowfullscreen
page.scss
app-movie {
iframe {
// TO読者: 閾値の設定はこの記事を参考にしないでください
@media screen and (max-width:767px) {
width: 100%;
}
@media screen and (min-width:768px) and (max-width:979px) {
width: 520px;
}
@media screen and (min-width:980px) {
width: 520px;
}
}
}
- メディアクエリの使い方をもう少し細かく知りたい時はこちらを参照しよう。
補足
- 「widthじゃなくてmax-widthを520pxに設定したらいいのではないか」と思ったりもしたが、iframeはデフォルトで幅300px, 高さ150pxが設定されており、スクリーンの横幅を広くして行っても、横幅が520pxにまで達することはないため、widthを設定した。
- これも知らなかったため、結構時間を溶かしてしまった
- これも知らなかったため、結構時間を溶かしてしまった
Author And Source
この問題について(メディアクエリ〜ページ表示する画面サイズによってスタイルの設定を変える〜), 我々は、より多くの情報をここで見つけました https://qiita.com/kudojp/items/bd33a8e617108fd24d42著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .