3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Vue.js、ElementUIで作ったページをモバイルで開いてデザイン崩れた話。

Posted at

背景

サーバーレスで自分用の家計簿的なwebサービスを勉強も兼ねて開発中。前の投稿 で編集ダイアログの開発が終わった。が、問題発覚。

問題

自分のPCで開発している時には何の問題もなし(ちょっとデザイン改善したいけど)。
dialog_01.png

が、デプロイして、自分のモバイルで見た時に問題発覚。デザインだだ崩れ。
dialog_mobile_pickup.png

データの編集自体は出来る。が、自分が使うだけという条件を加味してもこの崩れは許容しがたい。ポイントは2つ。

  • ボタンが2列になってる。
  • 日付入力の幅が変

対策開始

  • 日々の入力、更新はモバイルになる予定(将来PCメインで使用する色々分析画面付けるかもしれないが)。
  • モバイルに合わせるとPC側が寂しいのでデバイスによって分けたい。
  • 理想的にはPC用とモバイル用で別ページ作ってしまう事。
  • 操作性までPC用とモバイル用で分ける程の画面ではない。

という事を考えていたら、レスポンシブWEBデザインメディアクエリという技術を知る。デバイスの種類、画面幅によってcssなどを切り替えられるらしい。

変更ポイント探り

画面サイズによって切り替えるとしても、コンポーネントで指定されている値を修正するので、その上書きポイントを探る。ChromeだとF12の開発者モード。

開発者モードのエリアの左上にあるボタンでモバイル表示モード。画面上部でサイズ指定。モバイルボタン横にある要素指定モードにしてからダイアログのDOM要素を探し、そのデザインcssを右エリアで確認。
dialog_mobile_developer.png

index.css にて、 el-dialog クラスにwidth:50% が指定されているのが原因。
同様に、日付入力コンポーネントの幅指定をしているものを探す。
index.css にて、.el-date-editor.el-input, .el-date-editor.el-input__innerに、 **width: 220px;**が指定してあるのが原因。

モバイルの場合、ダイアログ幅は280px程度、その状態で、日付入力が160px程度がよさそう。切り替えは、画面サイズ640px以下としようと思います。

実装

style scopedタグ配下に書けば行けるかと思ったけど、どうも他コンポーネントを直接指定するのは出来ないっぽい。多分コンパイル対象から外れる。しかも、el-dialogは、DOM構成がtemplateと実際とで変わる様子。とはいえグローバルのcssで指定するのは避けたい。色々調べてみたら、どうやら**>>> コンビネータ**を使うとよいらしい。ネストダイアログも無いので大丈夫そう。

ダイアログTemplateの一番外のタグにclass属性追加。

<template>
  <el-dialog title="入力" :visible.sync="slipDialogVisible" class="slipinputdlg">
  <!-- 中略 -->
  </el-dialog>
</template>

そのクラスの配下、という形で指定。**<style scoped>**タグ配下で、以下指定。

@media (max-width:640px) {
  .slipinputdlg >>> .el-dialog {
    width: 280px;
  }
  .slipinputdlg >>> .el-date-editor.el-input, .el-date-editor.el-input__inner {
    width: 160px;
  }
}

参考ページ
Vue Componentのstyleを上書きするには
スコープ付き CSS

結果

dialog_mobile_aft.png
直りました!ちゃんとこのダイアログ中のel-dialogクラスだけ幅指定されるようになってますね。

感想

  • このダイアログに限らないが、ちょっと複雑な事をしようとすると、 javascriptとか html とか css とかの webページ基本知識が必要になってくる(と思う)。
  • Element.uiはモバイルの画面幅は考慮されてなさそう。とはいっても、下手に考慮しようとしてもかえってカオスになるか・・
3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?