2013-05-02 9 views
6

Dzięki naszemu projektowi potrzebujemy wielu kolumn, aby wyświetlać tytuły z wielokropkiem, których nie oczekuję, że będą wielką sprawą, ale kiedy są zagnieżdżone wewnątrz display: table, obliczenia wydają się niepoprawne.Dlaczego obliczenia szerokości bez opasania zmieniają się, gdy są zagnieżdżone w elemencie z wyświetlaniem tabeli?

Ograniczenia wymagają elastycznego układu, dlatego potrzebne są procentowe szerokości (ustalone szerokości rozwiązałyby problem). A nasze układy wymagają display: table dużo dalej w górę drzewa i nie mogę go usunąć bez głównego reaktora.

Jeśli usuniesz wyświetlacz wszystko działa jak bym się spodziewał:

EXPECTED

Ale mając tego wyświetlacza powoduje rodzica, aby uwzględnić elementy podrzędne całkowita szerokość wstępnie obcięty (ale z nowrap brane pod konto). To tak, jakby początkowe renderowanie odbywało się bez definiowania przepełnienia i dodaje je po fakcie (ale w tym punkcie obliczenie szerokości jest zbyt duże).

RESULT

mogę domyślać się, dlaczego renderowania łamie, ale chciałbym bardziej ostateczną odpowiedź na temat, w jaki sposób przeglądarka renderuje to ... (Testowany w Chrome/FF/Safari na Mac)

+0

To trochę nieładne, zagnieżdżasz element blokowy (ul) wewnątrz elementu wbudowanego (zakres) i używasz tabeli wyświetlania bezpośrednio w czymś, co wyświetla komórkę tabeli (niestandardowe, więc ostateczne renderowanie przeglądarki staje się nieprzewidywalne), bez używanie tabeli-wiersza ... Czy możesz wyjaśnić, czego naprawdę potrzebujesz? – coma

+0

Powyższy przykład nie jest związany z moim kodem; Po prostu użyłem kilku elementów, aby zademonstrować zachowanie, które widzę (zamiast definiować rozdanie pełne klas). 'display: table' został pierwotnie dodany, więc wiele kolumn kończyłoby się z tą samą dynamiczną wysokością (bez js). W każdym razie to, czego chcę, to zrozumieć, dlaczego mamy takie zachowanie wokół nowrap (nie szukam "jak zrobić html wyglądać jak mój screen-shot", mogę to zrobić). Również nie spodziewałbym się, że mój wiersz będzie działał na moim przykładzie, ponieważ nie sądzę, że wpłynęłoby to na obliczenia szerokości (ale było trochę niechlujstwa, aby go pominąć). – SciSpear

+0

Zachowuje się tak samo we wszystkich przeglądarkach, więc uważam, że jest to zachowanie przewidywalne (i oczekiwany schemat). Domyślam się, że po prostu nie wiem wystarczająco dużo o niższych poziomach cykli malowania/układu przeglądarki, aby zrozumieć wynik. – SciSpear

Odpowiedz

2

Powodem tego jest sposób, w jaki układają się komórki układu tabel przy korzystaniu z metody układu auto.

Szczegóły dotyczące sposobu działania objaśniono w sekcji section 17 of the CSS spec, ale kluczowym punktem jest to, że układ auto zależy od zawartości komórki (dlatego jest tak duży, gdy wymusza zawartość na jednej linii), podczas gdy fixed układ zależy tylko od szerokości stołu (czego się spodziewasz).

Jeśli po prostu dodasz table-layout:fixed do selektora .table, Twój problem powinien zostać rozwiązany.

+0

Po prostu przeczytaj specyfikację i podsumowałeś to całkiem ładnie; to absolutnie odpowiedział na moje pytanie. – SciSpear

+0

Cieszę się, że mogę pomóc. Dziękuję za nagrodę. –

Powiązane problemy