2017-03-07 71 views
9

Mam POC, który muszę wypełnić i mogę tylko używać CSS do aktualizacji stylów produktu. Zastąpiłem jeden z obrazów produktu logo za pomocą atrybutu treści CSS.Div z zawartością CSS, po pseudo element nie jest widoczny

Muszę dodać prosty ciąg z numerem telefonu, który będzie wyświetlany po tym logo. Próbowałem użyć pseudoelementu :after, aby to zrobić. Działa to tylko wtedy, gdy zawartość div jest pusta (logo jest usuwane).

.demo { 
 
    content: url('http://placehold.it/350x150') 
 
} 
 

 
.demo:after { 
 
    content: 'test'; 
 
    display: inline-block; 
 
}
<div class="demo"></div>

Próbowałem zmieniając display do inline-block i ciężko kodowania height i width dla obu zasad. Zasadniczo wszystko, co mogłem znaleźć. Każda pomoc będzie bardzo ceniona.

JSFiddle tutaj: https://jsfiddle.net/qykbjznm/

+0

Możliwy duplikat: http://stackoverflow.com/questions/6949148/css-after-not-adding-content-to-certain-elements – pzworks

+0

@pzworks: Nawet blisko. – BoltClock

Odpowiedz

13

Właściwość content zastępuje całą zawartość w elemencie. Po dodaniu content do selektora niebędącego pseudo, zawartość ta zastąpi pseudo selektor ::before i.

Spróbuj więc wykonać to za pomocą właściwości content tylko w pseudo selektorach i ::after.

.demo:before { 
 
    content: url('http://placehold.it/350x150') 
 
} 
 

 
.demo:after { 
 
    content: 'some text'; 
 
    display: block; 
 
}
<div class="demo"></div>

+0

Wystarczy dodać do wyjaśnienia, że ​​"content" działa tylko na pseudo elementach tj. ': Before' i': after', więc użycie 'content' dla' .demo' nie powiedzie się. –

+0

@ Mr.Alien, jeśli spojrzysz na JSfiddle dostarczone przez OP, 'content' zostanie zastosowany do selektora niebędącego pseudo i będzie renderował jako' content' w ciągu ':: before' /' :: after' który jest korzeniem przyczyną problemu, który miał. – Jamy

+0

@Mr. Alien: Korekta, to tylko * obsługiwane * on :: before i :: after. Niektóre przeglądarki * mają * zastosowanie treści do rzeczywistych elementów, ale jest to zachowanie niestandardowe. – BoltClock

4

Można zastąpić tła z CSS i umieścić go jako obraz w formacie HTML:

.demo::after { 
 
    content: 'test'; 
 
    display: inline-block; 
 
}
<div class="demo"> 
 
    <img src='http://placehold.it/350x150'/> 
 
</div>

Albo nawet to zrobić:

.demo { 
 
    background: url('http://placehold.it/350x150'); 
 
    height:150px; 
 
    width:350px; 
 
} 
 

 
.demo::after { 
 
    content: 'test'; 
 
}
<div class="demo"></div>

Istnieją dwa różne wyniki.

0

mam pomieszane dookoła z JSFiddle trochę i okazało się, że jedynym realnym sposobem dokonywania wyświetlanie numeru telefonu poniżej obecnego div jest stworzenie innego Gr:

<div class="demo"></div> 
<div class="demo2"></div> 
<style> 
    .demo { 
    content: url('http://placehold.it/350x150'); 
    height:150px; 
    width:350px; 
    } 

    .demo2:before { 
    content: "test"; 
    } 
</style> 
2

Niektóre przeglądarki stosują właściwość content do rzeczywistych elementów, mimo że not being supported in CSS2. css-content-3 ma na to pozwolić, ale dopóki specyfikacja poziomu 3 nie stanie się standardem, co realistycznie nie będzie miało miejsca przez kolejne kilka lat (zwłaszcza biorąc pod uwagę, że nie miało to miejsca w ostatnich latach), stosując content do rzeczywistych elementów należy uznać za niestandardowe zachowanie.

Gdy wartość właściwości content jest obrazem, that image is inserted as replaced content. A gdy zostanie zastosowany do rzeczywistego elementu, zapobiega to pseudoelementom elementu.Dlatego Twój pseudoelement ::after nie pojawia się.

Wszystko, co musisz zrobić, to zastosować obraz do pseudoelementu elementu, a nie do samego elementu.