Editar - Título original: ¿Hay una forma alternativa de conseguir border-collapse:collapse
en CSS
(con el fin de tener una, mesa de esquina redondeada colapsado)?
Como resulta que el simple hecho de colapsar los bordes de la tabla no resuelve el problema raíz, he actualizado el título para reflejar mejor la discusión.
Estoy tratando de hacer una tabla con esquinas redondeadas usando la CSS3
border-radius
propiedad Los estilos de tabla que estoy usando se parecen a esto:
table {
-moz-border-radius:10px;
-webkit-border-radius:10px;
border-radius:10px
}
Aquí está el problema. También quiero establecer la border-collapse:collapse
propiedad, y cuando eso se establece border-radius
ya no funciona. ¿Hay alguna forma basada en CSS que pueda obtener el mismo efecto que border-collapse:collapse
sin usarlo?
Ediciones:
He hecho una página simple para demostrar el problema aquí (solo Firefox / Safari).
Parece que una gran parte del problema es que configurar la tabla para que tenga esquinas redondeadas no afecta las esquinas de los td
elementos de esquina . Si la tabla fuera de un solo color, esto no sería un problema, ya que podría td
redondear las esquinas superior e inferior para la primera y la última fila respectivamente. Sin embargo, estoy usando diferentes colores de fondo para la tabla para diferenciar los encabezados y las rayas, por lo que los td
elementos internos también mostrarán sus esquinas redondeadas.
Resumen de soluciones propuestas:
Rodear la mesa con otro elemento con esquinas redondeadas no funciona porque las esquinas cuadradas de la mesa "sangran".
Especificar el ancho del borde a 0 no contrae la tabla.
Las td
esquinas inferiores siguen siendo cuadradas después de establecer el espacio de celdas en cero.
En cambio, usar JavaScript funciona evitando el problema.
Soluciones posibles:
Las tablas se generan en PHP, por lo que podría aplicar una clase diferente a cada uno de los th / tds externos y diseñar cada esquina por separado. Prefiero no hacer esto, ya que no es muy elegante y es un poco difícil aplicarlo en varias tablas, así que sigan enviando sugerencias.
La posible solución 2 es usar JavaScript (jQuery, específicamente) para diseñar las esquinas. Esta solución también funciona, pero aún no es lo que estoy buscando (sé que soy exigente). Tengo dos reservas:
- este es un sitio muy liviano, y me gustaría mantener JavaScript al mínimo
- Parte del atractivo que tiene para mí el uso del radio de borde es la degradación elegante y la mejora progresiva. Al usar border-radius para todas las esquinas redondeadas, espero tener un sitio consistentemente redondeado en navegadores con capacidad CSS3 y un sitio consistentemente cuadrado en otros (te estoy mirando, IE).
Sé que tratar de hacer esto con CSS3 hoy puede parecer innecesario, pero tengo mis razones. También me gustaría señalar que este problema es el resultado de la especificación w3c, no el mal soporte de CSS3, por lo que cualquier solución seguirá siendo relevante y útil cuando CSS3 tenga un soporte más extendido.
fuente
Respuestas:
Me lo imaginé. Solo tiene que usar algunos selectores especiales.
El problema al redondear las esquinas de la tabla era que los elementos td tampoco se redondearon. Puede resolver eso haciendo algo como esto:
Ahora todo se redondea correctamente, excepto que todavía existe el problema de
border-collapse: collapse
romperlo todo.Una solución alternativa es agregar
border-spacing: 0
y dejar el valor predeterminadoborder-collapse: separate
en la tabla.fuente
border-spacing: 0;
como estilo de borde?border-spacing: 0;
como Ramon recomienda arreglarlo para mí. Asegúrese de agregar los estilosborder-radius
yborder-spacing
a los elementos<th>
o<td>
, no<thead>
o<tbody>
.border-spacing: 0; border-collapse: separate;
El siguiente método funciona (probado en Chrome) utilizando un borde
box-shadow
extendido en1px
lugar de un borde "real".fuente
Si desea una solución solo para CSS (sin necesidad de configurar
cellspacing=0
en el HTML) que permita bordes de 1px (que no puede hacer con laborder-spacing: 0
solución), prefiero hacer lo siguiente:border-right
yborder-bottom
para las celdas de su tabla (td
yth
)border-top
border-left
first-child
ylast-child
, redondee las esquinas apropiadas para las celdas de la tabla en las cuatro esquinas.Vea una demostración aquí.
Dado el siguiente HTML:
VER ejemplo a continuación:
fuente
table.Info
clase con algo?¿Has intentado usar en
table{border-spacing: 0}
lugar detable{border-collapse: collapse}
???fuente
border-spacing: 0
es que no puedes tener un borde de 1px, ¿verdad? Porque los bordes se apilan en lugar de colapsarse.border-collapse: separate; border-spacing: 0; border-radius: 10px; overflow: hidden;
cedió exactamente lo que necesitaba.Probablemente tendrá que poner otro elemento alrededor de la mesa y diseñarlo con un borde redondeado.
El borrador de trabajo especifica que
border-radius
no se aplica a los elementos de la tabla cuando el valor deborder-collapse
escollapse
.fuente
overflow:hidden;
Como dijo Ian, la solución es anidar la tabla dentro de un div y configurarla así:
Con
overflow:hidden
, las esquinas cuadradas no sangrarán a través del div.fuente
overflow: hidden
cualquier popover / tooltip se recortará por las dimensiones del contenedor.Que yo sepa, la única forma en que podría hacerlo sería modificar todas las celdas de la siguiente manera:
Y luego para obtener el borde en la parte inferior y de regreso
:last-child
no es válido en ie6, pero si está utilizandoborder-radius
, supongo que no le importa.EDITAR:
Después de mirar su página de ejemplo, parece que puede evitar esto con espacio entre celdas y relleno.
Los gruesos bordes grises que está viendo son en realidad el fondo de la tabla (puede ver esto claramente si cambia el color del borde a rojo). Si establece el espacio de celdas en cero (o equivalentemente
td, th { margin:0; }
), los "bordes" grises desaparecerán.EDITAR 2:
No puedo encontrar una manera de hacer esto con una sola mesa. Si cambia la fila del encabezado a una tabla anidada, es posible que pueda obtener el efecto que desea, pero será más trabajo y no dinámico.
fuente
Intenté una solución usando los pseudo elementos
:before
y:after
en elthead th:first-child
ythead th:last-child
En combinación con envolver la mesa con un
<div class="radius borderCCC">
ver jsFiddle
Funciona para mí en Chrome (13.0.782.215) Avíseme si esto funciona para usted en otros navegadores.
fuente
En realidad, puede agregar su
table
interiordiv
como su envoltorio. y luego asigne estosCSS
códigos al contenedor:fuente
Las respuestas dadas solo funcionan cuando no hay bordes alrededor de la mesa, ¡lo cual es muy limitante!
Tengo una macro en SASS para hacer esto, que es totalmente compatible con los bordes externos e internos, logrando el mismo estilo que el colapso del borde: colapso sin especificarlo realmente.
Probado en FF / IE8 / Safari / Chrome.
Proporciona bordes redondeados agradables en CSS puro en todos los navegadores, pero IE8 (se degrada con gracia) ya que IE8 no admite el radio del borde :(
Algunos navegadores antiguos pueden requerir prefijos de proveedor para trabajar
border-radius
, así que siéntase libre de agregar esos prefijos a su código según sea necesario.Esta respuesta no es la más corta, pero funciona.
Para aplicar este estilo, simplemente cambie su
etiqueta a lo siguiente:
y asegúrese de incluir los estilos CSS anteriores en su HTML.
Espero que esto ayude.
fuente
border-radius
.Para una tabla con borde y desplazable, use esto (reemplazar variables,
$
textos iniciales)Si se utiliza
thead
,tfoot
oth
, simplemente reemplazartr:first-child
ytr-last-child
, ytd
con ellos.HTML:
fuente
Yo tuve el mismo problema. eliminar
border-collapse
completamente y usar:cellspacing="0" cellpadding="0"
en el documento html. ejemplo:fuente
Acabo de escribir un conjunto loco de CSS para esto que parece funcionar perfectamente:
fuente
Solución con colapso de borde: separado para tabla y pantalla: tabla en línea para tbody y thead.
fuente
Soy nuevo en HTML y CSS y también estaba buscando una solución para esto, aquí lo que encuentro.
Lo intento, adivina lo que funciona :)
fuente
Encontré esta respuesta después de encontrarme con el mismo problema, pero descubrí que es bastante simple: simplemente desborde la tabla: oculto
No es necesario un elemento de envoltura. De acuerdo, no sé si esto habría funcionado hace 7 años cuando se hizo la pregunta inicialmente, pero funciona ahora.
fuente
Mesa con esquinas redondeadas y con celdas bordeadas. Usando la solución @Ramon Tayag .
La clave es usar
border-spacing: 0
como él señala.Solución usando SCSS .
fuente
Empecé a experimentar con "pantalla" y me encontré con que:
border-radius
,border
,margin
,padding
, en unatable
se muestran con:Por ejemplo
Pero necesitamos establecer una
width
de cada columnafuente
Aquí hay un ejemplo reciente de cómo implementar una tabla con esquinas redondeadas de http://medialoot.com/preview/css-ui-kit/demo.html . Se basa en los selectores especiales sugeridos por Joel Potter arriba. Como puede ver, también incluye algo de magia para hacer que IE esté un poco feliz. Incluye algunos estilos adicionales para alternar el color de las filas:
fuente
Aquí hay una manera:
O
fuente
Siempre hago esto usando Sass
fuente
border-collapse: collapse
habilitado.border-collapse: collapse
. Perdona nuevamente, esperaré tu actualización.La mejor solución hasta ahora proviene de su propia solución y es así:
fuente
Border-radius ahora es oficialmente compatible. Entonces, en todos los ejemplos anteriores, puede colocar el prefijo "-moz-".
Otro truco es usar el mismo color para las filas superior e inferior que el borde. Con los 3 colores iguales, se combina y se ve como una mesa perfectamente redondeada, aunque no es físicamente.
fuente