ホームページ ウェブフロントエンド CSSチュートリアル SCSS モバイル ページ マスク レイヤー効果の実装と一般的な問題の解決策

SCSS モバイル ページ マスク レイヤー効果の実装と一般的な問題の解決策

Mar 09, 2017 am 10:28 AM


は Android 4.0.4+ と互換性があります:
SCSS モバイル ページ マスク レイヤー効果の実装と一般的な問題の解決策

デザイン構造は次のとおりです:

<header class="header"></header>
<p class="wrap-page">
    <section class="page"></section>
    ...   
</p>
<footer class="footer"></footer>
<p class="overlay">
    <section class="modal">
        <p class="modal-hd"></p>
        <p class="modal-bd"></p>
        <p class="modal-ft"></p>
    </section>
</p>
ログイン後にコピー

このオーバーレイ マスク レイヤーの問題点。なぜこのようにデザインされているかを説明します。 。

一般的に、表示されるオーバーレイは、入れ子になった関係ではなく、モーダルの兄弟要素です。もともとこのように設計していましたが、それはただの習慣です。その後、モーダルのセンタリングの問題により、次の質問を再検討しました:

マスク レイヤーのオーバーレイ コンテンツとポップアップ コンテンツは兄弟要素であるのはなぜですか?

正直に言うと、なぜ兄弟愛でなければならない理由が思いつきません。後で、前のマスクレイヤーが半透明の画像を使用していない場合は、不透明度を使用する必要があることに突然気づきました(ie6-8は不透明度をサポートしていません。フィルターを通してシミュレートされています)、この属性は子要素全体に影響します、子要素を介してこの値をオーバーライドする方法はありません。これが私が思いつく最大の理由ですが、他にも理由がある場合は、お気軽に共有してください。

ハイエンドのモバイル端末では、rgba の時代なので、opacity は家に帰って最初に食べます。子要素への影響が問題にならないため、ネスト関係を確立できます。水平方向と垂直方向の中央揃えには、小指を動かすだけで十分な理由があります。兄弟要素を水平方向と垂直方向の中央に配置するには、モーダルの上と左の値を 50% に設定し、次に、translate の x 方向と y 方向を -50% に設定する必要があります

したがって、兄弟要素を思い切って放棄します設計し、ネストされた関係に置き換えます。

オーバーレイはフレックス レイアウトを使用して子要素のセンタリングを制御するため、display as none/block を使用してマスク レイヤー オーバーレイを表示または非表示にすることは難しくありません。代わりに、z インデックス レベルとモーダル部分を追加、削除するこのクラスで表示と非表示を制御します

scssコードは次のとおりです:

.overlay{   
    position: fixed;   
    top: 0;   
    rightright: 0;   
    bottombottom: 0;   
    left: 0;   
    z-index: -1;   
    background-color: rgba(0,0,0,.8);   
    @include flex-center; // flex水平垂直居中   
}   
.overlay.active {   
  z-index: 980;   
}   

$modalBarHeight: 40px !default;   
$modalBdPadding: 15px;   

.modal{   
    background-color: #fff;   
    border-radius: 5px;   
    margin: 0 10px;   
    overflow: hidden;   
    opacity: 0;   
    @include transform(translate3d(0,0,0) scale(0.815));   
    @extend %all-transition;   
    @include transition-property(transform, opacity);   

    &.modal-in{   
        opacity: 1;   
        @include transform(translate3d(0,0,0) scale(1));   
    }   

    .modal-hd{   
        text-align: center;   
        line-height: $modalBarHeight;   
        background-color: $primary;   
        color: #fff;   
    }   
    .modal-bd{   
        padding: $modalBdPadding;   
    }   
    .modal-ft{   
        border-top: 1px solid $gray;   
        @extend %display-flex;   
        .btn-modal{   
            @include flex(1);   
            background-color: #fefefe;   
            text-align: center;   
            line-height: $modalBarHeight;   
            color: $primary;   
            &:first-child{   
                border-right: 1px solid $gray;   
            }   
            &:last-child{   
                border-right: none;   
            }   
            &:hover,&:active{   
                background-color: #d9d9d9;   
            }   
        }   
    }   
}
ログイン後にコピー


モバイル端末でポップアップウィンドウをシミュレートするとき、いくつかの問題に遭遇しましたが、記憶を深めるために次のように要約されます。

状況 1:

本体の高さがビューポートの高さより大きい場合、ポップアップ ウィンドウ上をスライドすると、本体もそれに伴ってスライドします。
解決策:

touchmove と overflow:hidden を無効にして実装します。次のコードを参照してください:


/**
 * 初始化弹窗
 */
var initDialog = (function() {   
    var _tmpl = baidu.template(&#39;dialog-tpl&#39;, {});   

    return {   
        tmpl : $(_tmpl),   

        /**
         * [create 创建弹窗]
         * @return {[type]} [description]
         */
        create: function() {   
            var me = this,   
                _tmpl = me.tmpl;   

            $(&#39;body&#39;)   

            // 禁用鼠标滚轮滚动
            .css(&#39;overflow&#39;, &#39;hidden&#39;)   

            .append(_tmpl)   

            // 禁止touchmove,阻止body滑动
            .on(&#39;touchmove&#39;, function(e) {   
                e.preventDefault();   
            })   

            // 关闭动作
            .on(&#39;tap&#39;, &#39;dialog-close&#39;, function() {   
                me.destroy();   
            })   
        },   

        /**
         * [destroy 销毁弹窗]
         * @return {[type]} [description]
         */
        destroy: function() {   
            this.tmpl.remove();   

            // 解除touchmove绑定、启用滚动
            $(&#39;body&#39;).off().css(&#39;overflow&#39;, &#39;auto&#39;);   
        }   
    }   
})();
ログイン後にコピー

ケース 2:

ソフト キーボードがポップアップすると、カスタム ポップアップ ウィンドウが全画面に表示されない
解決策:

ポップアップウィンドウを開く前に、JavaScriptのblurイベントを使用してソフトキーボードを閉じてください。


$(“:focus”).blur();
ログイン後にコピー

ケース 3:

トーストコンポーネントを実装するとき、トーストが
position:fixed;bottom:-3rem; を使用する場合、つまり、通常の考え方によれば、トーストが比較的底に近い場合、ただし、IOS および Andriod UC ブラウザでは、キーボードがブラウザ全体の上位層にあるため、z-index を設定してもトーストがカバーされてしまいます。 。

解決策のアイデア:

トーストが表示されたら、すべてのコントロールのイベントをリッスンし、フォーカスに到達すると、現在の位置を動的に計算して再計算します。しかし、キーボードの高さがモデルによって均一ではないという問題があります。 M 側参照コード:

<style type="text/css">   
    body {   
        text-align: center;   
    }   
    input[type=text] {   
        width: 80%;    
        height: .8rem;   
        margin-top: .3rem;   
    }   
    .toast {   
        position: fixed;    
        bottombottom: .3rem;    
        left: 50%;    
        margin-left: -1rem;    
        width: 2rem;    
        height: 1rem;    
        background-color: #f00;    
        border-radius: 10px;   
        color: #fff;   
    }   
</style>   
<input type="text">   
<p class="toast">Toast</p>
ログイン後にコピー

以上がSCSS モバイル ページ マスク レイヤー効果の実装と一般的な問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

それは&#039; Vueチームにそれを成し遂げてくれておめでとうございます。それは大規模な努力であり、長い時間がかかったことを知っています。すべての新しいドキュメントも同様です。

Redwood.jsと動物相を使用してイーサリアムアプリを構築します Redwood.jsと動物相を使用してイーサリアムアプリを構築します Mar 28, 2025 am 09:18 AM

最近のビットコインの価格が20k $ $ USDを超えており、最近30Kを破ったので、イーサリアムを作成するために深く掘り下げる価値があると思いました

ブラウザから有効なCSSプロパティ値を取得できますか? ブラウザから有効なCSSプロパティ値を取得できますか? Apr 02, 2025 pm 06:17 PM

私はこの非常に正当な質問で誰かに書いてもらいました。 Leaは、ブラウザから有効なCSSプロパティ自体を取得する方法についてブログを書いています。それはこのようなものです。

粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード 粘着性のあるポジショニングとサスのダッシュを備えた積み重ねられたカード Apr 03, 2025 am 10:30 AM

先日、Corey Ginnivanのウェブサイトから、この特に素敵なビットを見つけました。そこでは、スクロール中にカードのコレクションが互いに積み重ねられていました。

CI/CDで少し CI/CDで少し Apr 02, 2025 pm 06:21 PM

「ウェブサイト」は「モバイルアプリ」よりも適していると言いますが、Max Lynchからのこのフレーミングが好きです。

レスポンシブデザインのブラウザを比較します レスポンシブデザインのブラウザを比較します Apr 02, 2025 pm 06:25 PM

これらのデスクトップアプリがいくつかあり、目標があなたのサイトをさまざまな次元ですべて同時に表示しています。たとえば、書くことができます

WordPressブロックエディターでのマークダウンとローカリゼーションを使用します WordPressブロックエディターでのマークダウンとローカリゼーションを使用します Apr 02, 2025 am 04:27 AM

WordPressエディターでユーザーに直接ドキュメントを表示する必要がある場合、それを行うための最良の方法は何ですか?

フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? フレックスレイアウト内の紫色のスラッシュ領域が誤って「オーバーフロー空間」と見なされるのはなぜですか? Apr 05, 2025 pm 05:51 PM

フレックスレイアウトの紫色のスラッシュ領域に関する質問フレックスレイアウトを使用すると、開発者ツールなどの混乱する現象に遭遇する可能性があります(D ...

See all articles