2012-03-20 4 views
7

Próbuję nauczyć się używać: przed i: po pseudo elementów. Próbuję dodać czarne tło na dole strony jako przyklejoną stopkę, ale wygląda na to, że działa nieprawidłowo.: przed i: po pseudo elementach na znaczniku html jest wonky w Chrome

Zasadniczo mam powtarzający się obraz jako tło elementu HTML, a następnie dodaję absolutny div umieszczony na dole z jednolitym czarnym tłem.

Chciałbym zaznaczyć, że jest to eksperyment edukacyjny, a nie w jaki sposób osiągnęłam ten sam efekt, ale próbuję pracować w przeglądarce Firefox, ale nie w Chrome!

Oto mój CSS:

html { 
    background-image: url('images/template/html-bg.jpg'); 
    background-position: top left; 
    background-repeat: repeat-x; 
    background-color: #0e0e0e; 
    height: 100%; 
    position: relative; 
} 

html:before { 
    content: ""; 
    display: block; 
    background-color: #000; 
    width: 100%; 
    height: 138px; 
    bottom: 0px; 
    position: absolute; 
} 

W FF strona jest renderowane jak bym się spodziewać, ale w Chrome cała strona jest czarna ... Wszelkie pomysły, ja to robię źle?

+2

Nie ma nic "przed" znacznikiem html, poza DOCTYPE, nie uważam, że jest to poprawny CSS. –

+0

Więc powinienem używać tylko tych pseudoelementów na elementach w tagach body? – Gazillion

+0

tak użyj w ciele zamiast tagu HTML – sandeep

Odpowiedz

6

Twój CSS powinien działać zgodnie z oczekiwaniami, ponieważ Twój pseudoelement powinien być narysowany w kontekście initial containing block (widok, reprezentowany przez element html), a właśnie to robi Firefox.

Twój szczególny problem został zgłoszony jako Chrome bug, ale nie został rozwiązany. Jako obejście można zastosować swoją pseudo-element do body Zamiast:

body:before { 
    content: ""; 
    display: block; 
    background-color: #000; 
    width: 100%; 
    height: 138px; 
    bottom: 0px; 
    position: absolute; 
} 

W zależności od układu, może trzeba też utrzymać zasadę html lub zmienić go na body również.

+0

To jest dokładnie to, co to jest! Czuję się wyjątkowo, gdy natknąłem się na błąd przeglądarki Chrome: P Dziękuję za pomoc! – Gazillion

+0

Nie wierzę, że to błąd per se. Czy "HTML" ma w ogóle mieć "zawartość"? HTML to płótno. Nie zdziwiłbym się, gdyby przeglądarka domyślnie uderzyła 'display: none' we wszystkie elementy w elemencie HTML z wyjątkiem' '. W przeciwnym razie zawsze będziesz miał spacje w drzewie DOM powyżej i poniżej ciała. –

+0

@Mr Lister: Oto moje zdanie: 'html' jest głównym elementem DOM. 'head' i' body' są jego dziećmi, które są również reprezentowane jako węzły DOM. Pseudoelementy ': before' i': after' opisują wstawianie treści przed lub po zawartości drzewa dokumentu elementu, więc * powinny * działać z elementem 'html', ponieważ jego zawartość drzewa dokumentu składa się z' head' i ' elementy ciała. Tak jak powiedziałeś, 'html' to" płótno ", na którym rysowane są elementy wizualne, a' head' ma początkowy styl 'display: none'. – BoltClock