Bearbeiten - Originaltitel: Gibt es einen alternativen Weg, um border-collapse:collapse
in zu erreichenCSS
(um einen kollabierte, abgerundete Ecke Tisch zu haben)?
Da sich herausstellt, dass das Reduzieren der Tabellenränder das Grundproblem nicht löst, habe ich den Titel aktualisiert, um die Diskussion besser widerzuspiegeln.
Ich versuche mit der CSS3
border-radius
Eigenschaft einen Tisch mit abgerundeten Ecken zu machen . Die von mir verwendeten Tabellenstile sehen ungefähr so aus:
table {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px
}
Hier ist das Problem. Ich möchte auch die border-collapse:collapse
Eigenschaft festlegen , und wenn dies festgelegt ist, border-radius
funktioniert es nicht mehr. Gibt es eine CSS-basierte Methode, mit der ich den gleichen Effekt erzielen kann, border-collapse:collapse
ohne ihn tatsächlich zu verwenden?
Bearbeitungen:
Ich habe eine einfache Seite erstellt, um das Problem hier zu demonstrieren (nur Firefox / Safari).
Es scheint, dass ein großer Teil des Problems darin besteht, dass das Einstellen der Tabelle auf abgerundete Ecken die Ecken der Eckelemente nicht beeinflusst td
. Wenn die Tabelle nur eine Farbe hätte, wäre dies kein Problem, da ich nur die oberen und unteren td
Ecken für die erste bzw. letzte Reihe abrunden könnte. Ich verwende jedoch unterschiedliche Hintergrundfarben für die Tabelle, um die Überschriften und Streifen zu unterscheiden, sodass die inneren td
Elemente auch ihre abgerundeten Ecken zeigen.
Zusammenfassung der vorgeschlagenen Lösungen:
Das Umgeben des Tisches mit einem anderen Element mit runden Ecken funktioniert nicht, da die quadratischen Ecken des Tisches "durchbluten".
Wenn Sie die Rahmenbreite auf 0 setzen, wird die Tabelle nicht reduziert.
Die unteren td
Ecken sind nach dem Setzen des Zellenabstands auf Null immer noch quadratisch.
Die Verwendung von JavaScript vermeidet das Problem.
Mögliche Lösungen:
Die Tabellen werden in PHP generiert, daher könnte ich einfach eine andere Klasse auf jedes der äußeren th / tds anwenden und jede Ecke separat formatieren. Ich würde das lieber nicht tun, da es nicht sehr elegant und ein bisschen mühsam ist, es auf mehrere Tabellen anzuwenden. Bitte kommen Sie immer wieder auf Vorschläge.
Mögliche Lösung 2 besteht darin, JavaScript (speziell jQuery) zum Stylen der Ecken zu verwenden. Diese Lösung funktioniert auch, aber immer noch nicht ganz das, wonach ich suche (ich weiß, dass ich wählerisch bin). Ich habe zwei Vorbehalte:
- Dies ist eine sehr leichte Website, und ich möchte JavaScript auf ein Minimum beschränken
- Ein Teil der Anziehungskraft, die die Verwendung des Randradius für mich hat, ist eine anmutige Verschlechterung und fortschreitende Verbesserung. Durch die Verwendung des Rahmenradius für alle abgerundeten Ecken hoffe ich, in CSS3-fähigen Browsern eine konsistent gerundete Site und in anderen eine konsistent quadratische Site zu haben (ich sehe Sie an, IE).
Ich weiß, dass der Versuch, dies heute mit CSS3 zu tun, unnötig erscheint, aber ich habe meine Gründe. Ich möchte auch darauf hinweisen, dass dieses Problem auf die w3c-Spezifikation zurückzuführen ist und nicht auf eine schlechte CSS3-Unterstützung. Daher ist jede Lösung weiterhin relevant und nützlich, wenn CSS3 eine breitere Unterstützung bietet.
quelle
Antworten:
Ich habe es herausgefunden. Sie müssen nur einige spezielle Selektoren verwenden.
Das Problem beim Abrunden der Tabellenecken war, dass die td-Elemente nicht ebenfalls abgerundet wurden. Sie können das lösen, indem Sie so etwas tun:
Jetzt rundet alles richtig, außer dass es immer noch darum geht
border-collapse: collapse
, alles zu zerbrechen.Eine Problemumgehung besteht darin , die Standardeinstellung hinzuzufügen
border-spacing: 0
undborder-collapse: separate
in der Tabelle zu belassen.quelle
border-spacing: 0;
als Rahmenstil hinzufügen, anstatt mit HTML herumzuspielen ?border-spacing: 0;
wie Ramon empfehlen, es für mich behoben. Stellen Sie sicher, dass Sie dieborder-radius
undborder-spacing
-Stile zu den<th>
oder<td>
-Elementen hinzufügen , nicht zu<thead>
oder<tbody>
.border-spacing: 0; border-collapse: separate;
Die folgende Methode funktioniert (in Chrome getestet), indem ein
box-shadow
mit einem Spread von1px
anstelle eines "echten" Rahmens verwendet wird.quelle
Wenn Sie eine
cellspacing=0
reine CSS-Lösung wünschen (die nicht im HTML festgelegt werden muss), die 1px-Rahmen zulässt (was Sie mit derborder-spacing: 0
Lösung nicht tun können ), bevorzuge ich Folgendes:border-right
undborder-bottom
für Ihre Tabellenzellen (td
undth
)border-top
border-left
first-child
undlast-child
Selektoren, um die entsprechenden Ecken für die Tabellenzellen in den vier Ecken.Sehen Sie hier eine Demo.
Angesichts des folgenden HTML:
SIEHE Beispiel unten:
quelle
table.Info
Klasse mit irgendetwas zu tun?Haben Sie versucht,
table{border-spacing: 0}
anstelle vontable{border-collapse: collapse}
???quelle
border-spacing: 0
ist, dass Sie keinen 1px-Rand haben können, oder? Weil sich die Ränder stapeln anstatt zu kollabieren.border-collapse: separate; border-spacing: 0; border-radius: 10px; overflow: hidden;
ergab genau das, was ich brauchte.Sie müssen wahrscheinlich ein anderes Element um den Tisch legen und dieses mit einem abgerundeten Rand versehen.
Der Arbeitsentwurf gibt an, dass
border-radius
dies nicht für Tabellenelemente gilt, wenn der Wert vonborder-collapse
istcollapse
.quelle
overflow:hidden;
Wie Ian sagte, besteht die Lösung darin, den Tisch in einem Div zu verschachteln und so einzustellen:
Mit
overflow:hidden
bluten die quadratischen Ecken nicht durch das Div.quelle
overflow: hidden
jedem Popover / Tooltip die Wrapper-Abmessungen abgeschnitten werden.Nach meinem besten Wissen können Sie dies nur tun, indem Sie alle Zellen wie folgt ändern:
Und dann, um die Grenze unten und rechts zurück zu bekommen
:last-child
ist in ie6 nicht gültig, aber wenn Sie verwendenborder-radius
, gehe ich davon aus, dass es Ihnen egal ist.BEARBEITEN:
Nachdem Sie sich Ihre Beispielseite angesehen haben, scheint es, dass Sie dies möglicherweise mit Zellenabstand und Auffüllung umgehen können.
Die dicken grauen Ränder, die Sie sehen, bilden tatsächlich den Hintergrund der Tabelle (Sie können dies deutlich sehen, wenn Sie die Rahmenfarbe in Rot ändern). Wenn Sie den Zellenabstand auf Null setzen (oder gleichwertig:
td, th { margin:0; }
die grauen "Ränder".EDIT 2:
Ich kann mit nur einem Tisch keinen Weg finden, dies zu tun. Wenn Sie Ihre Kopfzeile in eine verschachtelte Tabelle ändern, können Sie möglicherweise den gewünschten Effekt erzielen, dies ist jedoch arbeitsintensiver und nicht dynamischer.
quelle
Ich habe eine Problemumgehung mit den Pseudoelementen
:before
und:after
auf demthead th:first-child
und versuchtthead th:last-child
In Kombination mit dem Umwickeln des Tisches mit einem
<div class="radius borderCCC">
sehen jsFiddle
Funktioniert für mich in Chrome (13.0.782.215) Lassen Sie mich wissen, ob dies in anderen Browsern für Sie funktioniert.
quelle
Eigentlich können Sie Ihr
table
Inneresdiv
als Wrapper hinzufügen . und weisen Sie dieseCSS
Codes dann dem Wrapper zu:quelle
Die gegebenen Antworten funktionieren nur, wenn es keine Ränder um den Tisch gibt, was sehr einschränkend ist!
Ich habe ein Makro in SASS, um dies zu tun, das externe und vollständig unterstützt Innengrenzen das gleiche Design wie Border-Collapse erzielt: Collapse, ohne es tatsächlich anzugeben.
Getestet in FF / IE8 / Safari / Chrome.
Gibt schöne abgerundete Ränder in reinem CSS in allen Browsern, aber IE8 (verschlechtert sich elegant), da IE8 den Rahmenradius nicht unterstützt :(
Einige ältere Browser können Anbieter Präfixe erfordern , um die Arbeit mit
border-radius
, so fühlen sich frei , diese Präfixe , um Ihren Code nach Bedarf hinzuzufügen.Diese Antwort ist nicht die kürzeste - aber sie funktioniert.
Um diesen Stil anzuwenden, ändern Sie einfach Ihren
Tag zu folgendem:
und stellen Sie sicher, dass Sie die oben genannten CSS-Stile in Ihren HTML-Code aufnehmen.
Hoffe das hilft.
quelle
border-radius
.Verwenden Sie diese Option für eine umrandete und scrollbare Tabelle (Variablen ersetzen,
$
Texte starten)Wenn Sie verwenden
thead
,tfoot
oderth
, ersetzen Sie einfachtr:first-child
undtr-last-child
undtd
mit ihnen.HTML:
quelle
Ich hatte das gleiche Problem.
border-collapse
vollständig entfernen und verwenden:cellspacing="0" cellpadding="0"
im HTML-Dokument. Beispiel:quelle
Ich habe gerade einen verrückten Satz CSS dafür geschrieben, der perfekt zu funktionieren scheint:
quelle
Lösung mit Randkollaps: getrennt für Tabelle und Anzeige: Inline-Tabelle für Körper und Kopf.
quelle
Ich bin neu in HTML und CSS und habe auch nach einer Lösung dafür gesucht, hier was ich finde.
Ich versuche es, rate mal was es funktioniert :)
quelle
Ich habe diese Antwort gefunden, nachdem ich auf dasselbe Problem gestoßen bin, aber es ist ziemlich einfach: Gib einfach den Tabellenüberlauf: versteckt
Kein Verpackungselement erforderlich. Zugegeben, ich weiß nicht, ob dies vor 7 Jahren funktioniert hätte, als die Frage ursprünglich gestellt wurde, aber es funktioniert jetzt.
quelle
Tabelle mit abgerundeten Ecken und mit umrandeten Zellen. Verwenden der @ Ramon Tayag- Lösung.
Der Schlüssel ist zu verwenden,
border-spacing: 0
wie er betont.Lösung mit SCSS .
quelle
Ich begann Experiment mit „Anzeige“ und ich fand , dass:
border-radius
,border
,margin
,padding
, in einemtable
mit angezeigt werden:Zum Beispiel
Aber wir müssen
width
von jeder Spalte eine setzenquelle
Hier ist ein aktuelles Beispiel für die Implementierung einer Tabelle mit abgerundeten Ecken unter http://medialoot.com/preview/css-ui-kit/demo.html . Es basiert auf den von Joel Potter oben vorgeschlagenen speziellen Selektoren. Wie Sie sehen können, enthält es auch etwas Magie, um den IE ein wenig glücklich zu machen. Es enthält einige zusätzliche Stile, um die Farbe der Zeilen zu ändern:
quelle
Hier ist ein Weg:
Oder
quelle
Ich mache das immer so mit Sass
quelle
border-collapse: collapse
aktiviertem zu tun .border-collapse: collapse
. Verzeihen Sie noch einmal, ich werde auf Ihr Update warten.Die bisher beste Lösung stammt aus Ihrer eigenen Lösung und sieht folgendermaßen aus:
quelle
Der Grenzradius wird jetzt offiziell unterstützt. In allen obigen Beispielen können Sie also das Präfix "-moz-" löschen.
Ein weiterer Trick besteht darin, für die obere und untere Reihe dieselbe Farbe wie für Ihren Rand zu verwenden. Wenn alle drei Farben gleich sind, fügt es sich ein und sieht aus wie ein perfekt abgerundeter Tisch, auch wenn es nicht physisch ist.
quelle