2008-12-11 27 views
52

Quiero dar estilo al último TD en una tabla sin usar una clase CSS en el TD en particular.Diseñando la última td en una tabla con css

<table> 
    <tbody> 
    <tr> 
     <td>One</td> 
     <td>Two</td> 
     <td>Three</td> 
     <td>Four</td> 
     <td>Five</td> 
    </tr> 
    </tbody> 
</table> 

table td 
{ 
    border: 1px solid black; 
} 

Quiero el TD que contiene el texto "cinco" para no tener un borde pero de nuevo, no quiero utilizar una clase.

+0

¿Cuál es el motivo por el que no desea utilizar la clase? – ya23

+0

Quiero mantener el html estático y poder cambiar el estilo sin agregar código o un montón de clases e ID de CSS. –

+0

Siempre podría simplemente poner 'class =" last "' en todas las últimas celdas y luego nunca cambiarlo, y usarlo o no usarlo como lo requiere su diseño. – Nicole

Respuesta

36

Puede utilizar las reglas relativas:

table td + td + td + td + td { 
    border: none; 
} 

Esto sólo funciona si el número de columnas no se determina en tiempo de ejecución.

+0

heh - ¡te encanta este enfoque! – nickf

+0

Tiene sus usos, especialmente si usted, como este hombre, no quiere tener que cambiar el código HTML demasiado para soportar el CSS. – sblundy

+0

¡Eso funciona! Gracias. Sí, el HTML es estático y no quiero agregar un montón de clases CSS o ID para diseñar las celdas. –

72

El selector :last-child debería hacerlo, pero es not supported in any version of IE.

Me temo que no tiene más remedio que usar una clase.

+0

Ha hablado demasiado pronto, aparentemente hubo un truco para evitar el uso de una clase =) – Albert

+4

No del todo cierto,> IE8 sí lo admite, pero aún no se ha adoptado correctamente. Si puedes vivir sin la compatibilidad con IE8 (con lo que OP parece estar bien), esta es la mejor solución. – Jesse

+1

Un poco desactualizado. ¡Funciona genial! – dbrin

3

Javascript es la única forma viable de hacer este lado del cliente (es decir, CSS no lo ayudará). En jQuery:

$("table td:last").css("border", "none"); 
+0

Una desventaja de esto es que rompe el modelo de contenido/estilo/comportamiento. –

+0

usando jQuery para agregar un nombre de clase que luego puede estilo con CSS es semántico. p.ej. jQuery ('# shopping-cart-totals-table tfoot tr: last-child'). addClass ('last-row') –

+0

esto realmente se puede hacer usando css3 –

16

usted podría utilizar la clase pseudo-infantil última

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

Esto estilo de la última td solamente. Aún no es totalmente compatible, por lo que puede ser inadecuado

+0

Eso dará estilo a la última columna, no a la fila. – ceejayoz

+0

que es lo que solicitó el OP, disculpe si mi descripción fue un poco fuera. –

1

No es una respuesta directa a su pregunta, pero usar < tfoot> puede ayudarlo a lograr lo que necesita y, por supuesto, puede personalizarlo.

+0

no, no lo hará. él está hablando de la última CELDA no la última FILA. – nickf

16

Si ya está usando javascript, eche un vistazo a jQuery. Es compatible con un selector de "último hijo" independiente del navegador y puede hacer algo como esto.

$("td:last-child").css({border:"none"}) 
+1

td: last-child, quieres decir? – nickf

+1

no, último-hijo significa el último hijo del padre, entonces mi selector dice "dame el último hijo de la fila" – joshperry

+0

Gracias, lo usé para poner en negrita una línea Total en la tabla. Muy fácil. – Rick

1

Para IE, cómo sobre el uso de una expresión CSS:

<style type="text/css"> 
table td { 
    h: expression(this.style.border = (this == this.parentNode.lastChild ? 'none' : '1px solid #000')); 
} 
</style> 
2

Puede utilizar el elemento COL como se especifica en HTML 4.0 (link). Funciona en todos los navegadores. Puede darle una identificación o una clase o un estilo en línea. La única advertencia es que afecta a toda la columna en todas las filas. Ejemplo:

<table> 
    <col /> 
    <col width="50" /> 
    <col id="anId" /> 
    <col class="whatever" /> 
    <col style="border:1px solid #000;" /> 
    <tbody> 
     <tr> 
      <td>One</td> 
      <td>Two</td> 
      <td>Three</td> 
      <td>Four</td> 
      <td>Five</td> 
     </tr> 
    </tbody> 
</table> 
+0

Mi ejemplo es el inverso de lo que quería hacer, pero entiende lo que quiero decir :) –

0

Este es el código que agregará borde para todos los nodos y eliminará el borde del último nodo (TD).

<style type="text/css"> 
    body { 
     font-family:arial;font-size: 8pt; 
    } 
    table td{ 
     border-right: #666 1px solid 
    } 

    table td { 
     h: expression(this.style.border = (this == this.parentNode.lastChild ? 'none' : 'border-right: 0px solid')); 
    } 
</style> 
<table> 
    <tr> 
     <td>Home</td> 
     <td>sunil</td> 
     <td>Kumar</td> 
     <td>Rayadurg</td> 
     <td>Five</td> 
     <td>Six</td> 
    </tr> 
</table> 

gustarán ...

Quiero el mismo lugar de la frontera que quería que el uso de imágenes ... :-)

+0

este método solo funciona en IE – Mottie

2

En jQuery, siempre que la tabla se crea estática o dinámicamente antes a la siguiente en ejecución:

$("table tr td:not(:last-child)").css({ "border-right":"1px solid #aaaaaa" }); 

sólo añade un borde derecho de cada célula en una fila de la tabla, excepto la última celda.

0

También hay un enfoque diferente ... y esto funcionaría para las tablas que no son estáticas ...básicamente utilizar <th> en lugar de <td> para esa columna:

<style type="text/css"> 
table td { border: 1px solid black; } 
table th { border: 0px; } 
<style> 
<table> 
    <tbody> 
    <tr> 
     <td>One</td> 
     <td>Two</td> 
     <td>Three</td> 
     <td>Four</td> 
     <th>Five</th> 
    </tr> 
    <tr> 
     <td>One</td> 
     <td>Two</td> 
     <td>Three</td> 
     <td>Four</td> 
     <th>Five</th> 
    </tr> 
    </tbody> 
</table> 
1

que estaba buscando una manera de hacer esto también y encontramos esta, podría ser útil para otras personas:

#table td:last-of-type { border: none; } 

Tenga en cuenta que no es compatible por IE tampoco.

24

Usted puede usar la pseudo-clase :last-of-type:

tr > td:last-of-type { 
    /* styling here */ 
} 

Ver the MDN para obtener más información y la compatibilidad con los diferentes navegadores.
Consulte W3C CSS guidelines para obtener más información.

+0

este me ayudó ... gracias .. – Pankaj

6

tratan con:

tr:last-child td:last-child{ 
    border:none; 
    /*any other style*/ 
} 

esto sólo afectará el último elemento td en la tabla, suponiendo que es el único (persona, usted sólo tendrá que identificar su mesa). Sin embargo, es muy general y se adaptará al último TD si agrega más contenido a su tabla. Por lo tanto, si se trata de un caso particular

td:nth-child(5){ 
    border:none; 
} 

debería ser suficiente.

+1

Proporcione más información y detalles de cómo se resuelve la pregunta. Esto ayudará al PO y otros buscadores futuros. – SnareChops

Cuestiones relacionadas