2010-07-22 11 views

Respuesta

84

No sin los extraños selectores de CSS y marcas adicionales y cosas por el estilo.

Algo como esto podría hacer (usando selectores CSS):

table { 
    border:none; 
    border-collapse: collapse; 
} 

table td { 
    border-left: 1px solid #000; 
    border-right: 1px solid #000; 
} 

table td:first-child { 
    border-left: none; 
} 

table td:last-child { 
    border-right: none; 
} 

Editar

Para aclarar comentario golpe de @ Jeroen, todo lo que se necesitaría es:

table { border: none; border-collapse: collapse; } 
table td { border-left: 1px solid #000; } 
table td:first-child { border-left: none; } 
+2

Nota: IE6-8 no admite ': last-child' (y spotty on': first-child' según http://www.quirksmode.org/css/contents.html – ScottS

+5

Simplemente use un borde izquierdo, luego no hay necesidad de ': last-child'. – jeroen

+0

@jereon: Es cierto, realmente no lo pensé todo el camino. Pero el punto básico es el mismo. – rossipedia

2

Puedo estar simplificando el problema, pero ¿funciona td {border-right: 1px solid red;} para la configuración de la tabla?

+0

No, porque entonces habrá una frontera a la derecha de la tabla. No quiero un borde en el borde derecho o izquierdo de la tabla, solo entre columnas. – dmr

+0

Si aplica una clase a su columna final, puede eliminar la declaración de frontera de la final. Requiere un ajuste manual, pero si se trata de una página estática, en realidad es la mejor solución. – hollsk

2

Los bordes en las tablas siempre son un poco escamosos. Una posibilidad sería agregar una declaración de borde-derecha a cada celda de la tabla, excepto las que están en la columna de la derecha. Si está utilizando cualquier tipo de espacio de tabla, esto no funcionará muy bien.

Otra opción sería usar una imagen de fondo de 1px de alto con los bordes en su interior, pero eso solo funcionará si puede garantizar el ancho de cada celda en todo momento.

Otra posibilidad es experimentar con colgroup/col. Esto tuvo bastante mala compatibilidad con el navegador cruzado la última vez que lo miré pero podría haber mejorado desde entonces: http://www.webmasterworld.com/forum83/6826.htm

+0

Este es un consejo bastante terrible - CSS ofrece una manera fácil para relativamente reciente (IE8 +) de lograr esto de manera elegante. – Maverick

+0

Tenga en cuenta que esta respuesta (y la pregunta) son ambas de 2010, hace una década, cuando IE6 todavía estaba bajo soporte activo para muchos desarrolladores. Además, los métodos de CSS para lograr los bordes de la tabla en ese momento eran imposibles para casi todos los procesadores de correo electrónico HTML disponibles. ¡Gracias por la nigromancia! – hollsk

+0

Jaja, no me di cuenta, ya que la respuesta aceptada fue editada hace solo unas semanas :). – Maverick

0

No hay una manera fácil de hacer esto, aparte de hacer algo como class = "lastCell" en la última td en cada tr y, a continuación, establecer el CSS de esta manera:

#table td { 
    border-right: 5px solid red 
} 

.lastCell { 
    border-right: none; 
} 
2

Es necesario configurar un border-right en el TD de entonces apuntar a los últimos TDS en una fila para fijar la frontera para none. Maneras de dirigir:

  1. Conjunto una clase en la última td de cada fila y el uso que
  2. si se trata de un número determinado de células y solamente la orientación más nuevos navegadores luego 3 células de ancho pueden utilizar td + td + td
  3. O mejor (con nuevos navegadores) td:last-child
2

he usado esto en una hoja de estilo por tres columnas separadas por bordes verticales y funcionó bien:

#column-left { 
    border-left: 1px solid #dddddd; 
} 
#column-center { 
    /*no border needed/* 
} 
#column-right { 
    border-right: 1px solid #dddddd; 
} 

La columna de la izquierda tiene un borde a la derecha, la columna de la derecha tiene un borde a la izquierda y la columna central ya está ocupada por la izquierda y la derecha.

Si sus columnas están dentro de un div/wrapper/table/etc ... no se olvide de agregar espacio adicional para acomodar el ancho de los bordes.

57

Sé que esto es una cuestión de edad, pero no es un simple, una solución de línea que trabaja constantemente para Chrome, Firefox, etc., Así como Internet Explorer 8 y superiores (y, en su mayor parte, funciona en IE7 también - ver http://www.quirksmode.org/css/selectors/ para más detalles):

table td + td { border-left:2px solid red; } 


La salida es algo como esto:

Col1 | Col2 | Col3 

Lo está haciendo que esto funcione es que está definiendo un borde solo en celdas de tabla que están adyacentes a otra celda de tabla. En otras palabras, está aplicando el CSS a todas las celdas de una fila, excepto la primera.

Al aplicar un borde izquierdo al segundo hasta el último elemento secundario, da la apariencia de que la línea está "entre" las celdas.

+0

¡Maravilloso, gracias! –

+0

Esta es una gran solución, muchas gracias – Gendrith

+0

Esto definitivamente merece una nota, ya que sigue siendo válida y muy simple – ColdFrog

2

Dentro <td>, utilice style="border-left:1px solid #colour;"

+0

Creo que el espíritu de la pregunta es 'usar CSS para dar estilo a la tabla' en lugar de poner CSS en lugares específicos. – Rup

Cuestiones relacionadas