Perfection or Vanity

Project: Terminated

Blog nie jest już dalej prowadzony ani aktualizowany. Mimo tego, wpisy i komentarze są dalej dostępne. Możesz przeczytać pożegnalny wpis albo przejść do archiwum.

(Jest to autoryzowane tłumaczenie artykułu „Block vs. Inline, Part 1” autorstwa Tommy'ego Olssona.)

Istnieją dwa typy elementów w HTMLu: elementy poziomu blokowego i liniowego. Standardy nie mówią wiele o tym jak elementy blokowe powinny być wyświetlane, ale wspominają że zaczynają się one od nowej linii - zachowania którego nie przyjmują natomiast elementy liniowe (szeregowe).

Wszystkie przeglądarki, nawet te z brakami wsparcia dla CSS mają domyślne ustawienia prezentacji dla każdego elementu na stronie. Elementy blokowe wyświetlane są z ukrytym złamaniem linii przed nim i po, podczas gdy elementy liniowe tam gdzie się pojawią w strumieniu tekstu. Dlatego nie jest możliwe umieszczenie obok siebie dwóch elementów blokowych bez użycia CSS.

Czynnikiem określającym który element jest blokowy, a który liniowy jest definicja typu dokumentu - DTD. Nie możemy wpłynąc na to w żaden sposób.

Elementy blokowe

Elementy blokowe zazwyczaj zawierają w sobie inne elementy blokowe, jednakże nie dzieje się tak zawsze.

Niektóre z elementów blokowych mogą zawierać jedynie inne elementy blokowe. Na przykład <form/>. W dokumencie typu ścisłego <body/> może zawierać jedynie elementy blokowe. Tak więc cały tekst musi zostać umieszczony w akapity bądź innych blokach.

Inne elementy blokowe mogą zaś zawierać tylko tekst albo elementy liniowe. Najbardziej znanym przykładem takiego elementu jest <p/>. Akapit.

Trzecią odmianą bloku jest element który może zawierać w sobie obydwa typy elementów. Na przykład <div/> albo <li/>.

Elementy liniowe

Elementy liniowe zazwyczaj zaznaczają semantyczne znaczenie, mimo że istnieją także czysto prezentacyjne elementy. Są one nadal akceptowane w najnowszych standardach. Przykładem semantycznego elementu liniowego jest <dfn/>, który określa definicję danego terminu. (przyp. tłum.: prezentacyjnym elementem liniowym jest <u/>)

Elementy liniowe generalnie zawierają tylko tekst i inne elementy liniowe. Odstępstwem od reguły jest element <object/>, który może zawierać także elementy blokowe.

Iluzjonerzy

Czasem elementy zachowują się jak bloki, a czasem jak elementy szeregowe. Przykładami tutaj są <ins/> i <del/>. To kontekst określa jak są traktowane i co mogą przez to w sobie zawierać. Kiedy przyjmują zachowanie bloku, mogą zawierać inne bloki, elementy liniowe i tekst. A kiedy są liniowe, to tylko tekst i inne liniowe.

Elementy blokowe kontra liniowe w CSS

Pojęcia blok i element szeregowy także istnieją w CSS, gdzie są używane do rozróżnienia dwóch wyraźnie odmiennych typów pojemników, niewidzialnych prostokątów, uczestniczących w prezentacji danego elementu na stronie.

Ogólnie rzecz biorąc, elementy poziomu blokowego w HTML tworzą pojemniki blokowe, podczas gdy elementy poz. liniowego tworzą pojemniki szeregowe.

W przeciwieństwie do sztywnej klasyfikacji elementów blokowych i liniowych w HTML, w CSS możemy kontrolować ich zachowanie. Robimy to poprzez właściwość display. To znaczy, że możemy sprawić, aby element blokowy tworzył pojemnik szeregowy i na odwrót.

Często spotykanym błędem początkujących jest myślenie, że w ten sposób możemy zmienić typ elementu, a nie tylko tworzony pojemnik. Na przykład niektórzy ustawią właściwość display:block dla elementu <span/> i spróbują zagnieździć potem element <p/> w ten <span/>. To nie jest dozwolone. Właściwość display, jak sama nazwa wskazuje, kontroluje jedynie warstwę prezentacyjną elementu, nie tym czym jest.

Liniowa larwa staje się blokowym motylem

To co do tej pory powiedzieliśmy o typach pojemników odnoszących się jedynie do elementów w normalnym strumieniu dokumentu. Kiedy elementy stają się pływające (float:left albo float:right) lub pozycjonowane absolutnie (position: absolute albo position:fixed), rządzą się własnymi zasadami. Zwykle tworzą pojemniki blokowe, to znaczy wartość display przyjmuje block.

Dla elementów pozycjonowanych bądź pływających właściwość display jest zwykle ignorowana, z jednym godny uwagi wyjątkiem, o którym zaraz powiemy.

Pojemnik nie istnieje

Gdy przyznamy elementowi właściwość display:none rzeczy mają się trochę inaczej. Wtedy element wcale nie twrozy pojemnika. I to nie jest kwestia niewidocznego pojemnika. Po prostu nie ma go w ogóle. Różnica jest o wiele ważniejsza niż może się wydawać na pierwszy rzut oka.

Tutaj dochodzimy do naszego wyjątku z display. Dla elementu z display:none właściwości float i position są po prostu ignorowane.

Gdy żaden pojemnik nie jest tworzony dla elementu z display:none nie jest także możliwe sprawienie, aby podrzędny mu element był widoczny. Przyjrzyj się następującemu przykładowi:

  1. <div style="display:none">
  2. <p style="display:block">Tekst</p>
  3. </div>

Moglibyśmy myśleć, że ten kod spodowuje przywrócenie widoczności akapitowi, lecz to nie jest tak. Odkąd element nadrzędny (<div/>) nie tworzy pojemnika, element podrzędny (<p/>) także nie może.

  • Ciąg dalszy nastąpi…

Informacje i hiperłącza

Blog o projektowaniu zgodnych ze standardami stron internetowych.

Praktyczne przykłady, sztuczki CSS, sposoby obchodzenia błędów przeglądarek, lekki i nieinwazyjny JavaScript, użyteczny design, dostępność i skrypty użytkownika.

RSS

Informacje o wpisie

Napisał riddle 01 września 2005 o 20:28

Kategorie: CSS, HTML & Semantyka, Standardy sieciowe

Dodaj do:

Wpisy archiwalne

Archiwum miesięczne

Dzięki!

Dodaj bloga do Technorati Favorites Dodaj bloga do Del.icio.us Blog należy do sieci 10przykazań.com

  1. Łukasz Grabuń 1 01 września 2005, 20:31

    Piotrek, weż Ty kup sobie serwer wirtualny i domenę i zrób porządną stronę. Serio serio.

    Pamiętam, jak ja bujałem się z tłumaczeniem. Nie będę więc nic mówił :-)

  2. dzieki :)
    BTW. wiesz ze w xhtml mozesz zrobic wlasny znacznik i ustawic jego paremtry w CSS?

  3. :) Fajne. Czekam na ciąg dalszy :) No i popieram Łukasza.

  4. Łukasz Grabuń 4 01 września 2005, 20:47

    @d4rky: to do tego XHTML-a potrzeba? :->

    Jak mniemam, nie mówisz o tym http://www.cs.tut.fi/~jkorpela/html/own-dtd.html

  5. Ja też popieram Łukasza :)

  6. Ach, moznaby kiedys zrobic takie polskie alistaparts...

  7. Jeśli chodzi o oddzielną stronę taką porządną, z systemem blogowym, możliwością dodania czego-dusza-zapragnie, to first things first.

    Najpierw nauczę się wszystkiego co potrzeba, żeby móc się tytułować jako webmaster/webdesigner (bo jak czytam teraz część II to 40% nie rozumiem i bynajmniej nie chodzi o angielski). Naumiem się ECMAScriptu, PHP + baz danych. Potem upewnie się, że mój życiowy projekt, nad którym aktualnie pracuję, działa, ma się dobrze (to też wymagać będzie serwera i domeny :P) i będzie żył aż do mojej śmierci + plany na po.

    Do tego ja nawet jeszcze studentem nie jestem. ;) Na jogger.pl są fajni ludzie, ja czasem piszę o zupełnych pierdołach plus zawszę mogę wyeksportować całość do XMLa i przerzucić do bazdy danych jak już postanowię mieć riddle.info/org/net (bo dotcomem nie zostanę! :D). :P Dobrze mi tutaj. :)

    Anyway, dzięki za pochlebne słowa. Chciałem napisać to sam, ale ten art całkiem nieźle pokrywa ten temat więc po co duplikować pracę.

    A part II będzie jak stwierdzę, że nadszedł czas. :D

  8. Riddle, ale jak już Łukasz gdzieś wspomniał, paragraf to takie cuś, co sie łamie przekraczając 50tkę na warszawskich ulicach. Angielskie /paragraph/ tłumaczymy jako akapit.

  9. a moze i nie w xHTML (kolega jak mu powiedziałem, mówił, że słyszał o tym w xhtmlu, stąd sugestia)

    paragraph => akapit, ale paragraf też chyba dobrze ;)

  10. "Paragraf - znak § stawiany wraz z kolejnym numerem na początku ustępu tekstu; itd."

    Pan Kopaliński potwierdza jednak wersję puck'a ;).

  11. Polskie alistapart się robi :>

  12. @nbw, ooo, a może jakieś szczegóły? :)

  13. Szczegóły, hm. Tłumaczenie artykułów ala + uzupełnione oryginalnymi artykułami polskimi + dodatkowe artykuły tłumaczone, które na ala się nie ukazały.

    Część artykułów jest już w kursie na browsehappy (obecnie posługujemy się skrótem BH bądź KBH), ale nie są dostępne publicznie (muszą przejść korektę, formatowanie i poczekać na resztę treści kursu, oraz zapewne na nowy wygląd kursu, który powinien pojawić się "soon".

  14. Już raz pisałam, ale jeszcze raz tu napiszę. DZIĘKI. Dobra robota! :) Czekam na ciąg dalszy...

  15. Ups, to miało być pod innym wątkiem... no tak. Tam, gdzie opisujesz tricki joggerowe.

  16. Czy elementom liniowym mozemy ustawic width i height? Probuję zrobić wypunktowanie liniowo jako prostokaty z ramka i tlem oddzielone od siebie marginesem i kurcze zamiast prostokatow sa tylko kreski :)

  17. Możesz im nadać line-height oraz padding, ale nie wymiary. Jeśli chcesz wymiarów, musisz użyć inline-block, ale zobacz tutaj: http://perfectionorvanity.com/2006/03/24/rzadko-uzywane-wartosci-display/ … prawie nic tego nie umie, więc podszedłbym do sprawy inaczej.

  18. Inaczej, czyli poprzez sztuczne ustawienie wymiarów (padding)? Troszkę to nie teges :/ Ale jeśli nie będzie innego wyjścia...

  19. beznadzieja

  20. Ivan Grozny 20 02 grudnia 2007, 14:44

    jestescie pojebani na maxa :o)

Dodaj komentarz

Do formatowania komentarzy używaj Textile (HTML nie działa). Szczególnie jeśli wklejasz większe fragmenty kodu. W razie niepewności użyj podglądu komentarza.

Wypowiedzi obraźliwe, infantylne oraz nie na temat będą moderowane – pisząc postaraj się zwiększyć wartość dyskusji.

Komentarze nie służą do wysyłania wiadomości albo informowania o błędach, itd. Chcesz coś mi napisać – skontaktuj się.