@codenhub/styles 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +18 -16
- package/README.es.md +62 -0
- package/README.md +28 -22
- package/README.pt-BR.md +62 -0
- package/dist/aesthetics/chunky-tile.css +1 -1
- package/dist/aesthetics/cyber.css +1 -1
- package/dist/aesthetics/glass.css +1 -1
- package/dist/aesthetics/index.css +2 -2
- package/dist/aesthetics/neobrutalism.css +1 -1
- package/dist/aesthetics/pixel.css +1 -1
- package/dist/aesthetics/sketch.css +1 -1
- package/dist/cli.js +189 -0
- package/dist/components.css +2 -2
- package/dist/index.css +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/native.css +2 -2
- package/dist/palette.css +1 -1
- package/dist/theme.css +2 -2
- package/docs/accessibility.md +108 -60
- package/docs/changelog/0.1.1.md +1 -0
- package/docs/changelog/0.2.0.md +1 -0
- package/docs/changelog/0.3.0.md +1 -0
- package/docs/changelog/0.4.0.md +1 -0
- package/docs/changelog/0.5.0.md +8 -3
- package/docs/changelog/0.6.0.md +2 -1
- package/docs/changelog/0.7.0.md +50 -0
- package/docs/changelog/0.8.0.md +70 -0
- package/docs/changelog/index.md +2 -0
- package/docs/concepts.md +188 -46
- package/docs/es/accessibility.md +169 -0
- package/docs/es/concepts.md +212 -0
- package/docs/es/index.md +105 -0
- package/docs/es/integrating/astro.md +35 -0
- package/docs/es/integrating/index.md +75 -0
- package/docs/es/integrating/nextjs.md +67 -0
- package/docs/es/integrating/svelte.md +45 -0
- package/docs/es/integrating/tailwind.md +148 -0
- package/docs/es/integrating/vue.md +31 -0
- package/docs/es/integrating/without-a-bundler.md +238 -0
- package/docs/es/setup.md +188 -0
- package/docs/es/usage/aesthetics.md +282 -0
- package/docs/es/usage/buttons.md +135 -0
- package/docs/es/usage/composing.md +168 -0
- package/docs/es/usage/content-and-layout.md +219 -0
- package/docs/es/usage/customizing.md +304 -0
- package/docs/es/usage/feedback.md +157 -0
- package/docs/es/usage/forms.md +256 -0
- package/docs/es/usage/index.md +33 -0
- package/docs/es/usage/presets.md +92 -0
- package/docs/es/usage/solo.md +86 -0
- package/docs/es/usage/theming.md +309 -0
- package/docs/es/usage/tooltips.md +127 -0
- package/docs/index.md +86 -26
- package/docs/integrating/astro.md +3 -4
- package/docs/integrating/index.md +46 -13
- package/docs/integrating/nextjs.md +3 -4
- package/docs/integrating/svelte.md +5 -4
- package/docs/integrating/tailwind.md +89 -6
- package/docs/integrating/vue.md +3 -4
- package/docs/integrating/without-a-bundler.md +237 -0
- package/docs/pt-BR/accessibility.md +169 -0
- package/docs/pt-BR/concepts.md +212 -0
- package/docs/pt-BR/index.md +105 -0
- package/docs/pt-BR/integrating/astro.md +35 -0
- package/docs/pt-BR/integrating/index.md +75 -0
- package/docs/pt-BR/integrating/nextjs.md +67 -0
- package/docs/pt-BR/integrating/svelte.md +45 -0
- package/docs/pt-BR/integrating/tailwind.md +148 -0
- package/docs/pt-BR/integrating/vue.md +31 -0
- package/docs/pt-BR/integrating/without-a-bundler.md +238 -0
- package/docs/pt-BR/setup.md +188 -0
- package/docs/pt-BR/usage/aesthetics.md +282 -0
- package/docs/pt-BR/usage/buttons.md +135 -0
- package/docs/pt-BR/usage/composing.md +168 -0
- package/docs/pt-BR/usage/content-and-layout.md +219 -0
- package/docs/pt-BR/usage/customizing.md +304 -0
- package/docs/pt-BR/usage/feedback.md +157 -0
- package/docs/pt-BR/usage/forms.md +256 -0
- package/docs/pt-BR/usage/index.md +33 -0
- package/docs/pt-BR/usage/presets.md +92 -0
- package/docs/pt-BR/usage/solo.md +86 -0
- package/docs/pt-BR/usage/theming.md +309 -0
- package/docs/pt-BR/usage/tooltips.md +127 -0
- package/docs/setup.md +142 -91
- package/docs/usage/aesthetics.md +89 -73
- package/docs/usage/buttons.md +112 -40
- package/docs/usage/composing.md +109 -92
- package/docs/usage/content-and-layout.md +160 -125
- package/docs/usage/customizing.md +117 -41
- package/docs/usage/feedback.md +138 -71
- package/docs/usage/forms.md +201 -107
- package/docs/usage/index.md +22 -14
- package/docs/usage/presets.md +91 -0
- package/docs/usage/solo.md +85 -0
- package/docs/usage/theming.md +273 -118
- package/docs/usage/tooltips.md +90 -49
- package/llms-full.txt +2820 -1298
- package/llms.txt +24 -22
- package/package.json +134 -91
- package/{dist/tw → tw}/aesthetics/chunky-tile.css +107 -29
- package/{dist/tw → tw}/aesthetics/cyber.css +88 -40
- package/{dist/tw → tw}/aesthetics/glass.css +257 -61
- package/{dist/tw → tw}/aesthetics/neobrutalism.css +113 -20
- package/{dist/tw → tw}/aesthetics/pixel.css +93 -8
- package/tw/aesthetics/sketch.css +417 -0
- package/{dist/tw → tw}/box.css +105 -9
- package/tw/components/button.css +11 -0
- package/tw/components/button.rules.css +187 -0
- package/tw/components/feedback.css +11 -0
- package/{dist/tw/components/feedback.css → tw/components/feedback.rules.css} +136 -32
- package/tw/components/form.css +11 -0
- package/{dist/tw/components/form.css → tw/components/form.rules.css} +577 -125
- package/tw/components/index.css +16 -0
- package/tw/components/rules.css +41 -0
- package/tw/components/surface.css +11 -0
- package/tw/components/surface.rules.css +222 -0
- package/tw/components/tooltip.css +11 -0
- package/{dist/tw/components/tooltip.css → tw/components/tooltip.rules.css} +43 -27
- package/{dist/tw → tw}/corner.css +18 -12
- package/{dist/tw → tw}/elevation.css +23 -17
- package/{dist/tw → tw}/index.css +12 -10
- package/tw/index.d.ts +1 -0
- package/tw/intent.css +312 -0
- package/tw/modifiers.css +127 -0
- package/tw/native.css +320 -0
- package/tw/presentation.css +139 -0
- package/tw/reset.css +10 -0
- package/{dist/tw/reset.css → tw/reset.rules.css} +21 -22
- package/tw/size.css +34 -0
- package/tw/surface.css +9 -0
- package/tw/surface.rules.css +212 -0
- package/{dist/tw → tw}/theme.css +121 -45
- package/tw/typography.css +8 -0
- package/{dist/tw/typography.css → tw/typography.rules.css} +0 -3
- package/{dist/tw → tw}/utilities/content.css +212 -50
- package/tw/utilities/index.css +11 -0
- package/tw/utilities/layout.css +208 -0
- package/tw/utilities/rules.css +8 -0
- package/dist/tw/aesthetics/sketch.css +0 -333
- package/dist/tw/components/button.css +0 -139
- package/dist/tw/components/index.css +0 -36
- package/dist/tw/components/loader.css +0 -116
- package/dist/tw/components/surface.css +0 -175
- package/dist/tw/intent.css +0 -228
- package/dist/tw/native.css +0 -203
- package/dist/tw/palette.css +0 -460
- package/dist/tw/presentation.css +0 -68
- package/dist/tw/surface.css +0 -61
- package/dist/tw/utilities/index.css +0 -6
- package/dist/tw/utilities/layout.css +0 -130
- /package/{dist/tw → tw}/aesthetics/index.css +0 -0
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Botones
|
|
3
|
+
description: Acciones destructivas y secundarias, botones de icono, tamaños, enlaces con aspecto de botón, estados deshabilitados e iconos de carga.
|
|
4
|
+
order: 1
|
|
5
|
+
source: 54f7c8a1eee5a0f696dc60b9f60f42026d49c5d5
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Botones
|
|
9
|
+
|
|
10
|
+
La pantalla de ajustes tiene un botón Guardar y un botón Cancelar. Esta página añade el resto de sus acciones: una zona de peligro con un botón Eliminar destructivo, un botón de icono que copia una clave de API y botones más pequeños para una fila densa. También cubre los botones deshabilitados y cómo cargar los iconos que se usan aquí y en páginas posteriores.
|
|
11
|
+
|
|
12
|
+
## Añadir una zona de peligro
|
|
13
|
+
|
|
14
|
+
Una acción destructiva va en su propia tarjeta al final de la pantalla. La tarjeta es soft y destructiva para que se lea como una advertencia; el botón es sólido para que sea lo más llamativo de esa tarjeta:
|
|
15
|
+
|
|
16
|
+
```html
|
|
17
|
+
<section class="card soft destructive stack" aria-labelledby="danger-title">
|
|
18
|
+
<h2 class="text-title-sm" id="danger-title">Delete account</h2>
|
|
19
|
+
<p>This removes your projects, invoices, and API keys. It cannot be undone.</p>
|
|
20
|
+
<div class="cluster">
|
|
21
|
+
<button class="btn destructive" type="button">Delete account</button>
|
|
22
|
+
<button class="btn ghost" type="button">Export data first</button>
|
|
23
|
+
</div>
|
|
24
|
+
</section>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
La tarjeta y el botón nombran cada uno `.destructive`, porque [la intención no se hereda](../concepts.md#intención-qué-color). Por el mismo motivo, el botón Exportar conserva su color neutro dentro de la tarjeta roja.
|
|
28
|
+
|
|
29
|
+
## Elegir un relleno y un borde
|
|
30
|
+
|
|
31
|
+
Un botón acepta una intención, una clase de relleno y una clase de borde, todas opcionales. Sin ninguna, un botón es sólido y sin borde:
|
|
32
|
+
|
|
33
|
+
```html
|
|
34
|
+
<button class="btn primary">Save changes</button>
|
|
35
|
+
<button class="btn secondary">Preview</button>
|
|
36
|
+
<button class="btn primary soft">Invite member</button>
|
|
37
|
+
<button class="btn destructive ghost edged">Revoke key</button>
|
|
38
|
+
<button class="btn ghost">Cancel</button>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Un botón **neutro** nunca se rellena del todo. Su color es el propio color de texto de la página, así que un relleno completo sería un bloque negro o blanco, lo más llamativo de la página para la intención que no significa nada en particular. Un botón neutro `.solid` se queda en un relleno del 20%, un gris discreto un paso más oscuro que `.soft`. Todas las intenciones con nombre se rellenan al 100%.
|
|
42
|
+
|
|
43
|
+
Con hover, el relleno de un botón se intensifica en `--hover-step` (14%), así que un botón `.ghost` toma un tinte y uno `.solid` cambia al color de hover de su intención. Al pulsarlo se encoge un poco (`scale(0.97)`); una [estética](./aesthetics.md) puede reemplazarlo por su propia pulsación, y con la preferencia de movimiento reducido del usuario sigue ocurriendo, al instante.
|
|
44
|
+
|
|
45
|
+
Un botón neutro `.soft` o `.ghost` dentro de una superficie con relleno, como un botón Cancelar en una `.card.solid.primary` o en una `.alert.solid.destructive`, imprime su etiqueta y su línea en el color de texto de esa superficie, así que sigue siendo legible sobre el relleno. Un campo de texto hace lo mismo. Un botón con intención conserva su propio color, y también uno neutro `.solid`, que se apoya en un relleno propio.
|
|
46
|
+
|
|
47
|
+
Cuando un botón con relleno tiene el foco del teclado, una línea de 2px del color de la página recorre el interior del anillo de foco, así que el anillo sigue visible sobre un botón relleno del mismo color, como `.solid.primary`.
|
|
48
|
+
|
|
49
|
+
## Tamaños y formas
|
|
50
|
+
|
|
51
|
+
| Clase | Efecto |
|
|
52
|
+
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
53
|
+
| _ninguna_ | Al menos 2.5rem de alto (`--control-height`), 1rem de relleno lateral y el mismo tamaño de fuente que el texto que lo rodea. |
|
|
54
|
+
| `.sm` | Al menos 2rem de alto, 0.75rem de relleno lateral, texto de 0.875rem. |
|
|
55
|
+
| `.lg` | Al menos 3rem de alto, 1.25rem de relleno lateral, texto de 1.0625rem. |
|
|
56
|
+
| `.pill` | Extremos completamente redondeados. |
|
|
57
|
+
| `.icon` | Cuadrado. Al menos 2.5rem por lado, 2rem con `.sm`, 3rem con `.lg`. |
|
|
58
|
+
| `.p-xs` | El relleno más ajustado (0.5rem en los lados, 0.125rem arriba y abajo). También quita la altura mínima, para que un botón quepa en una celda de tabla o en una barra de herramientas densa. |
|
|
59
|
+
| `.p-sm` | Relleno compacto (0.625rem en los lados, 0.25rem arriba y abajo). |
|
|
60
|
+
| `.p-lg` | Relleno amplio (1.5rem en los lados, 0.75rem arriba y abajo). |
|
|
61
|
+
|
|
62
|
+
Una clase de tamaño y una de relleno se pueden combinar. Solo `.p-xs` quita la altura mínima de un botón con texto; cualquier otra combinación la conserva. En un botón de icono, cualquier clase `.p-*` quita el tamaño mínimo y el botón toma el tamaño de su icono más ese relleno: 0.125rem, 0.25rem o 0.75rem alrededor.
|
|
63
|
+
|
|
64
|
+
El aspecto base dibuja esquinas que escalan con el tamaño: un botón `.sm` o `.p-sm` tiene esquinas algo más pequeñas que uno por defecto, y `.lg` algo más grandes.
|
|
65
|
+
|
|
66
|
+
## Botones de icono
|
|
67
|
+
|
|
68
|
+
La lista de claves de API de la pantalla de ajustes tiene un botón de copiar junto a cada clave. Un botón que solo tiene un icono necesita un nombre accesible, porque el icono no tiene texto que un lector de pantalla pueda leer:
|
|
69
|
+
|
|
70
|
+
```html
|
|
71
|
+
<button class="btn icon ghost" type="button" aria-label="Copy API key">
|
|
72
|
+
<i class="ic-lucide-copy" aria-hidden="true"></i>
|
|
73
|
+
</button>
|
|
74
|
+
<button class="btn ghost sm" type="button">
|
|
75
|
+
<i class="ic-lucide-download" aria-hidden="true"></i>
|
|
76
|
+
Download invoice
|
|
77
|
+
</button>
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Un botón es una fila flex con una separación de 0.5rem, así que un icono junto a un texto queda espaciado sin markup adicional.
|
|
81
|
+
|
|
82
|
+
### Cargar los iconos
|
|
83
|
+
|
|
84
|
+
Este paquete no incluye iconos. Los ejemplos de esta documentación usan `@codenhub/icons` con la familia Lucide, y sus nombres de clase siempre se escriben con la familia, como `ic-lucide-copy`. Instálalo y cárgalo una vez, junto a este paquete:
|
|
85
|
+
|
|
86
|
+
```sh
|
|
87
|
+
pnpm add @codenhub/icons
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Con CSS compilado, importa las reglas base y cada familia que uses:
|
|
91
|
+
|
|
92
|
+
```css
|
|
93
|
+
@import "@codenhub/styles";
|
|
94
|
+
@import "@codenhub/icons";
|
|
95
|
+
@import "@codenhub/icons/lucide";
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Con código fuente de Tailwind, importa su punto de entrada de Tailwind después del de este paquete:
|
|
99
|
+
|
|
100
|
+
```css
|
|
101
|
+
@import "@codenhub/styles/tw";
|
|
102
|
+
@import "@codenhub/icons/tw";
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Cualquier otro icono también funciona: un `<svg>` en línea con `stroke="currentColor"` o `fill="currentColor"` toma el color de texto del botón de la misma forma.
|
|
106
|
+
|
|
107
|
+
## Enlaces con aspecto de botón
|
|
108
|
+
|
|
109
|
+
Un enlace que navega, como "Ver historial de facturación", sigue siendo un enlace. Escríbelo como `<a href>` con `.btn` y obtiene el mismo aspecto:
|
|
110
|
+
|
|
111
|
+
```html
|
|
112
|
+
<a class="btn secondary ghost edged" href="/settings/billing">View billing history</a>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
No uses `<div class="btn">` ni `<span class="btn">`: parecen botones, pero no pueden recibir el foco ni activarse con el teclado. Usa `<button>` para acciones y `<a href>` para navegación.
|
|
116
|
+
|
|
117
|
+
## Botones deshabilitados
|
|
118
|
+
|
|
119
|
+
Cualquiera de estos hace que un botón parezca deshabilitado: el atributo `disabled`, `.disabled`, `aria-disabled="true"` o `data-disabled`. Un botón deshabilitado se dibuja al 58% de opacidad con un cursor de no permitido, y no cambia con hover ni al pulsarlo.
|
|
120
|
+
|
|
121
|
+
```html
|
|
122
|
+
<button class="btn primary" type="submit" disabled>Save changes</button>
|
|
123
|
+
|
|
124
|
+
<a class="btn ghost" aria-disabled="true">Download invoice</a>
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
Solo el atributo `disabled` impide que el botón funcione. `.disabled`, `aria-disabled` y `data-disabled` solo cambian el aspecto: un clic o la tecla Enter siguen activándolo, así que tu código tiene que ignorarlo. `aria-disabled` es la opción correcta cuando el botón debe seguir pudiendo recibir el foco, por ejemplo para que un tooltip explique por qué está deshabilitado. Un enlace no tiene atributo `disabled`, así que quítale también el `href` cuando no deba navegar.
|
|
128
|
+
|
|
129
|
+
## Estado de carga
|
|
130
|
+
|
|
131
|
+
No hay una clase de carga. Un botón que está cargando es un botón deshabilitado con un icono de spinner que aportas tú, y [Feedback](./feedback.md#mostrar-que-el-formulario-se-está-guardando) lo construye para el botón Guardar. Deshabilítalo para que un segundo clic no envíe el formulario dos veces.
|
|
132
|
+
|
|
133
|
+
## Siguiente paso
|
|
134
|
+
|
|
135
|
+
Los botones están listos; la tarjeta que guardan todavía no tiene nada que guardar. [Formularios](./forms.md) añade los campos del perfil.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Composición
|
|
3
|
+
description: Consulta de cómo se combinan la intención, la presentación, la estética y la elevación, el aspecto por defecto de cada componente y qué clases lee cada uno.
|
|
4
|
+
order: 8
|
|
5
|
+
source: 2493c7c14124565b565b1226e99d4b3de3b087b2
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Composición
|
|
9
|
+
|
|
10
|
+
Esta es una página de consulta. [Construir una pantalla](../concepts.md) presenta la intención, la presentación y la estética; esta página tiene las reglas completas para combinarlas, el aspecto por defecto de cada componente, qué clases lee cada componente y la elevación.
|
|
11
|
+
|
|
12
|
+
## Combinar clases
|
|
13
|
+
|
|
14
|
+
```html
|
|
15
|
+
<div class="soft">
|
|
16
|
+
<button class="btn primary">Soft primary button</button>
|
|
17
|
+
<span class="badge success">Soft success badge</span>
|
|
18
|
+
<button class="btn primary ghost edged">Outlined: the class on the element wins</button>
|
|
19
|
+
</div>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
- **La presentación se hereda.** `.solid`, `.soft`, `.ghost`, `.edged` y `.edgeless` funcionan en el componente o en cualquier contenedor, y una clase en el elemento gana a una heredada de un contenedor. Un contenedor define el aspecto de todo lo que contiene, y cualquier elemento puede elegir el suyo.
|
|
23
|
+
- **Las estéticas y los [tokens de material](./customizing.md#tokens-de-material) se heredan** de la misma forma.
|
|
24
|
+
- **La intención no se hereda.** `.primary` y las demás clases de intención colorean solo el elemento en el que están. Un contenedor que recoloreara en silencio todo lo que contiene volvería rojo el botón neutro Cancelar de una tarjeta roja de zona de peligro. `.neutral` nombra el valor por defecto; úsalo donde un elemento tomaría si no una intención, como una fila de tabla dentro de una tabla `.success`. Consulta [Temas → Tokens de intención](./theming.md#tokens-de-intención).
|
|
25
|
+
- **La elevación no se hereda.** `.raised` eleva solo el elemento en el que está; consulta [Elevación](#elevación).
|
|
26
|
+
- **El tamaño no se hereda.** `.sm` y `.lg` cambian el tamaño solo del botón o del control en el que están, así que un formulario `.sm` no encoge los campos que contiene. Consulta [Botones → Tamaños y formas](./buttons.md#tamaños-y-formas) y [Formularios → Tamaños](./forms.md#tamaños).
|
|
27
|
+
|
|
28
|
+
Con los puntos de entrada de código fuente de Tailwind, cada clase anterior, salvo las clases de estética, es también una utilidad de Tailwind, así que variantes como `md:lg` y `dark:solid` funcionan y `@apply btn primary soft sm` le da a una clase tuya la combinación completa. Los modificadores documentados con cada componente, como `.tight` o `.interactive`, también son utilidades, así que `@apply stack tight` funciona. Las clases de estética, como `.glass`, siguen siendo CSS simple, así que `@apply glass` y `md:glass` no funcionan; escribe la clase en el marcado. Consulta [Tailwind CSS v4 → Construir tus propios componentes con `@apply`](../integrating/tailwind.md#construir-tus-propios-componentes-con-apply), y [Preajustes](./presets.md) para saber cuándo recurrir a ello.
|
|
29
|
+
|
|
30
|
+
## Valores por defecto de los componentes
|
|
31
|
+
|
|
32
|
+
Sin ninguna clase de presentación en él ni a su alrededor, cada componente tiene su propio aspecto. La "elevación en reposo" es cuánta profundidad toma cuando una [estética](./aesthetics.md) dibuja profundidad; sin estética, nada tiene sombra.
|
|
33
|
+
|
|
34
|
+
| Componente | Relleno | Borde | Elevación en reposo |
|
|
35
|
+
| -------------------------------- | -------------- | --------- | ------------------- |
|
|
36
|
+
| `.btn` | `.solid` | sin borde | 1 |
|
|
37
|
+
| `.card` | `.ghost` | con borde | 1 |
|
|
38
|
+
| `.panel` | `.soft` | sin borde | 0 |
|
|
39
|
+
| `.alert` | `.soft` | con borde | 0 |
|
|
40
|
+
| `.badge` | `.soft` | sin borde | 0 |
|
|
41
|
+
| `.ipt`, `.textarea`, `.select` | `.ghost` | con borde | 0 |
|
|
42
|
+
| `.input-group` | `.ghost` | con borde | 0 |
|
|
43
|
+
| `.checkbox`, `.radio`, `.switch` | `.soft` | con borde | 0 |
|
|
44
|
+
| `.kbd` | `.soft` | con borde | 0 |
|
|
45
|
+
| `.code`, `.pre` | `.soft` | sin borde | 0 |
|
|
46
|
+
| `.data-table` | `.soft` | sin borde | 0 |
|
|
47
|
+
| `.progress` (el carril) | `.soft` | sin borde | 0 |
|
|
48
|
+
| `.tooltip-bubble` | `.solid` | con borde | 0 |
|
|
49
|
+
| `.quote` | `.ghost` | con borde | 0 |
|
|
50
|
+
| `.skeleton`, `.divider` | Solo intención | Ninguno | 0 |
|
|
51
|
+
|
|
52
|
+
Un `.solid` neutro solo rellena hasta el 20%; consulta [Temas → Tokens de intención](./theming.md#tokens-de-intención). Las excepciones neutras a estos rellenos están en [Presentación](#presentación).
|
|
53
|
+
|
|
54
|
+
## Presentación
|
|
55
|
+
|
|
56
|
+
La presentación son dos elecciones separadas. `.solid`, `.soft` y `.ghost` definen cuánto del color de la intención rellena un componente. `.edged` y `.edgeless` definen si dibuja un borde. Definen [tokens de presentación](./customizing.md#tokens-de-presentación) y nada más.
|
|
57
|
+
|
|
58
|
+
| Clase | Aspecto | `--ui-fill` | `--ui-fg-on-fill` | `--ui-border` |
|
|
59
|
+
| ----------- | ----------------------------------------------------------------------- | ----------- | ----------------- | ------------- |
|
|
60
|
+
| `.solid` | Relleno con el color de la intención, con texto de contraste. | `100%` | `100%` | |
|
|
61
|
+
| `.soft` | Un tinte claro, con texto del color de la intención. | `12%` | `0%` | |
|
|
62
|
+
| `.ghost` | Sin relleno en reposo, con texto del color de la intención. | `0%` | `0%` | |
|
|
63
|
+
| `.edged` | Un borde del color de la intención, tan grueso como define la estética. | | | `100%` |
|
|
64
|
+
| `.edgeless` | Sin borde. | | | `0%` |
|
|
65
|
+
|
|
66
|
+
```html
|
|
67
|
+
<button class="btn primary">Solid, the button default</button>
|
|
68
|
+
<button class="btn soft edged">Tinted, with a border</button>
|
|
69
|
+
<button class="btn primary ghost edged">Outline</button>
|
|
70
|
+
<button class="btn ghost">Ghost: picks up a tint on hover</button>
|
|
71
|
+
<input class="ipt soft edgeless" aria-label="Search" />
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Una clase de relleno nunca define el borde, y una clase de borde nunca define el relleno. `.solid.edged` se ve igual que `.solid.edgeless`, porque el borde se desvanece a medida que el relleno se completa.
|
|
75
|
+
|
|
76
|
+
El borde es el contorno del componente y nada más. Las líneas dentro de un componente, como las líneas divisorias entre las filas de una tabla, son un ajuste aparte; consulta [Contenido y layout → Líneas divisorias de las tablas](./content-and-layout.md#líneas-divisorias-de-las-tablas).
|
|
77
|
+
|
|
78
|
+
### Las superficies neutras reposan sin tinte
|
|
79
|
+
|
|
80
|
+
Una `.card.soft`, un `.panel` y una `.alert` neutros no muestran tinte en reposo. Usan en su lugar el tono de fondo discreto un paso por encima de la página (`--color-foreground`), porque un tinte gris en cada caja neutra se ve sucio en lugar de discreto.
|
|
81
|
+
|
|
82
|
+
- Una `.card.soft` con `.interactive` o `.hoverable` muestra el tinte con hover. Una `.card.soft` simple y un `.panel` no tienen estado de hover.
|
|
83
|
+
- Con una de las seis intenciones incluidas, los tres conservan el tinte normal del 12%, y una tarjeta lo intensifica con hover. Una intención que hayas definido tú se trata aquí como neutra; consulta [Temas → Tu propia intención](./theming.md#tu-propia-intención).
|
|
84
|
+
- La presentación puede venir del elemento o de un contenedor: `<div class="soft"><div class="card">` reposa como `.card.soft`, y un contenedor `.ghost` o `.solid` le da a un `.panel` o a una `.alert` la placa que le daría su propia clase.
|
|
85
|
+
- Un `.badge` conserva su tinte del 12% incluso cuando es neutro. No tiene borde, así que sin el tinte se perdería en el texto que lo rodea.
|
|
86
|
+
|
|
87
|
+
`.kbd`, `.code` y `.pre` funcionan de otra manera. Reposan sobre el tono subtle de su intención, `--intent-subtle`, que es `--color-surface` para la neutra, y una intención incluida añade encima un 12% de su color. Una intención que hayas definido tú muestra su propio tinte `--intent-subtle` sin ese 12% adicional.
|
|
88
|
+
|
|
89
|
+
### Controles de texto y toggles
|
|
90
|
+
|
|
91
|
+
- **Los controles de texto** limitan su relleno para que el texto escrito siga siendo legible: como máximo un 6% desde un contenedor, un 12% con su propio `.soft` y un 20% con su propio `.solid`. Ignoran un `.edgeless` de un contenedor y respetan el suyo. Consulta [Formularios → Relleno y borde en los controles de texto](./forms.md#relleno-y-borde-en-los-controles-de-texto).
|
|
92
|
+
- **Los toggles** limitan su relleno sin marcar al 40% y rellenan hasta el 100% una vez marcados. `.checkbox` y `.radio` siempre dibujan su borde, y también `.switch.ghost`. Consulta [Formularios → Colores marcado y sin marcar](./forms.md#colores-marcado-y-sin-marcar).
|
|
93
|
+
|
|
94
|
+
### Burbujas de tooltip
|
|
95
|
+
|
|
96
|
+
Una burbuja de tooltip siempre está rellena y es opaca, y dibuja un borde fino que solo quita su propio `.edgeless`. Sin intención usa `--color-tooltip`; una intención la rellena con el color de esa intención. [Tooltips → Cómo se ve la burbuja](./tooltips.md#cómo-se-ve-la-burbuja) tiene los colores.
|
|
97
|
+
|
|
98
|
+
### Carriles de progreso
|
|
99
|
+
|
|
100
|
+
`.progress` lee las dos elecciones en su carril. La parte rellena es siempre el color de la intención con toda su intensidad. `.solid` no está soportado en el carril, porque el carril y la parte rellena serían del mismo color. `.ghost.edgeless` se renderiza, pero deja el carril sin un marco visible; `.ghost.edged` dibuja un contorno a su alrededor.
|
|
101
|
+
|
|
102
|
+
### Combinaciones no soportadas
|
|
103
|
+
|
|
104
|
+
| Componente | Clase | Qué pasa |
|
|
105
|
+
| ----------------------- | ----------- | -------------------------------------------------------------------------------------------- |
|
|
106
|
+
| `.kbd`, `.code`, `.pre` | `.ghost` | El chip sigue dibujando su fondo teñido, porque ese fondo es lo que lo convierte en un chip. |
|
|
107
|
+
| `.progress` | `.solid` | El carril y la parte rellena son del mismo color, así que el valor no se ve. |
|
|
108
|
+
| `.checkbox`, `.radio` | `.edgeless` | Se ignora: el borde siempre se dibuja. |
|
|
109
|
+
|
|
110
|
+
## Referencia de ejes por componente
|
|
111
|
+
|
|
112
|
+
Qué clases cambian cada componente. "Material" es lo que una [estética](./aesthetics.md) puede cambiar en él: "Forma" significa esquina, grosor del borde, sombra, hover y contorno; las entradas más limitadas enumeran lo que se aplica.
|
|
113
|
+
|
|
114
|
+
| Componentes | Intención | Relleno | Borde | Material |
|
|
115
|
+
| --------------------------------------------------------------- | --------- | ------- | ----- | ------------------ |
|
|
116
|
+
| `.btn`, `.alert`, `.badge`, `.card`, `.panel` | Sí | Sí | Sí | Forma |
|
|
117
|
+
| `.kbd`, `.data-table` | Sí | Sí | Sí | Esquina y borde |
|
|
118
|
+
| `.quote` | Sí | Sí | Sí | Grosor del borde |
|
|
119
|
+
| `.divider`, `.skeleton` | Sí | No | No | No |
|
|
120
|
+
| `.ipt`, `.textarea`, `.select`, `.text-control` | Sí | Sí | Sí | Forma |
|
|
121
|
+
| `.input-group` | Sí | Sí | Sí | Forma |
|
|
122
|
+
| `.surface` | Sí | Sí | Sí | Forma |
|
|
123
|
+
| `.checkbox`, `.radio` | Sí | Sí | No | Esquina y borde |
|
|
124
|
+
| `.switch` | Sí | Sí | Sí | Esquina y borde |
|
|
125
|
+
| `.progress` | Sí | Sí | Sí | Esquina y borde |
|
|
126
|
+
| `.code`, `.pre` | Sí | Sí | Sí | Esquina y contorno |
|
|
127
|
+
| `.tooltip-bubble` | Sí | Sí | Sí | Forma y desenfoque |
|
|
128
|
+
| `.table-wrap`, `.quote-inline`, utilidades de layout y de texto | No | No | No | No |
|
|
129
|
+
|
|
130
|
+
"Sí" significa que la clase cambia el componente, y "No" que no lo cambia; las pruebas del paquete comprueban las dos cosas. Qué hace cada componente con una clase:
|
|
131
|
+
|
|
132
|
+
| Componente | Lee |
|
|
133
|
+
| ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
|
|
134
|
+
| `.btn`, `.alert`, `.badge`, `.card`, `.panel` | Relleno, color de texto, borde y grosor del borde. |
|
|
135
|
+
| `.kbd` | Relleno, color de texto, borde y grosor del borde. |
|
|
136
|
+
| `.data-table` | Relleno y color de texto del encabezado, borde y grosor del borde. |
|
|
137
|
+
| `.ipt`, `.textarea`, `.select`, `.text-control` | Borde, grosor del borde y un relleno limitado. |
|
|
138
|
+
| `.input-group` | Borde, grosor del borde y un relleno limitado. |
|
|
139
|
+
| `.checkbox`, `.radio` | Un relleno limitado, marcado y sin marcar. |
|
|
140
|
+
| `.switch` | Borde, grosor del borde y un relleno limitado. |
|
|
141
|
+
| `.quote` | Relleno, color de texto, borde y grosor del borde. |
|
|
142
|
+
| `.code`, `.pre`, `.tooltip-bubble` | Relleno, color de texto, borde y material. |
|
|
143
|
+
| `.progress` | Relleno del carril, borde y grosor del borde. La parte rellena es siempre el color completo de la intención. |
|
|
144
|
+
| `.skeleton`, `.divider` | Solo intención. |
|
|
145
|
+
|
|
146
|
+
Las clases de estado y los modificadores como `.interactive`, `.hoverable`, `.pressable`, `.p-sm` y `.vertical` se documentan con su componente. Cada uno tiene efecto en los componentes que lo leen, y en `/tw` son utilidades, así que `@apply card interactive` funciona. Un control no válido se marca con `aria-invalid="true"`, no con una clase; consulta [Formularios](./forms.md#mostrar-un-error-de-validación).
|
|
147
|
+
|
|
148
|
+
## Elevación
|
|
149
|
+
|
|
150
|
+
La elevación es cuánta profundidad toma un componente. Nada tiene sombra hasta que una [estética](./aesthetics.md) dibuja profundidad o una de estas clases la pide.
|
|
151
|
+
|
|
152
|
+
| Clase | Profundidad |
|
|
153
|
+
| ----------- | ------------------------------------------------------------------------------------------------------------- |
|
|
154
|
+
| `.flat` | Ninguna. Las superficies glass conservan su sombra, porque forma parte de aquello de lo que está hecho glass. |
|
|
155
|
+
| `.raised` | Un escalón de la profundidad en el ámbito: tarjetas y baldosas que quedan cerca de la página. |
|
|
156
|
+
| `.floating` | Dos escalones: menús y popovers. |
|
|
157
|
+
|
|
158
|
+
```html
|
|
159
|
+
<article class="card raised">Lifted</article>
|
|
160
|
+
<div class="floating panel">A menu</div>
|
|
161
|
+
<article class="card flat">Flat, whatever the aesthetic says</article>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
Cada clase multiplica la sombra de la estética en el ámbito. El mismo `.raised` es un desenfoque suave en una página simple y una sombra dura desplazada bajo `.neobrutalism`: la estética decide cómo se ve la profundidad, y la clase decide cuánta toma este elemento.
|
|
165
|
+
|
|
166
|
+
La clase no se hereda. Eleva o aplana solo el elemento en el que está, y un elemento dentro de él no toma profundidad de él. Da a cada elemento que necesite profundidad su propia clase. La extensión (spread) de una sombra no se multiplica, porque una estética que dibuja su borde como una sombra interior usa la extensión para ese borde.
|
|
167
|
+
|
|
168
|
+
Estas clases son independientes de los tokens de sombra `--elevation-*` de [Temas → Tokens base](./theming.md#tokens-base), que son sombras fijas para los elementos a los que das estilo tú.
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Contenido y layout
|
|
3
|
+
description: Consulta de cada helper de layout con su espaciado, la escala tipográfica con sus tamaños, las tarjetas y los paneles con su relleno interior, las tablas, las citas, el código y las teclas.
|
|
4
|
+
order: 10
|
|
5
|
+
source: 19c4b12f34054533e56cbc1edbefff908c48a1e7
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Contenido y layout
|
|
9
|
+
|
|
10
|
+
Esta es una página de consulta de las clases que organizan una página y dan forma a su contenido: helpers de layout, la escala tipográfica, tarjetas y paneles, tablas y los pequeños chips de contenido. [Construir una pantalla](../concepts.md#maquetar-la-página) las muestra en uso.
|
|
11
|
+
|
|
12
|
+
## Layout
|
|
13
|
+
|
|
14
|
+
La separación de todos los helpers de layout es `--layout-gap`, `1rem` por defecto. Definir `--layout-gap` en un elemento cambia la separación de todos los layouts que contiene. `.tight` y `.loose` cambian solo el layout en el que están; un layout anidado dentro conserva su propia separación.
|
|
15
|
+
|
|
16
|
+
| Clase | Layout | Separación |
|
|
17
|
+
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
|
|
18
|
+
| `.stack` | Una columna vertical. | `--layout-gap`, `.tight` 0.5rem, `.loose` 1.5rem |
|
|
19
|
+
| `.cluster` | Una fila que salta de línea, con los elementos centrados en vertical. `.between` reparte los elementos hacia los dos extremos. | Igual |
|
|
20
|
+
| `.view` | Un contenedor flex. `.vertical` lo convierte en una columna; `.horizontal` en una fila que salta de línea con los elementos centrados. | Igual |
|
|
21
|
+
| `.auto-grid` | Una cuadrícula de columnas iguales, cada una de al menos `--layout-grid-min` (16rem) de ancho, tantas como quepan. | Igual |
|
|
22
|
+
| `.section` | Relleno interior alrededor de una sección de la página: `--layout-gutter` a los lados, `--layout-section-block` arriba y abajo. | Ninguna |
|
|
23
|
+
| `.section-content` | Centra su contenido con un ancho de `--container-max` (80rem). `.narrow` usa 48rem, `.wide` 90rem. | Ninguna |
|
|
24
|
+
| `.divider` | Una línea horizontal, tan ancha como su contenedor. `.vertical` la convierte en una línea vertical tan alta como la fila. | Ninguna |
|
|
25
|
+
| `.visually-hidden` | Oculta contenido en pantalla y lo mantiene para los lectores de pantalla. | Ninguna |
|
|
26
|
+
|
|
27
|
+
`.auto-grid` coloca dos columnas de 16rem cuando su contenedor mide 32rem más la separación, tres a partir de 48rem más dos separaciones, y así sucesivamente. Por debajo del ancho de una columna, la columna se encoge para caber. Define `--layout-grid-min` en la cuadrícula para cambiar el ancho de columna.
|
|
28
|
+
|
|
29
|
+
`--layout-gutter` es `clamp(1rem, 4vw, 2rem)` y `--layout-section-block` es `clamp(4rem, 9vw, 7rem)`: los dos crecen con la ventana entre esos límites. La lista completa de tokens base está en [Temas → Tokens base](./theming.md#tokens-base).
|
|
30
|
+
|
|
31
|
+
Un `.divider` acepta una intención, que lo colorea, e ignora las clases de presentación, así que un contenedor `.ghost.edgeless` no oculta los divisores que contiene. Su grosor es el grosor de borde de la estética.
|
|
32
|
+
|
|
33
|
+
`.visually-hidden` no se llama `.sr-only` porque Tailwind incluye su propio `.sr-only`, y dos clases con el mismo nombre entrarían en conflicto.
|
|
34
|
+
|
|
35
|
+
## Tipografía
|
|
36
|
+
|
|
37
|
+
| Clase | Tamaño | Grosor | Espaciado entre letras |
|
|
38
|
+
| ---------------- | ---------------------------------------- | -------- | ---------------------- |
|
|
39
|
+
| `.text-display` | 3.75rem, 6rem a partir de 48rem de ancho | Bold | Ajustado |
|
|
40
|
+
| `.text-title-lg` | 3rem, 3.75rem a partir de 48rem de ancho | Bold | Ajustado |
|
|
41
|
+
| `.text-title` | 1.875rem | Bold | Ajustado |
|
|
42
|
+
| `.text-title-sm` | 1.25rem | Semibold | Ajustado |
|
|
43
|
+
| `.text-label-lg` | 1.125rem | Medium | Amplio |
|
|
44
|
+
| `.text-label` | 1rem | Medium | Amplio |
|
|
45
|
+
| `.text-body` | 0.875rem | Normal | Más amplio |
|
|
46
|
+
|
|
47
|
+
Los dos tamaños mayores crecen en el breakpoint `md` de Tailwind, 48rem por defecto. Con los puntos de entrada de código fuente de Tailwind, se aplica tu propio breakpoint `md`. El paquete no define ningún tamaño en el texto sin clase: el texto del cuerpo y los encabezados sin clase toman el tamaño del navegador, o el tamaño del texto que los rodea con el reset; consulta [Configuración inicial → HTML sin clases](../setup.md#html-sin-clases) para el mapeo sin clases.
|
|
48
|
+
|
|
49
|
+
`.text-body` mide 0.875rem, menos que el texto de la página de 1rem; úsalo para texto secundario o denso, no para el texto principal de la página. `/native` es la excepción: define `.text-body` en `body`, así que ahí es el texto de la página, y los párrafos y los elementos de lista lo heredan del elemento en el que estén. Consulta [HTML sin clases](../setup.md#html-sin-clases).
|
|
50
|
+
|
|
51
|
+
`.selection-contrast` en un elemento cambia los colores del texto seleccionado dentro de él a `--color-primary` sobre `--color-primary-contrast`. Úsalo en una zona `.solid.primary`, donde el color de selección por defecto coincidiría con el fondo.
|
|
52
|
+
|
|
53
|
+
## Superficies
|
|
54
|
+
|
|
55
|
+
`.card` y `.panel` son los dos contenedores. Los dos aceptan intención, [presentación](./composing.md#presentación) y [tokens de material](./customizing.md#tokens-de-material).
|
|
56
|
+
|
|
57
|
+
| Clase | Aspecto por defecto | Relleno interior por defecto |
|
|
58
|
+
| -------- | -------------------------------------------------------------------------------- | ---------------------------- |
|
|
59
|
+
| `.card` | Sin relleno, con borde, la esquina de superficie y una elevación en reposo de 1. | 1.25rem |
|
|
60
|
+
| `.panel` | El tono de fondo discreto, sin borde, la esquina de superficie y sin elevación. | 1rem |
|
|
61
|
+
|
|
62
|
+
Una elevación en reposo de 1 no muestra ninguna sombra por sí sola. Una tarjeta solo tiene sombra bajo una [estética](./aesthetics.md) que dibuja profundidad, o con `.raised` o `.floating`; consulta [Composición → Elevación](./composing.md#elevación).
|
|
63
|
+
|
|
64
|
+
Clases de relleno interior:
|
|
65
|
+
|
|
66
|
+
| Clase | En `.card` | En `.panel` |
|
|
67
|
+
| --------- | ---------- | ----------- |
|
|
68
|
+
| `.p-xs` | 0.5rem | 0.25rem |
|
|
69
|
+
| `.p-sm` | 0.75rem | 0.5rem |
|
|
70
|
+
| _ninguna_ | 1.25rem | 1rem |
|
|
71
|
+
| `.p-lg` | 2rem | 1.5rem |
|
|
72
|
+
| `.flush` | 0 | 0 |
|
|
73
|
+
|
|
74
|
+
`.flush` es para contenido que va de borde a borde, como una imagen o una tabla dentro de una tarjeta.
|
|
75
|
+
|
|
76
|
+
Una clase de relleno interior solo se aplica a la tarjeta o al panel en el que está. Una tarjeta o un panel anidado dentro conserva su propio relleno interior, así que una `.card.flush` que contiene un `.panel` sigue dando al panel 1rem de relleno interior.
|
|
77
|
+
|
|
78
|
+
Un panel es para barras laterales, barras de herramientas y zonas hundidas: áreas que forman parte de la página, no objetos sobre ella. Una tarjeta es un objeto independiente, como la tarjeta de perfil o la tarjeta del plan de la pantalla de ajustes.
|
|
79
|
+
|
|
80
|
+
### Tarjetas y paneles neutros
|
|
81
|
+
|
|
82
|
+
Una `.card.soft` neutra y un `.panel` neutro no muestran tinte: reposan sobre el tono de fondo discreto un paso por encima de la página, así que se leen como un área aparte sin llamar la atención. Con una intención incluida toman el tinte normal. [Composición → Las superficies neutras reposan sin tinte](./composing.md#las-superficies-neutras-reposan-sin-tinte) tiene los detalles, incluido el hover.
|
|
83
|
+
|
|
84
|
+
### Tarjetas clicables
|
|
85
|
+
|
|
86
|
+
| Clase | Efecto |
|
|
87
|
+
| -------------- | --------------------------------------------------------------------------------------------------------------- |
|
|
88
|
+
| `.interactive` | Cursor de puntero, color de hover, pulsación y anillo de foco. Lo mismo que `.hoverable` y `.pressable` juntas. |
|
|
89
|
+
| `.hoverable` | Solo el color de hover, sin cursor de puntero. |
|
|
90
|
+
| `.pressable` | Solo la pulsación y el cursor de puntero. |
|
|
91
|
+
|
|
92
|
+
Con el aspecto por defecto, una pulsación reduce ligeramente la tarjeta (`scale(0.97)`); una estética puede reemplazarla con su propia pulsación, y con la preferencia de movimiento reducido sigue ocurriendo, al instante.
|
|
93
|
+
|
|
94
|
+
Usa una de las dos mitades para una tarjeta que responde solo a un gesto. Una tarjeta que contiene su propio botón lleva `.hoverable`, para que pulsar el botón no pulse toda la tarjeta.
|
|
95
|
+
|
|
96
|
+
```html
|
|
97
|
+
<article class="card">Neutral card</article>
|
|
98
|
+
<article class="card success solid">Filled success card</article>
|
|
99
|
+
<article class="card primary ghost edged">Intent border, no fill</article>
|
|
100
|
+
<a class="card success soft interactive" href="/settings/billing">Billing: tinted at rest, deeper on hover</a>
|
|
101
|
+
<article class="card hoverable">Tinted on hover; the action is a nested button</article>
|
|
102
|
+
<aside class="panel">A sidebar</aside>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Estas clases solo dan estilo. Ponlas en un enlace o un botón reales y dales un nombre accesible; un `<div class="card interactive">` no puede recibir el foco ni usarse con el teclado.
|
|
106
|
+
|
|
107
|
+
Una tarjeta `.interactive` o `.pressable` deshabilitada muestra el cursor de no permitido en lugar del puntero, tanto si es un `<button>` con `disabled` como si lleva `.disabled`, `aria-disabled="true"` o `data-disabled`.
|
|
108
|
+
|
|
109
|
+
## Tablas
|
|
110
|
+
|
|
111
|
+
La pantalla de ajustes enumera las claves de API en una tabla:
|
|
112
|
+
|
|
113
|
+
```html
|
|
114
|
+
<div class="table-wrap">
|
|
115
|
+
<table class="data-table">
|
|
116
|
+
<caption class="visually-hidden">
|
|
117
|
+
API keys
|
|
118
|
+
</caption>
|
|
119
|
+
<thead>
|
|
120
|
+
<tr>
|
|
121
|
+
<th scope="col">Name</th>
|
|
122
|
+
<th scope="col">Created</th>
|
|
123
|
+
<th scope="col">Status</th>
|
|
124
|
+
</tr>
|
|
125
|
+
</thead>
|
|
126
|
+
<tbody>
|
|
127
|
+
<tr>
|
|
128
|
+
<td>Deploy bot</td>
|
|
129
|
+
<td>3 March 2026</td>
|
|
130
|
+
<td>Active</td>
|
|
131
|
+
</tr>
|
|
132
|
+
<tr class="destructive">
|
|
133
|
+
<td>Old laptop</td>
|
|
134
|
+
<td>12 June 2024</td>
|
|
135
|
+
<td>Revoked</td>
|
|
136
|
+
</tr>
|
|
137
|
+
</tbody>
|
|
138
|
+
</table>
|
|
139
|
+
</div>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
| Clase | Efecto |
|
|
143
|
+
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
144
|
+
| `.data-table` | Da estilo a una `<table>`: ancho completo, texto `.text-body`, un fondo de encabezado, la esquina de superficie, relleno interior en las celdas y un color de hover en las filas del cuerpo. |
|
|
145
|
+
| `.table-wrap` | Hace que una tabla tenga scroll horizontal cuando es más ancha que su contenedor. |
|
|
146
|
+
| `.ruled` | En `.data-table`. Dibuja una línea entre las filas del cuerpo. |
|
|
147
|
+
| `.ruleless` | En `.data-table`. No dibuja ninguna línea dentro de la tabla. |
|
|
148
|
+
|
|
149
|
+
### Intención de las filas
|
|
150
|
+
|
|
151
|
+
Las filas de una tabla toman la intención de la tabla, así que `.data-table.success` colorea de verde su encabezado y sus líneas. Una fila con su propia clase de intención usa esa en su lugar, como hace el `<tr class="destructive">` de la clave revocada. `<tr class="neutral">` devuelve una fila a neutra dentro de una tabla de color. En una tabla `.solid`, una fila con su propia intención conserva el color de texto de la tabla para seguir siendo legible sobre el relleno de la tabla, y muestra su intención con su línea divisoria y su hover. Es el único lugar en el que una intención se hereda, porque las filas son partes de la tabla, no componentes separados.
|
|
152
|
+
|
|
153
|
+
Solo las seis intenciones incorporadas y `.neutral` cambian el color de una fila del cuerpo. Una fila con una intención que definiste tú, como `<tr class="beta">`, se ve como el resto de la tabla: su texto, su línea y su hover vienen de la intención de la tabla. Para marcar esa fila, escribe en ella una clase de intención incorporada y cambia en la fila la familia de colores de esa intención, como describe [Temas → Tu propia intención](./theming.md#tu-propia-intención), o pinta la fila con tus propias utilidades.
|
|
154
|
+
|
|
155
|
+
### Líneas divisorias de las tablas
|
|
156
|
+
|
|
157
|
+
Una tabla dibuja líneas debajo de su encabezado y encima de su pie. `.ruled` y `.ruleless` las cambian junto con las líneas entre las filas del cuerpo:
|
|
158
|
+
|
|
159
|
+
| Clase | Debajo del encabezado y encima del pie | Entre las filas del cuerpo |
|
|
160
|
+
| ----------- | -------------------------------------- | -------------------------- |
|
|
161
|
+
| `.ruleless` | No | No |
|
|
162
|
+
| _ninguna_ | Sí | No |
|
|
163
|
+
| `.ruled` | Sí | Sí |
|
|
164
|
+
|
|
165
|
+
`--ui-rule` es el token detrás de las dos clases, así que un contenedor puede poner líneas en todas las tablas que contiene: `style="--ui-rule: 100%"` actúa como `.ruled`, y `0%` como `.ruleless`.
|
|
166
|
+
|
|
167
|
+
El marco alrededor de la tabla es aparte: una tabla no tiene borde por defecto, y `.edged` le añade uno. Las tres elecciones no se afectan entre sí, así que `.data-table.ruleless.edged` es una tabla con marco y sin líneas dentro, y `.data-table.ruled` tiene todas las filas separadas y ningún marco.
|
|
168
|
+
|
|
169
|
+
### Presentación en las tablas
|
|
170
|
+
|
|
171
|
+
Una tabla lee la [presentación](./composing.md#presentación) en su encabezado, sus líneas y su borde:
|
|
172
|
+
|
|
173
|
+
```html
|
|
174
|
+
<table class="data-table success soft edged">
|
|
175
|
+
…
|
|
176
|
+
</table>
|
|
177
|
+
<table class="data-table ghost">
|
|
178
|
+
<!-- Sin fondo de encabezado: solo líneas y texto -->
|
|
179
|
+
</table>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
- `.soft`, el valor por defecto, da al encabezado el tono de fondo discreto, `--color-foreground`, con cualquier intención. Una tabla no tiene estado de hover para un tinte, así que una `.data-table.success.soft` no se vuelve verde; sus líneas y su borde sí.
|
|
183
|
+
- `.ghost` quita el fondo del encabezado y deja las líneas y el texto.
|
|
184
|
+
- `.solid` rellena el encabezado con el color de la intención.
|
|
185
|
+
|
|
186
|
+
### Esquinas y scroll
|
|
187
|
+
|
|
188
|
+
Una tabla toma la esquina de superficie, como una tarjeta a su lado. Las celdas de las esquinas llevan las esquinas, así que un `<caption>` encima de la tabla no queda recortado en ningún navegador. Una celda que ocupa varias filas hasta una esquina inferior deja esa esquina recta.
|
|
189
|
+
|
|
190
|
+
`.table-wrap` tiene scroll, y un elemento con scroll recorta todo lo que se dibuja fuera de él, incluido un tooltip en una celda; consulta [Tooltips → Dónde queda recortado un tooltip](./tooltips.md#dónde-queda-recortado-un-tooltip).
|
|
191
|
+
|
|
192
|
+
- Bajo una estética que dibuja un resplandor alrededor de los componentes, como `.cyber`, el contenedor deja espacio para el resplandor para que no quede recortado. El contenedor se extiende entonces esa distancia más allá de su padre, lo que solo se nota cuando el padre toca el borde de la ventana.
|
|
193
|
+
- El contenedor solo puede dejar espacio para el resplandor de una estética que lo rodea. Pon la clase de estética en `.table-wrap` o en un elemento por encima, no solo en la tabla.
|
|
194
|
+
- Las sombras, como la de una tabla `.raised`, no reciben espacio y quedan recortadas.
|
|
195
|
+
|
|
196
|
+
Mantén el contenedor en cualquier tabla que pueda ser más ancha que su contenedor; sin él, una tabla ancha ensancha toda la página.
|
|
197
|
+
|
|
198
|
+
## Citas, código y teclas
|
|
199
|
+
|
|
200
|
+
| Clase | Uso | Aspecto por defecto | La intención colorea |
|
|
201
|
+
| --------------- | --------------------------------------------------------------------------------------- | ----------------------------------- | -------------------- |
|
|
202
|
+
| `.quote` | Un `<blockquote>`. Un `<cite>` dentro se muestra en redonda y toma el color de la cita. | Una barra al principio, sin relleno | Barra, fondo, texto |
|
|
203
|
+
| `.quote-inline` | Una cita en línea `<q>`. | Solo el estilo de cita | Nada |
|
|
204
|
+
| `.kbd` | Una tecla que pulsa el usuario, como <kbd>Ctrl</kbd>. | Un chip teñido con borde | Fondo, borde, texto |
|
|
205
|
+
| `.code` | Código en línea. | Un chip teñido sin borde | Fondo, texto |
|
|
206
|
+
| `.pre` | Un bloque de código. Tiene scroll horizontal cuando una línea es demasiado larga. | Un bloque teñido sin borde | Fondo, texto |
|
|
207
|
+
|
|
208
|
+
```html
|
|
209
|
+
<p>Press <kbd class="kbd">Ctrl</kbd> + <kbd class="kbd">K</kbd> to search members.</p>
|
|
210
|
+
<p>Use the <code class="code">Authorization</code> header with your API key.</p>
|
|
211
|
+
<kbd class="kbd primary solid">Ctrl</kbd>
|
|
212
|
+
<kbd class="kbd primary soft edged">Shift</kbd>
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Un `.kbd`, un `.code` o un `.pre` reposa sobre el tono subtle de su intención, `--color-surface` para la neutra, y una clase de intención incluida añade encima un 12% de su color. `.ghost` no está soportado en estos tres: el fondo teñido es lo que los convierte en chips, así que lo conservan y `.ghost` no cambia nada. Su fuente es `--font-mono`; consulta [Temas → Fuentes](./theming.md#fuentes).
|
|
216
|
+
|
|
217
|
+
## Siguiente paso
|
|
218
|
+
|
|
219
|
+
[Preajustes](./presets.md) muestra cómo definir un aspecto una sola vez en lugar de en cada elemento. [Accesibilidad](../accessibility.md) enumera lo que el CSS hace por tus usuarios y lo que tu aplicación todavía les debe.
|