Estoy tratando de diseñar algo de HTML / CSS que pueda poner un borde alrededor de filas específicas en una tabla. Sí, sé que se supone que no debo usar tablas para el diseño, pero aún no sé suficiente CSS para reemplazarlo por completo.
De todos modos, tengo una tabla con varias filas y columnas, algunas fusionadas con rowspan y colspan, y me gustaría poner un borde simple alrededor de partes de la tabla. Actualmente, estoy usando 4 clases CSS separadas (superior, inferior, izquierda, derecha) que adjunto a las <td>
celdas que se encuentran en la parte superior, inferior, izquierda y derecha de la tabla, respectivamente.
.top {
border-top: thin solid;
border-color: black;
}
.bottom {
border-bottom: thin solid;
border-color: black;
}
.left {
border-left: thin solid;
border-color: black;
}
.right {
border-right: thin solid;
border-color: black;
}
<html>
<body>
<table cellspacing="0">
<tr>
<td>no border</td>
<td>no border here either</td>
</tr>
<tr>
<td class="top left">one</td>
<td class="top right">two</td>
</tr>
<tr>
<td class="bottom left">three</td>
<td class="bottom right">four</td>
</tr>
<tr>
<td colspan="2">once again no borders</td>
</tr>
<tr>
<td class="top bottom left right" colspan="2">hello</td>
</tr>
<tr>
<td colspan="2">world</td>
</tr>
</table>
</html>
¿Hay alguna forma más fácil de hacer lo que quiero? Intenté aplicar la parte superior e inferior a a <tr>
pero no funcionó. (PD Soy nuevo en CSS, por lo que probablemente haya una solución realmente básica para esto que me he perdido).
nota: necesito tener varias secciones con bordes. La idea básica es tener varios clústeres con bordes, cada uno de los cuales contiene varias filas.
fuente
Respuestas:
¿Qué tal
tr {outline: thin solid black;}
? Funciona para mí en elementos tr o tbody, y parece ser compatible con la mayoría de los navegadores, incluido IE 8+, pero no antes.fuente
¡Gracias a todos los que han respondido! Probé todas las soluciones presentadas aquí y busqué más en Internet otras posibles soluciones, y creo que encontré una que es prometedora:
Salida:
En lugar de tener que añadir los
top
,bottom
,left
, yright
clases para todas<td>
, todo lo que tengo que hacer es añadirtop row
a la parte superior<tr>
,bottom row
a la parte inferior<tr>
, yrow
para cada<tr>
en el medio. ¿Hay algún problema con esta solución? ¿Hay algún problema multiplataforma que deba tener en cuenta?fuente
cellspacing
atributo está obsoleto en HTML5. Parece que CSStable { border-collapse: collapse; border-spacing: 0; }
es el camino a seguir ahora.Si configura el
border-collapse
estilocollapse
en la tabla principal, debería poder diseñar eltr
: (los estilos están en línea para la demostración)Salida:
fuente
Yo también estaba jugando con esto, y esta parecía ser la mejor opción para mí:
Tenga en cuenta que esto evitará el uso de anchos de columna fluidos / automáticos , ya que las celdas ya no se alinearán con las de otras filas, pero el formato de borde / color seguirá funcionando correctamente. La solución es dar a los TR y TD un ancho específico (px o%).
Por supuesto, podría hacer el selector
tr.myClass
si quisiera aplicarlo solo a ciertas filas.display: table
Sin embargo, aparentemente no funciona para IE 6/7, pero probablemente haya otros trucos (¿hasLayout?) Que podrían funcionar para ellos. :-(fuente
Aquí hay un enfoque que utiliza elementos tbody que podría ser la forma de hacerlo. No puede establecer el borde en un tbody (lo mismo que no puede en un tr) pero puede establecer el color de fondo. Si el efecto que desea lograr se puede obtener con un color de fondo en los grupos de filas en lugar de un borde, esto funcionará.
fuente
Agrupe filas con la
<tbody>
etiqueta y luego aplique estilo.Y el css en style.css
fuente
La única otra forma que se me ocurre de hacerlo es encerrar cada una de las filas alrededor de las que necesita un borde en una tabla anidada. Eso hará que el borde sea más fácil de hacer, pero potencialmente creará otros problemas de diseño, tendrá que establecer manualmente el ancho en las celdas de la tabla, etc.
Su enfoque puede ser el mejor dependiendo de sus otros requisitos de diseño y el enfoque sugerido aquí es solo una posible alternativa.
fuente
De acuerdo con su requisito de que desea poner un borde alrededor de un bloque arbitrario de celdas MxN, realmente no hay una manera más fácil de hacerlo sin usar Javascript. Si sus celdas están arregladas con, puede usar flotadores, pero esto es problemático por otras razones. lo que estás haciendo puede ser tedioso pero está bien.
Ok, si estás interesado en una solución de Javascript, usando jQuery (mi enfoque preferido), terminas con este código bastante aterrador:
Con mucho gusto aceptaré sugerencias sobre formas más fáciles de hacer esto ...
fuente
el truco está en la propiedad de contorno gracias a la respuesta de enigment con pocas modificaciones
usa esta clase
luego en el HTML
y el resultado es espero que esto te ayude
fuente
Una forma más sencilla es convertir la mesa en un control del lado del servidor. Podrías usar algo similar a esto:
fuente