2017-01-24 44 views
1

我有問題::nth-child(n):before在用?:nth-​​child(n):之前是不工作?

所以,我使用SASS。
爲什麼下面的代碼不工作?

@for $i from 1 through 4 
    .block:nth-child(#{$i}):before 
     background: url(../../img/block-img-#{$i}.jpg) 
     background-size: cover 

它編譯成:

.content .cnt1 .block:nth-child(1):before { 
    background: url(../../img/block-img-1.jpg); 
    background-size: cover; 
} 

.content .cnt1 .block:nth-child(2):before { 
    background: url(../../img/block-img-2.jpg); 
    background-size: cover; 
} 

.content .cnt1 .block:nth-child(3):before { 
    background: url(../../img/block-img-3.jpg); 
    background-size: cover; 
} 

.content .cnt1 .block:nth-child(4):before { 
    background: url(../../img/block-img-4.jpg); 
    background-size: cover; 
} 

所有迪爾斯到的圖像是真實的。但它不工作:( 我做錯了嗎?

+2

你也可以舉一個相應的HTML的例子嗎? – Sirko

+1

您還需要將'content:'''添加到before-rule中,我想您需要爲該元素設置寬度和高度,否則背景可能會應用於0px x 0px元素。 –

+1

爲什麼在每個規則中設置背景大小:封面?這似乎是完全膨脹CSS的快速方法。 – BoltClock

回答

1

就其本身而言,一個::before僞元素是不可見的,你還需要給它一個display財產,以及一些內容,否則,也不會節目。

現在你沒有提供的HTML,但如果我可以推測,它只是一堆嵌套的div時,需要額外的CSS看起來是這樣的。

.content .cnt1 .block::before { 
    display:block; content:''; 
    height:200px;    /* a height, any height */ 
} 

或者一個更完整的例子:(不要介意背景圖片)

.content .cnt1 .block::before { 
 
    display:block; content:''; 
 
    height:200px;    /* a height, any height */ 
 
} 
 
.content .cnt1 .block:nth-child(1)::before { 
 
    background: url(http://images.clipartpanda.com/number-clipart-niXxEn7iB.jpeg); 
 
    background-size: cover; 
 
} 
 

 
.content .cnt1 .block:nth-child(2)::before { 
 
    background: url(http://images.clipartpanda.com/clipart-numbers-9czE7pRpi.png); 
 
    background-size: cover; 
 
} 
 

 
.content .cnt1 .block:nth-child(3)::before { 
 
    background: url(http://images.clipartpanda.com/creation-clip-art-RTAE8d8TL.jpeg); 
 
    background-size: cover; 
 
} 
 

 
.content .cnt1 .block:nth-child(4)::before { 
 
    background: url(http://images.clipartpanda.com/number-clip-art-RcA6Axgji.png); 
 
    background-size: cover; 
 
}
<div class="content"> 
 
<div class="cnt1"> 
 
<div class="block"></div> 
 
<div class="block"></div> 
 
<div class="block"></div> 
 
<div class="block"></div> 
 
</div> 
 
</div>

順便說,與一個結腸:before符號已被棄用;首選的方法是::before

或者,如果您想使用:before與舊版瀏覽器兼容,那麼請注意,您也不能使用background-size
也就是說,使用:before的唯一原因是如果您想與IE8兼容。 :before適用於IE,::before不適用。
但是因爲IE8不支持background-sizenth-child(),所以你不會得到這個特殊的例子在IE8中工作,所以沒有必要打擾。

+0

噢!我做的比...更多時間,我不知道問題在哪裏..非常感謝! – RamoFX

+0

我懷疑是否使用單個冒號排除了使用「背景大小」。另外,爲什麼我需要添加一個顯式的'display'屬性? –

+1

@torazaburo:Lister先生說[世界上唯一隻支持單冒號語法的瀏覽器不支持背景大小](http://stackoverflow.com/a/28527928),所以使用如果您要依賴背景大小,那麼兼容性的單分號語法就毫無意義。 display:block聲明是必需的 - 除非聲明已經存在於其他地方或存在其他聲明導致它們被阻塞 - 因爲僞元素沒有默認顯示值,所以它們採用初始值,內聯和高度屬性將不適用。 – BoltClock