2017-02-21 9 views
0

私は、Web開発コースのプロジェクトのボタンメニューを作成しています。私は<div>を使用して、ホバリング時に陰影を変更するクリック可能なメニューを作成しています。ユーザーがテキストを選択できないようにしたいのです(ボタンなので)。私はフレックスレイアウトスキームを使用しています(少なくとも私はそれを正しくやっていると思います)。私は次のコードを持っていますが、それは異なったブラウザで異なった振る舞いをしています。私は左から右のChrome、Firefox、Safariのスクリーンキャップのリンクを含んでいました。divベースのボタンメニューは、さまざまなブラウザで異なる動作をします

は、ここでメニューバーのためのコードです:

<style type="text/css"> 

    .button { 
     margin: 0; 
     padding: 5px; 
     background-color: #CCCCCC; 
     height: 100%; 
     font-family: helvetica, sans-serif; 
     display: flex; 
     align-items: center; 
     user-select: none; 
    } 

    .buttonDivider { 
     border-left: gray 1px solid; 
     height: 100%; 
    } 

    .button:hover{ 
     background-color: gray; 
     cursor: pointer; 
    } 

    #buttonBar { 
     display: flex; 
     border: gray 1px solid; 
     border-radius: 5px; 
     overflow: hidden; 
     margin: 0 auto; 
     align-items: center; 
     user-select: none; 
    } 

    #titleBar { 
     display: flex; 
     width: 100%; 
     height : 40px; 
     padding: 5px; 
     background-color: #CCCCCC; 
     user-select: none; 
    } 
    #titleText { 
     display: flex; 
     align-items: center; 
     font-family: helvetica, sans-serif; 
     font-size: 25px; 
     font-weight: bold; 
    } 

    body{ 
     margin: 0; 
     padding: 0; 
    } 
    div { 
     margin: 0; 
     padding: 0; 
    } 



    </style> 

</head> 

<body> 
    <div id="titleBar"> 
    <span id="titleText">CodePlayer</span> 
    <div id="buttonBar"> 
     <div id="buttonHTML" class="button">HTML</div> 
     <div class="buttonDivider"></div> 
     <div id="buttonCSS" class="button" style="user-select:none">CSS</div> 
     <div class="buttonDivider"></div> 
     <div id="buttonJS" class="button">JavaScript</div> 
     <div class="buttonDivider"></div> 
     <div id="buttonOutput" class="button">Output</div> 
    </div> 
    </div> 

しかし、あなたがビデオから見ることができるように、動作は3つのブラウザ(すべてこの記事のように、クロム56、最新バージョンにアップデートでかなり異なっています、 Firefox 51、およびSafari 10.0.3)をサポートしています。クロムが最も近い。ユーザーがテキストを選択するのを防ぎ、ホバー上で領域全体を塗りつぶします。奇妙なことは、テキストを選択していない状態でクリックしてドラッグすると、カーソルがハイライトカーソルに変わります。 Firefoxは、ホバー上のボタン全体を暗くするが、user-select: noneには従わないので、Safariはボックス全体を塗りつぶすことも、他の2つはホバー上で塗りつぶすのではなく、完全に選択することもできる。ここ

SCREENCAP: Video of different behaviors in different browsers. From Left to Right: Chrome, FireFox, Safari

私が何か非標準をやっていますか?またはこれらのバグはありますか?もしそうなら、彼らはすべて正しく行動する方法がありますか? ありがとう!

答えて

1

.button { 
 
     margin: 0; 
 
     padding: 5px; 
 
     background-color: #CCCCCC; 
 
     height: 100%; 
 
     font-family: helvetica, sans-serif; 
 
     display: flex; 
 
     align-items: center; 
 
     -webkit-touch-callout: none; /* iOS Safari */ 
 
     -webkit-user-select: none; /* Safari */ 
 
     -khtml-user-select: none; /* Konqueror HTML */ 
 
     -moz-user-select: none; /* Firefox */ 
 
     -ms-user-select: none; /* Internet Explorer/Edge */ 
 
     user-select: none; /* Non-prefixed version, currently 
 
            supported by Chrome and Opera */ 
 
    } 
 

 
    .buttonDivider { 
 
     border-left: gray 1px solid; 
 
     height: 100%; 
 
    } 
 

 
    .button:hover{ 
 
     background-color: gray; 
 
     cursor: pointer; 
 
    } 
 

 
    #buttonBar { 
 
     display: flex; 
 
     border: gray 1px solid; 
 
     border-radius: 5px; 
 
     overflow: hidden; 
 
     margin: 0 auto; 
 
     align-items: center; 
 
     user-select: none; 
 
    } 
 

 
    #titleBar { 
 
     display: flex; 
 
     width: 100%; 
 
     height : 40px; 
 
     padding: 5px; 
 
     background-color: #CCCCCC; 
 
     user-select: none; 
 
    } 
 
    #titleText { 
 
     display: flex; 
 
     align-items: center; 
 
     font-family: helvetica, sans-serif; 
 
     font-size: 25px; 
 
     font-weight: bold; 
 
    } 
 

 
    body{ 
 
     margin: 0; 
 
     padding: 0; 
 
    } 
 
    div { 
 
     margin: 0; 
 
     padding: 0; 
 
    }
<div id="titleBar"> 
 
    <span id="titleText">CodePlayer</span> 
 
    <div id="buttonBar"> 
 
     <div id="buttonHTML" class="button">HTML</div> 
 
     <div class="buttonDivider"></div> 
 
     <div id="buttonCSS" class="button" style="user-select:none">CSS</div> 
 
     <div class="buttonDivider"></div> 
 
     <div id="buttonJS" class="button">JavaScript</div> 
 
     <div class="buttonDivider"></div> 
 
     <div id="buttonOutput" class="button">Output</div> 
 
    </div> 
 
    </div>

+0

ありがとうございました。実験的な技術としてまだラベル付けされているので、エンジン固有のCSSタグなしでは受け入れられません。 – FrostedCookies

2

ユーザー選択別々の行に他のブラウザでの機能のための前(-moz、-webkitと-ms)プレフィックスを追加します。

#titleBar { 
    display: flex; 
    width: 100%; 
    height : 40px; 
    padding: 5px; 
    background-color: #CCCCCC; 
    user-select: none; 
    -moz-user-select: none; 
    -webkit-user-select: none; 
    -ms-user-select: none; 
} 

あなたは、ユーザーの選択なしのためにそのコードを持っているように見えますボタンやHTMLのようないくつかの場所で、どこでエラーが発生したかを調べようとしていました。冗長コードを削除すると、プロジェクトがより複雑になり、#titleBar IDにのみ適用され、継承されていくのに役立ちます。

Mozillaはユーザが選択ここでの説明があります。https://developer.mozilla.org/en-US/docs/Web/CSS/user-select

ここで私は同様にその変化に作られたJSFiddleです:https://jsfiddle.net/0uvrpohp/1/

をサファリの問題や要素の完全な高さで充填について私はWindowsマシンでプレビューできませんでしたが、このスレッドは参考になるかもしれません:Chrome/Safari not filling 100% height of flex parent

+0

おかげKylegill、ユーザエージェントトリックはトリックをした。私はまだそう誰もエンジン特定せずにまだそれをサポートしていない「実験的」と考えていますご覧くださいコールアウト。そしてはい、私は可能なすべての場所でそれを試していた差をつけて削除するのを忘れているかどうかを確認してください。彼らは今行っている。親要素から継承しているのが分かります。ありがとう。私はあなたのリンクのおかげで、私が以下に投稿したサファリの問題を理解しました。 – FrostedCookies

0

私は違いを見ると思います。 これはおそらく助けることができますか?

border-top-style: none;` 
border-bottom-style: none; 
0

Safariの特定の問題のフォローアップとして...接頭辞を使用してみてください、私はよりよい解決策にKylegillのリンクのおかげで見つけました。答えの下でLink to 100% vertical fill issue

「4.ネストされたフレックスコンテナ(推奨)の割合の高さを取り除くテーブルのプロパティを取り除きます。縦線を取り除く。絶対配置を避ける。フレックスボックスを徹底的に守ってください。フレックスアイテム(.item)に display: flexを適用してフレックスコンテナにします。これは、自動的に親の全高を拡大するために、子(.item-内部を)伝えた、 align-items: stretchを設定します。」

私は.buttonクラスでheight:100%;を処分したalign-items: centerを保ち、#buttonBarコンテナの下に変更しますalign-items: stretch;に今ではSafariや他の2つのブラウザで偉大な作業だ。

.button { 
     margin: 0; 
     padding: 5px; 
     background-color: #CCCCCC;  
     font-family: helvetica, sans-serif; 
     display: flex; 
     align-items: center; 
    } 

    .buttonDivider { 
     border-left: gray 1px solid; 
     height: 100%; 
    } 

    .button:hover{ 
     background-color: gray; 
     cursor: pointer; 
    } 

    #buttonBar { 
     top: 0; 
     left: 0; 
     display: flex; 
     border: gray 1px solid; 
     border-radius: 5px; 
     overflow: hidden; 
     margin: 0 auto; 
     align-items: stretch; 
    } 
関連する問題