###前提・実現したいこと
いつもお世話になっております。
現在原因不明のレイアウトのバグ(?)が起きており、自分では解決できずに立ち往生してしまっています。
皆様、よろしければお力添えをお願いいたします。
###発生している問題・エラーメッセージ
今現在iPhoneのChromeのモバイルブラウザでのみ以下の画像①のように何故かサイトの下部に謎の余白ができてしまっています。
そのためこの画像②のように、sweetalertも空白分を基準とした中央に配置されてしまっている状態です。
ここで奇妙なのが、この画像③のようにposition: fixed
が指定してあるハンバーガーメニューも何故か一緒にスクロールしてしまっていることです、何故かプロパティが効いていません。(下記の「追記」を御覧ください)
そして期待した通りに表示される場合もあります、ただその時は何故かcssアニメーションが効かなくなっています。
纏めると、「サイトの下部に謎の余白ができる・メニューのposition: fixed
が効かなくなる」と「cssアニメーションが効かなくなる」のどちらかがランダムに発生している状態です。
最後に以下の画像④は表示問題のないSafariでスワイプしながら撮ったスクリーンショットなのですが、メニューにきちんとposition: fixed
が効いており、そもそもプロパティが指定できていないという話ではないとご理解頂けると思います。
※確認した環境:
windows10 pro 64bit / Chrome, Firefox, edge
iPhone6, 6plus, 8 / Chrome, Safari, Yahoo
Xperia xz1 / Chrome
###※追記
・以下の画像⑤はスワイプしながら撮ったスクリーンショットなのですが、基準の位置はオカシイですが一応position: fixed
自体は効いているようでした。
bodyが不自然に伸びてしまっているのでしょうか?
・エンジニアの方のブログで似た事例を見つけました。
https://naoyu.net/window-load-innerwidth/
innerWidth
ではなくload
イベントで読んでいるわけでも無いので厳密には違うのですが、似たような箇所が原因かと思い下記のinnerHeight
を取得するコードのタイミングを逆にload
にしたり、DomContentLoaded
にしてみたりしましたが変わりませんでした。
個人的にはinnerWidth
でバグが有ったのならinnerHeight
でもあってもオカシクないと思ってしまうのですが、ご存じの方はいらっしゃるでしょうか?
自分でググった限りではiOSのChromeでのinnerHeight
のバグの情報は出てきませんでした。
###該当部分のコード
特にエラー等もなく、色々とググっては見たのですが似たような症状もヒットせず、私の知識では正確な該当部分が絞り込めませんでした。
ただinnerHeight
を取得するコードの部分が怪しいのでその部分のコードを始めに載せさせていただきます。
他は何かご指摘いただいた時に、随時その部分のコードを追加するという形にさせて下さい。
※scssでinclude
しているcenter-styling
はflexbox
を使って上下左右の中央に配置するコードです。
html
1<template> 2 <div id="app"> 3 <header-component /> 4 <div class="wrapper" :class="{ 'wrapper--opened': active }"> 5 <main> 6 <transition name="switch" mode="out-in"> 7 <router-view /> 8 </transition> 9 </main> 10 <footer-component /> 11 </div> 12 <div class="loading" v-if="loading"> 13 <img :src="require('@/assets/images/authentication-loading.svg')"> 14 </div> 15 </div> 16</template>
JavaScript
1import HeaderComponent from '@/components/Header.vue'; 2import FooterComponent from '@/components/Footer.vue'; 3import { mapState, mapActions } from 'vuex'; 4import firebase from 'firebase'; 5 6export default { 7 created() { 8 firebase.auth().onAuthStateChanged(user => { 9 if(user) { 10 this.setLoginUser(user); 11 this.fetchBooks(); 12 this.$swal({ 13 toast: true, 14 position: 'top-end', 15 type: 'success', 16 title: 'ログインしました', 17 showConfirmButton: false, 18 timer: 1500 19 }).then(result => { 20 if(result) this.offLoading(); 21 }); 22 } 23 }); 24 }, 25 mounted() { 26 let vh = window.innerHeight * 0.01; 27 document.documentElement.style.setProperty('--vh', `${vh}px`); 28 window.addEventListener('resize', () => { 29 let reVh = window.innerHeight * 0.01; 30 document.documentElement.style.setProperty('--vh', `${reVh}px`); 31 }); 32 }, 33 computed: { 34 ...mapState(['loading', 'active']), 35 }, 36 methods: { 37 ...mapActions(['setLoginUser', 'offLoading', 'fetchBooks']) 38 }, 39 components: { 40 HeaderComponent, 41 FooterComponent 42 } 43};
css
1@import '@/assets/styles/_fragments.scss'; 2 3html { 4 font-size: calc(62.5% + 0.5vw); 5} 6body { 7 font-family: 'Hiragino Kaku Gothic Pro', 'ヒラギノ角ゴ Pro W3', メイリオ, Meiryo, 'MS Pゴシック', sans-serif; 8 color: $base-black; 9 -webkit-font-smoothing: antialiased; 10 -moz-osx-font-smoothing: grayscale; 11} 12a { 13 color: $base-black; 14 text-decoration: none; 15} 16 17#app { 18 text-align: center; 19 overflow: hidden; 20 min-height: calc(var(--vh, 1vh) * 100); 21 .wrapper { 22 background-image: linear-gradient(rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6)), url('~@/assets/images/main-background.jpg'); 23 background-size: cover; 24 transition: 0.5s; 25 &--opened { 26 transform: translateX(15rem); 27 } 28 main { 29 @include center-styling; 30 min-height: calc(var(--vh, 1vh) * 100 - 2.5rem); 31 box-sizing: border-box; 32 padding: 1rem 0; 33 } 34 } //.wrapper 35 .loading { 36 @include center-styling; 37 position: absolute; 38 top: 0; 39 left: 0; 40 right: 0; 41 bottom: 0; 42 z-index: 101; 43 background-color: rgba(0, 0, 0, 0.2); 44 user-select: none; 45 } 46} //#app 47 48//ページ遷移トランジション 49.switch-enter-active { 50 transition: 1s; 51} 52.switch-enter, 53.switch-leave-to { 54 opacity: 0; 55}
回答2件
あなたの回答
tips
プレビュー