Edit - Original Tytuł: Czy istnieje alternatywny sposób osiągnięcia border-collapse:collapse
w CSS
(w celu uzyskania upadł, zaokrąglony narożnik tabeli)?
Ponieważ okazuje się, że zwykłe zwinięcie granic tabeli nie rozwiązuje głównego problemu, zaktualizowałem tytuł, aby lepiej odzwierciedlić dyskusję.
Próbuję zrobić stół z zaokrąglonymi narożnikami, używając CSS3
border-radius
właściwości. Style tabel, których używam, wyglądają mniej więcej tak:
table {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px
}
Oto problem. Chcę także ustawić border-collapse:collapse
właściwość, a gdy zostanie border-radius
ona ustawiona, przestanie działać. Czy istnieje sposób oparty na CSS, border-collapse:collapse
dzięki któremu mogę uzyskać taki sam efekt, jak w rzeczywistości bez jego używania?
Edycje:
Stworzyłem prostą stronę, aby zademonstrować tutaj problem (tylko Firefox / Safari).
Wygląda na to, że duża część problemu polega na tym, że ustawienie tabeli zaokrąglonych narożników nie wpływa na narożniki td
elementów narożnych . Gdyby stół miał tylko jeden kolor, nie stanowiłoby to problemu, ponieważ mogłem po prostu td
zaokrąglić górne i dolne rogi odpowiednio dla pierwszego i ostatniego rzędu. Używam jednak różnych kolorów tła dla tabeli, aby odróżnić nagłówki i paski, więc td
elementy wewnętrzne będą również pokazywały zaokrąglone rogi.
Podsumowanie proponowanych rozwiązań:
Otaczanie stołu innym elementem z okrągłymi narożnikami nie działa, ponieważ kwadratowe narożniki stołu „krwawią”.
Podanie szerokości ramki na 0 nie powoduje zwinięcia tabeli.
Dolne td
rogi wciąż są kwadratowe po ustawieniu odstępu komórek na zero.
Zamiast tego użycie JavaScript - pozwala uniknąć problemu.
Możliwe rozwiązania:
Tabele są generowane w PHP, więc mógłbym po prostu zastosować inną klasę do każdego z zewnętrznych th / tds i stylizować każdy narożnik osobno. Wolałbym tego nie robić, ponieważ nie jest to zbyt eleganckie i trochę kłopotliwe dla wielu stołów, więc proszę o sugestie.
Możliwym rozwiązaniem 2 jest użycie JavaScript (w szczególności jQuery) do stylizacji narożników. To rozwiązanie również działa, ale wciąż nie do końca to, czego szukam (wiem, że jestem wybredny). Mam dwie rezerwacje:
- jest to bardzo lekka strona i chciałbym ograniczyć JavaScript do minimum
- częścią apelu, który ma dla mnie użycie granicy promienia, jest pełna wdzięku degradacja i stopniowe ulepszanie. Używając promienia obramowania dla wszystkich zaokrąglonych rogów, mam nadzieję, że będę mieć konsekwentnie zaokrągloną stronę w przeglądarkach obsługujących CSS3 i konsekwentnie kwadratową stronę w innych (patrzę na ciebie, IE).
Wiem, że próba zrobienia tego dzisiaj z CSS3 może wydawać się niepotrzebna, ale mam swoje powody. Chciałbym również zauważyć, że ten problem jest wynikiem specyfikacji w3c, a nie słabej obsługi CSS3, więc każde rozwiązanie będzie nadal odpowiednie i przydatne, gdy CSS3 będzie bardziej rozpowszechniony.
źródło
Odpowiedzi:
Rozgryzłem to. Musisz tylko użyć specjalnych selektorów.
Problem z zaokrąglaniem rogów stołu polegał na tym, że elementy td również nie zostały zaokrąglone. Możesz rozwiązać ten problem, wykonując coś takiego:
Teraz wszystko zaokrągla się poprawnie, z wyjątkiem tego, że wciąż istnieje problem
border-collapse: collapse
zepsucia wszystkiego.Obejściem tego problemu jest dodanie
border-spacing: 0
i pozostawienie wartości domyślnejborder-collapse: separate
w tabeli.źródło
border-spacing: 0;
stylu obramowania?border-spacing: 0;
tak, jak zalecił Ramon, naprawiłem to dla mnie. Upewnij się, że dodajesz styleborder-radius
iborder-spacing
do elementów<th>
lub<td>
, a nie<thead>
lub<tbody>
.border-spacing: 0; border-collapse: separate;
Poniższa metoda działa (przetestowana w Chrome) przy użyciu ramki
box-shadow
rozłożonej1px
zamiast „rzeczywistej” ramki.źródło
Jeśli chcesz tylko rozwiązanie CSS (nie trzeba ustawiać
cellspacing=0
w kodzie HTML), które pozwala na obramowanie 1px (czego nie możesz zrobić zborder-spacing: 0
rozwiązaniem), wolę wykonać następujące czynności:border-right
iborder-bottom
dla swoich komórek tabeli (td
ith
)border-top
border-left
first-child
ilast-child
selektorów, okrągłe odpowiednich narożnikach dla komórek tabeli w czterech rogach.Zobacz demo tutaj.
Biorąc pod uwagę następujący kod HTML:
ZOBACZ przykład poniżej:
źródło
table.Info
klasa ma z tym wspólnego?Czy próbowałeś używać
table{border-spacing: 0}
zamiasttable{border-collapse: collapse}
???źródło
border-spacing: 0
polega na tym, że nie możesz mieć granicy 1px, prawda? Ponieważ granice układają się w stos zamiast się zwijać.border-collapse: separate; border-spacing: 0; border-radius: 10px; overflow: hidden;
dał dokładnie to, czego potrzebowałem.Prawdopodobnie będziesz musiał umieścić wokół stołu kolejny element i nadać mu styl zaokrągloną ramkę.
Do pracy projekt określa, że
border-radius
nie ma zastosowania do elementów tabeli, gdy wartośćborder-collapse
jestcollapse
.źródło
overflow:hidden;
Jak powiedział Ian, rozwiązaniem jest zagnieżdżenie tabeli w div i ustawienie jej w następujący sposób:
Dzięki
overflow:hidden
kwadratowym rogom nie będzie krwawić przez div.źródło
overflow: hidden
każdym popover / podpowiedzi zostanie przycięty przez wymiary opakowania.Według mojej najlepszej wiedzy, jedynym sposobem na zrobienie tego byłoby zmodyfikowanie wszystkich komórek w następujący sposób:
A następnie, aby uzyskać granicę na dole i po prawej stronie
:last-child
nie jest ważny w ie6, ale jeśli używaszborder-radius
, zakładam, że cię to nie obchodzi.EDYTOWAĆ:
Po spojrzeniu na przykładową stronę wydaje się, że możesz obejść ten problem za pomocą odstępów między komórkami i wypełniania.
Grube szare obramowania, które widzisz, są w rzeczywistości tłem stołu (możesz to wyraźnie zobaczyć, jeśli zmienisz kolor obramowania na czerwony). Jeśli ustawisz odstęp komórek na zero (lub równoważnie:),
td, th { margin:0; }
szare „ramki” znikną.EDYCJA 2:
Nie mogę znaleźć sposobu na zrobienie tego tylko z jednym stołem. Jeśli zmienisz wiersz nagłówka na tabelę zagnieżdżoną, być może będziesz w stanie uzyskać pożądany efekt, ale będzie to więcej pracy, a nie dynamiki.
źródło
Próbowałem obejścia tego problemu przy użyciu pseudoelementów
:before
oraz:after
wthead th:first-child
ithead th:last-child
W połączeniu z zawijaniem stołu za pomocą
<div class="radius borderCCC">
patrz jsFiddle
Działa dla mnie w chrome (13.0.782.215) Daj mi znać, czy to działa dla Ciebie w innych przeglądarkach.
źródło
W rzeczywistości możesz dodać swoje
table
wnętrzediv
jako opakowanie. a następnie przypisz teCSS
kody do opakowania:źródło
Podane odpowiedzi działają tylko wtedy, gdy wokół stołu nie ma granic, co jest bardzo ograniczające!
Mam do tego makro w SASS, które w pełni obsługuje zewnętrzne i wewnętrzne granice, uzyskując taki sam styl jak zawijanie granic: zwijanie bez faktycznego jego określania.
Testowane w FF / IE8 / Safari / Chrome.
Daje ładne zaokrąglone krawędzie w czystym CSS we wszystkich przeglądarkach, ale IE8 (degraduje się z wdziękiem), ponieważ IE8 nie obsługuje promienia obramowania :(
Niektóre starsze przeglądarki mogą wymagać współpracy z prefiksami dostawców
border-radius
, więc w razie potrzeby dodaj te prefiksy do swojego kodu.Ta odpowiedź nie jest najkrótsza - ale działa.
Aby zastosować ten styl, po prostu zmień swój
znacznik do następującego:
i pamiętaj o dołączeniu powyższych stylów CSS do swojego HTML.
Mam nadzieję że to pomoże.
źródło
border-radius
.Dla graniczy i przewijalnej stole, to wykorzystać (zastąpić zmienne,
$
począwszy od tekstów)Jeśli używasz
thead
,tfoot
lubth
, po prostu zastąpićtr:first-child
, atr-last-child
itd
z nimi.HTML:
źródło
Miałem ten sam problem. usuń
border-collapse
całkowicie i użyj:cellspacing="0" cellpadding="0"
w dokumencie HTML. przykład:źródło
Właśnie napisałem zwariowany zestaw CSS, który wydaje się działać idealnie:
źródło
Rozwiązanie z zawinięciem granicy: osobne dla stołu i wyświetlacza: wbudowany stół dla osób i thead.
źródło
Jestem nowy w HTML i CSS i szukałem rozwiązania tego problemu, tutaj znajdę.
Próbuję, zgadnij co to działa :)
źródło
Znalazłem tę odpowiedź po napotkaniu tego samego problemu, ale okazało się to dość proste: po prostu podaj przepełnienie tabeli: ukryte
Nie ma potrzeby owijania. To prawda, nie wiem, czy zadziałałoby to 7 lat temu, kiedy pytanie zostało pierwotnie zadane, ale teraz działa.
źródło
Stół z zaokrąglonymi narożnikami i obrzeżami komórek. Korzystanie z rozwiązania @Ramon Tayag .
Kluczem jest użycie,
border-spacing: 0
jak wskazuje.Rozwiązanie za pomocą SCSS .
źródło
Zacząłem eksperymentować z „Display” i stwierdził, że:
border-radius
,border
,margin
,padding
, w sposóbtable
wyświetlane są z:Na przykład
Ale potrzebujemy ustawić
width
każdą kolumnęźródło
Oto najnowszy przykład implementacji tabeli z zaokrąglonymi rogami ze strony http://medialoot.com/preview/css-ui-kit/demo.html . Opiera się na specjalnych selektorach sugerowanych powyżej przez Joela Pottera. Jak widać, zawiera także trochę magii, aby IE był trochę szczęśliwy. Zawiera kilka dodatkowych stylów zmieniających kolor wierszy:
źródło
Oto sposób:
Lub
źródło
Zawsze tak robię za pomocą Sassa
źródło
border-collapse: collapse
włączoną funkcją.border-collapse: collapse
. Wybacz jeszcze raz, poczekam na twoją aktualizację.Najlepsze jak dotąd rozwiązanie pochodzi z Twojego własnego rozwiązania i wygląda następująco:
źródło
Promień granicy jest teraz oficjalnie obsługiwany. Tak więc we wszystkich powyższych przykładach możesz upuścić prefiks „-moz-”.
Inną sztuczką jest użycie tego samego koloru dla górnego i dolnego rzędu, tak jak dla granicy. Wszystkie 3 kolory są takie same, wtapia się i wygląda jak idealnie zaokrąglony stół, nawet jeśli nie jest fizyczny.
źródło