2017-02-07 7 views
0

::before疑似要素の使用に問題があります。私のペンでは、::before::afterセレクタを使用して、divsの傾斜エッジを与えています。最初のdivでは、これは正常に動作するようです。しかし、2番目のdivでは、傾斜はdivの幅の50%だけ伸びています。ここに私のコードだ:my :: before擬似要素が機能しないのはなぜですか?

.services { 
 
    text-align: center; 
 
    background: linear-gradient(to right, #F1F2B5 , #135058); 
 
    height: 250px; 
 
    width: 100%; 
 
    position: relative; 
 
} 
 
.services::before { 
 
    content: ""; 
 
    background: linear-gradient(to right, #F1F2B5 , #135058); 
 
    width: 100%; 
 
    height: 200px; 
 
    transform: skewY(-5deg); 
 
    position: absolute; 
 
    top: -100px; 
 
    z-index: -1; 
 
} 
 
.flex { 
 
    display: flex; 
 
    width: 100%; 
 
    border: 1px solid red; 
 
} 
 
.box-alt { 
 
    width: 100px; 
 
    height: 100px; 
 
    background-color: blue; 
 
    border: 3px solid grey; 
 
    transform: rotate(45deg); 
 
}
<div class="services"> 
 
    <h2>Services</h2> 
 
    <hr /> 
 
    <div class="flex"> 
 
    <div class="box-alt">hi</div> 
 
    <div class="box-alt">hi</div> 
 
    <div class="box-alt">hi</div> 
 
    </div> 
 
</div>

また、ここで私のペンへのリンクです:http://codepen.io/Hudson_Taylor11/pen/XpBMwM?editors=0100

+1

':: before'は擬似クラスではなく、擬似**要素**です。ちょうどスティーン ' –

答えて

3

あなたは::beforeスタイルルールにleft: 0を逃しています。私はそれが同じ値ではないautoにデフォルトと思う。ここで

は詳細です:https://developer.mozilla.org/en-US/docs/Web/CSS/left#Values

それは次のようにMDNが記述autoにデフォルト、行います

が表すキーワードである:絶対配置要素のための 、要素の位置は上のベースを右のプロパティと幅を扱う:autoはコンテンツに基づく幅です。

私はそれがどのように計算され、いくつかのブラウザがそれを異なって解釈しているように見えるわけではありません。私はFFがの要素をautoleftrightの位置に置くと思いますが、通常はstaticの場合に表示されますが、確かにいくつかのテストを行う必要があります。どちらの場合でも、あいまいさを減らすために、常に左か右かどちらか一方を明示的に設定することは、一般的には良い考えです。

+0

ありがとう!それは完全に機能します。ちょっと不思議なことに、なぜ私は最初のdivではなく、最初のdivでそれを行う必要がありましたか? –

+0

@ H.Allen正直、私は確信していません。ブラウザが左と右の計算値を解釈する方法と関係しています。私はいくつかのより多くの情報で答えを更新しましたが、なぜこれを行うのかを正確に調べるためには、より多くの研究をしなければなりません。あなたはまた、CSS(または、より一般的なのでJavaScript)をチェックして、それらの人に尋ねることができます。彼らは私よりも多くの知識と経験を持っています。 –

+0

Gotcha。ありがとう! –

関連する問題