Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSS]Css'owanie table
Forum PHP.pl > Forum > Przedszkole
konrados
Cześć,

Gdzieś chyba popełniam bardzo głupi błąd, albo nie wiem jak działają selektory w css (chyba to drugie smile.gif ). Mam taki kod:

  1.  
  2. .main_table>tr>td.left{
  3. color:red;
  4. width:200px;
  5. }
  6. /*to też nie wychodzi: */
  7. .main_table>tr>td{
  8. color:red;
  9. width:200px;
  10. }
  11.  
  12. <table class = 'main_table'>
  13. <tr>
  14. <td class = 'left'>jakiś tekst</td>
  15. </tr>
  16.  


Jak widać, próbuję stylować td klasy .left. Wiem, że mógłbym zrobić:
  1. .main_table .left{
  2. color:red;
  3. width:200px;
  4. }


Ale mi właśnie zależy na tym, by zmienić styl dla klasy .left tylko na tym poziome, bo w main_table - tr - td - left będę miał inne elementy, których klasa też będzie miała nazwę 'left'. Czyli takie coś chcę zrobić:
  1. <table class = 'main_table'>
  2. <tr>
  3. <td class = 'left'>
  4. <table class = 'sub_table'>
  5. <tr>
  6. <td class = 'left'>Left w sub_table</td>
  7. </tr>
  8. </table>
  9. </td>
  10. </tr>


I chciałbym móc określić styl dla .left tylko na pierwszym poziomie, a nie na wszystkich.

Jak to mogę zrobić?
CuteOne
  1.  
  2. .main_table tr td.left { color: white; }
  3. //lub prosciej
  4. .main_table .left { color: white; }
  5.  
  6. .sub_table tr td.left { color: green; }
  7. //lub prosciej
  8. .sub_table .left { color: green; }
  9.  


ps. co to za stylowanie skoro tworzysz sam sobie problemy...
konrados
@CuteOne

Miałem mały urlopik, więc ze spowolnionym zapłonem odpowiadam, za co z góry przepraszam:)

Chodziło mi o ostylowanie tylko elementu .main_table>tr>td.left.

Rzecz w tym, że robiąc layout, często robimy klasę 'left' i 'right". Jest sobie np. główna strona, tam mamy 'menu' i 'content' - ja to lubię nazywać 'left' i 'right' (które siedzą w divie 'page'). Potem w 'content' znowu mamy np. 'articles' == listę ostatnich artykułów i znowu : 'left' dla zdjęcia i 'right' dla tytułu i treści. Ale w tejże klasie 'articles/right' znowu możemy mieć klasę 'left': dla 'tytuł i treść' oraz right dla 'różne operacje typu zagłosuj na ten artykuł'.

Tak więc często powtarza się schemat 'left' i 'right'. Do tej pory robiłem to na divach lub tables i zawsze nazywałem poszczególne klasy np. 'page_left' lub 'article_left' lub, no właśnie : 'article_left_left'.

Stąd, zainteresowałem się czy nie można tego zrobić lepiej, czyli stylować tylko 'dany div>left'.


  1. <div class = 'left'>
  2. <div> coś w page-left</div>
  3. </div>
  4. <div class = 'right'>
  5. <div class = 'left'>coś w page-right-left</div>
  6. <div class = 'right''>coś w page-right-right</div>
  7. </div>


I teraz, chciałem osobno stylizować page-left i page-right-left. Przy czym 'page-right-left' nie miało mieć właściwości 'page-left'.

Udawało mi się to z elementami typu div, p etc, ale nie wyszło mi z tabelką, i stąd moje pytanie.

Ale udało mi się znaleźć odpowiedź: w chromie kliknąłem na element tr...td..left i okazało się, że chrome (ale też i ff) "dorabia" dodatkowy nadrzędny element o nazwie 'tbody'.

Mamy więc tak naprawdę: .main_table>tbody>tr>td.left

Teoretycznie wiem, że tak powinna wyglądać poprawna tabelka (wiersze są w tbody) ale nie wiedziałem, że sobie przeglądarki w razie braku tbody dorabiają go samemu.

Tak więc odpowiedź na swoje pytanie znalazłem, ale mam w związku z tym dwa kolejne pytania:

Czy są inne tego typu pułapki, że sobie przeglądarka sama dodaje nowy element, w związku z czym stylowanie z użyciem operatora > nie działa? Oraz:

Czy moja koncepcja jest sensowna? smile.gif Często w layoucie pojawiają się elementy klasy 'left', 'right', 'title', 'content', chciałem to jakoś uporządkować w html'u i cssi'sie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.