Columnas de tabla, configurando el ancho mínimo y máximo con css


Me gustaría tener una tabla que en las columnas se puede estirar, pero estoy teniendo un pequeño problema con el ancho mínimo y máximo en css.

También parece que hay algunas respuestas contradictorias sobre cómo funciona esto:

Me gustaría tener lo siguiente

table{
   width:100%;
}
.a, .b, .c
{
    background-color: red;
}
.a
{
    min-width: 10px;
    max-width: 20px;
}
.b
{
    min-width: 40px;
    max-width: 45px;
}
.c
{
}

<table>
    <tr>
        <td class="a">A</td>
        <td class="b">B</td>
        <td class="c">C</td>
    </tr>
</table>

Es hay una manera de lograr esto sin javascript (es decir, estiramiento restringido de columnas con una tabla)?

A continuación se muestra una tabla de lo que realmente se renderiza para algunas configuraciones css diferentes:

introduzca la descripción de la imagen aquí

Author: Community, 2013-08-22

1 answers

Las tablas funcionan de manera diferente; a veces contra-intuitivamente.

La solución es usar width en las celdas de la tabla en lugar de max-width.

Aunque puede sonar como que en ese caso las celdas no se encogerán por debajo del ancho dado, en realidad lo harán.
sin restricciones en c, si le da a la tabla un ancho de 70px, los anchos de a, b y c saldrán como 16, 42 y 12 píxeles, respectivamente.
Con un ancho de tabla de 400 píxeles, se comportan como usted dice que espera en su cuadrícula arriba.
Solo cuando intenta darle a la tabla un tamaño demasiado pequeño (más pequeño que a.min+b.min+el contenido de C) fallará: entonces la tabla en sí será más ancha de lo especificado.

Hice un fragmento basado en su violín, en el que eliminé todos los bordes y rellenos y el espaciado de los bordes, para que pueda medir los anchos con mayor precisión.

table {
  width: 70px;
}

table, tbody, tr, td {
  margin: 0;
  padding: 0;
  border: 0;
  border-spacing: 0;
}

.a, .c {
  background-color: red;
}

.b {
  background-color: #F77;
}

.a {
  min-width: 10px;
  width: 20px;
  max-width: 20px;
}

.b {
  min-width: 40px;
  width: 45px;
  max-width: 45px;
}

.c {}
<table>
  <tr>
    <td class="a">A</td>
    <td class="b">B</td>
    <td class="c">C</td>
  </tr>
</table>
 76
Author: Mr Lister,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-20 18:06:31