2017-02-07 38 views
0

我在使用::before僞元素時遇到問題。在我的筆中,我使用::before::after選擇器爲我的div傾斜邊緣。在第一個div,這似乎工作正常。但是,在第二個div上,斜線僅延伸div的寬度的50%。這裏是我的代碼:爲什麼我的:: 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>

而且,這裏的鏈接到我的筆:在::before樣式規則http://codepen.io/Hudson_Taylor11/pen/XpBMwM?editors=0100

+1

':: before'是一個僞**元素**而不是僞類**。只是說' –

回答

3

你錯過left: 0。我認爲它默認爲auto,這是不一樣的價值。

以下是詳細信息:https://developer.mozilla.org/en-US/docs/Web/CSS/left#Values

它確實默認爲auto,其中MDN描述如下:

是表示關鍵字: 的絕對定位的元素,該元素的位置基於正確的屬性和寬度:自動作爲基於內容的寬度。

我不完全確定如何計算,一些瀏覽器似乎有不同的解釋。我認爲FF會(或曾經)將absolutely定位的元素與autoleftright定位元素,他們通常會出現,如果他們是static,但我必須建立一些測試以確保。無論如何,總是明確設置左,右或兩者以減少歧義通常是一個好主意。

+0

謝謝!這是完美的。只是好奇,爲什麼我需要這樣做的第一,但不是第二個div? –

+0

@ H.Allen老實說,我不確定。它與瀏覽器如何解釋左側和右側的計算值有關。我用一些更多的信息更新了答案,但是我必須做更多的研究才能找出它爲什麼這麼做。您還可以在這裏查看CSS(或JavaScript,因爲它更受歡迎)在這裏聊天,詢問這些人。他們比我有更多的知識和經驗。 –

+0

Gotcha。謝謝! –

相關問題