Saltar al contenido
menumenu tanreiexpand_morecontrasttranslate
tanreiexpand_more
Primeros pasosWebReactSwiftUIJetpack ComposeFlutterReact NativePreajustesTu propio sistema de diseñoUsar Tanrei con agentes de IAMarcaTokens de diseñoSistemas de diseño y personalizaciónTheme StudioColorTipografíaIconosFormaElevaciónMovimientoEstados de interacciónComportamientoDiseño de páginaAccesibilidadTextosTokens de colorTokens de la escala tipográficaTokens de formaTokens de elevaciónTokens de movimientoTokens de estadoTokens de espacio y de medidaComponentesBotónBotón de acción principalBotón segmentadoGrupo de botonesBotón con menúBarra de herramientasBotón de copiarCasilla de verificaciónBotón de opciónInterruptorChipMenúControl deslizanteCampo de control deslizanteCalendarioDateTimePickerGrupo de camposGrupo de botones de opciónGrupo de casillas de verificaciónSelectCampo de selecciónBarra de menúsSubida de archivosSelector de archivos AvanzadoZona de soltar archivosEntrada de texto AvanzadoCampo de textoCampo de chipsCampoCuadro combinado AvanzadoCampo de cuadro combinadoEntrada numérica AvanzadoCampo numéricoEntrada de color AvanzadoCampo de colorEntrada de código de un solo uso AvanzadoCampo de código de un solo usoEntrada de texto incrustada AvanzadoCuadro de redacción de chatTarjetaDivisorCapa modal AvanzadoDiálogoListaFila de listaHoja inferiorHoja lateralCarruselBloque de códigoTablaPopoverPasosAcordeónLista de descripcionesFiguraEstructura de la aplicaciónCabecera de páginaVista de árbolLínea de tiempoVista previa de imágenesTirador de tamañoMarco redimensionableÁrea de desplazamientoInsigniaIndicador de progresoMedidorContador animadoIndicador de cargaSnackbarTooltipAtajo de tecladoTagCódigo en líneaCalloutAvatarEstado vacíoGrupo de tagsEsqueletoElemento de archivoMuestraTexto en marquesinaPestañasVista de pestañasBarra de la aplicaciónBarra de navegaciónPanel de navegaciónBúsquedaEnlacePaginaciónEnlaces anterior y siguienteIndicador de pasosRuta de navegaciónTabla de contenidoTarjeta de enlaceMenú FABEstadoCómo se construye TanreiCómo contribuirLicencia y atribución
InicioComponentesMarco redimensionable

Marco redimensionable

Una caja cuya anchura y altura cambia una persona con un tirador en su borde o en su esquina, con el teclado o con una sola pulsación. Con el aspecto outlined, es donde se comprueba una vista previa con la anchura de un teléfono y la de un portátil; con plain, es el borde de un panel de navegación o de una barra lateral.

content_copyVer en Markdown
Categoría
Contención
Tokens
comp.resizable-frame
Nivel
Compuesto
Se compone de
Handle

Descripción general

Web
tanrei-resizable-frame
clock_loader_40
SwiftUI
TanreiResizableFrame
radio_button_unchecked
Jetpack Compose
TanreiResizableFrame
radio_button_unchecked
Flutter
TanreiResizableFrame
radio_button_unchecked
React Native
ResizableFrame
radio_button_unchecked

Generado a partir de docs/status/status.json, specs/resizable-frame.spec.json

Una vista previa que una persona redimensiona por su borde final, su borde inferior y su esquina

Arrastra un tirador, o ve a uno con Tab y usa las flechas.

Un marco redimensionable le da a lo que contiene una anchura y una altura que una persona puede cambiar. Sus tiradores son tiradores de tamaño: si se arrastran, cambian el tamaño; si se mueven con el teclado, lo cambian paso a paso; si se pulsan sin arrastrar, alternan entre el tamaño máximo y el anterior. El marco guarda el tamaño, te avisa cuando una persona lo ha cambiado y le da a cada tirador el tamaño como valor, para que la tecnología de asistencia lo lea.

Tiene dos aspectos. Outlined es una caja con esquinas redondeadas y una línea fina, con los tiradores fuera de ella para que no tapen nada: el lugar para comprobar cómo responde una página o un componente al espacio que se le da. Plain no dibuja nada propio: el contenido dibuja su propia superficie y cada tirador está en su borde, como un panel de navegación que una persona ensancha para ver nombres largos o una barra lateral que estrecha para el trabajo de al lado.

En la web es <tanrei-resizable-frame>. Las demás plataformas aún no lo han implementado.

Uso

<!-- Una vista previa que se comprueba con la anchura de un teléfono, de una tableta y de un portátil: un arrastre se ajusta a cada una. -->
<tanrei-resizable-frame width="390" height="640" snap-widths="360 600 1024" width-label="Cambiar la anchura de la vista previa">
  <iframe title="Vista previa" src="/preview"></iframe>
</tanrei-resizable-frame>

<!-- Una barra lateral al final del diseño: plain, redimensionada desde su borde inicial. -->
<tanrei-resizable-frame id="side" variant="plain" handles="start" min-width="240" max-width="560" size-indicator="none" width-label="Cambiar el tamaño de la barra lateral">
  <aside>…</aside>
</tanrei-resizable-frame>

<script type="module">
  import '@tanrei/web/components/resizable-frame';
  const side = document.querySelector('#side');
  // Conserva la anchura de la persona de una visita a la siguiente.
  side.width = Number(localStorage.getItem('side-bar')) || 320;
  side.addEventListener('change', (e) => localStorage.setItem('side-bar', String(e.detail.width)));
</script>
import { ResizableFrame } from '@tanrei/react';

<ResizableFrame
  variant="plain"
  handles={['start']}
  width={width}
  minWidth={240}
  maxWidth={560}
  sizeIndicator="none"
  widthLabel="Cambiar el tamaño de la barra lateral"
  onChange={(e) => setWidth(e.detail.width)}
>
  <aside>…</aside>
</ResizableFrame>

Especificaciones

Anatomía

Parte Descripción
1 container The box the content is laid out in, as wide and as tall as the frame's size. Outlined, its corners rounded and edged with one hairline, and the content clipped to it; plain, nothing drawn. It gives the content no fill of its own.
2 content Whatever the product puts in the frame: a component, an embedded document, a layout, a navigation drawer. The frame gives it its width and its height and does nothing else to it.
3 start-handle · opcional A Handle (axis horizontal) centred along the start edge: it changes the width from that edge (a side bar at the end of a layout).
4 end-handle · opcional A Handle (axis horizontal) centred along the end edge: it changes the width.
5 bottom-handle · opcional A Handle (axis vertical) centred along the bottom edge: it changes the height.
6 corner-handle · opcional A Handle (axis both, corner bottom-end) at the bottom-end corner: it changes both.
7 size-indicator · opcional A small label inside the box at its top-end corner that shows the size as width × height in pixels while a handle is held or has keyboard focus, or always.

Propiedades

Propiedad Tipo Valor predeterminado Descripción
variant outlined | plain "outlined" outlined: a box with rounded corners and one hairline, its handles outside it so that they cover nothing — where a person checks how content responds to its room (a preview). plain: no edge and no corners of its own, the content drawing its own surface, and each handle centred on its edge — the edge of a pane (a navigation drawer, a side bar).
handles strings end Which handles the frame draws: any of start, end, bottom and bottom-end, in any combination. start is for content at the end of a layout, which grows toward the start (a side bar); end for content at its start (a preview, a navigation drawer). An empty list draws none, and the frame is a box of the size the product sets.
width number null The width of the box in pixels. Null takes the width the layout gives. A drag, a key or an activation changes it, and the frame keeps the width the person gave until the product sets another; a product that keeps a person's width (a drawer's, from one visit to the next) stores it from change and sets it again.
height number null The height of the box in pixels. Null takes the height the layout gives where it gives one (a row that stretches its items, a grid's cell, a pane beside the page), and the content's height where it does not, within minHeight and maxHeight. Changed as width is.
minWidth number null The least width a person can give. Null takes comp.resizable-frame.container.min-width (320 in the default system: the width at which content must reflow without scrolling sideways, WCAG 1.4.10). A pane sets its own (a navigation drawer's least).
maxWidth number null The greatest width. Null is the width the layout gives the frame.
minHeight number null The least height. Null takes comp.resizable-frame.container.min-height.
maxHeight number null The greatest height. Null is unlimited where the layout lets the frame grow.
snapWidths numbers Widths in whole pixels a drag of a handle that changes the width snaps to (360, 600, 1024: a common phone, a tablet, a small laptop). A width within comp.resizable-frame.snap-distance of one is taken as that one.
step number 10 How many pixels one arrow key changes a size by.
largeStep number 100 How many pixels Shift with an arrow key, Page Up or Page Down changes a size by.
sizeIndicator none | active | always "active" When the size indicator is drawn: never; while a handle is held or has keyboard focus; or all the time. A pane that is not checked for its size (a navigation drawer) sets none.
widthLabel string "" The accessible name of the start and the end handle ("Resize preview width", "Resize navigation"). Required while one of them is drawn.
heightLabel string "" The accessible name of the bottom handle ("Resize preview height"). Required while it is drawn.
cornerLabel string "" The accessible name of the corner handle ("Resize preview"). Required while it is drawn.

Slots

Slot Descripción
default The content: a component, an embedded document, a layout, a navigation drawer. A fixture's string is drawn as plain text in it.

Eventos

Evento Descripción
resize The size changed during a drag; emitted in every frame it changes. Carries width and height in pixels.
change A person finished changing the size: a drag ended, a key changed it, or a handle was activated. Carries width and height. Not emitted when the product sets a size.

Estados

Comportamiento

Requisitos en formato EARS. Cada implementación de plataforma se prueba contra estos identificadores. El texto de los requisitos se muestra tal como está en la especificación, en inglés.

ID Requisito
RSF-1 THE resizable frame SHALL lay out its container as a box of its width and its height — width while it is not null and otherwise the width the layout gives it, height while it is not null and otherwise the height the layout gives it or, where the layout gives none, its content's height — each kept within its least and greatest (minWidth or comp.resizable-frame.container.min-width, and the lesser of maxWidth and the layout's width; minHeight or comp.resizable-frame.container.min-height, and maxHeight), with no fill and no elevation of its own, placed at the start edge of the room the layout gives it, or at its end edge WHILE handles names start and not end, so that the edge a person drags is the one that moves.
RSF-2 WHILE variant is outlined THE resizable frame SHALL draw its container with comp.resizable-frame.container.shape corners eased by sys.shape.corner-smoothing, edged inside with a line comp.resizable-frame.outline.width wide in comp.resizable-frame.outline.color, SHALL lay its content out at the box's width and clip it to the box's shape, and WHILE the content is taller than the box SHALL scroll it inside the box and make the box one focus stop, so that a keyboard scrolls it; WHILE variant is plain THE resizable frame SHALL draw no edge and no corners, SHALL give the content the box's width and height to fill, and SHALL clip nothing: the content draws its own surface and scrolls itself. In both THE resizable frame SHALL style nothing inside the content.
RSF-3 THE resizable frame SHALL draw the handles that handles names and no other: for start and end a Handle with axis horizontal centred along that edge, for bottom a Handle with axis vertical centred along the bottom edge, for bottom-end a Handle with axis both and corner bottom-end at that corner, each at size medium, and each with a hit area that meets the minimum target by its own rule (HDL-5). WHILE variant is outlined each handle SHALL stand outside the box, its box comp.resizable-frame.handle.gap beyond the edge (beyond both edges for the corner), and THE resizable frame SHALL keep room for them outside the box, so that they never cover the content; WHILE variant is plain each handle SHALL be centred on its edge (its corner on the box's corner) and take no room.
RSF-4 WHILE a drag of a handle lasts THE resizable frame SHALL change its width by the inline distance of the end and the corner handle, and by that distance taken the other way for the start handle, and its height by the block distance of the bottom and the corner handle, from the size it had when the drag began, kept within its least and greatest, following the drag without a motion, and SHALL emit resize with the new width and height in every frame the size changes; WHEN the drag ends THE resizable frame SHALL keep the size and emit change once, and none WHERE the size did not change.
RSF-5 WHILE a drag of a handle that changes the width lasts and snapWidths names widths THE resizable frame SHALL take a width within comp.resizable-frame.snap-distance of one of them as that width, and SHALL let the width go on with the drag once it is farther than that.
RSF-6 WHILE a drag of a handle lasts THE resizable frame SHALL keep every embedded document in its content from taking pointer input, so that the drag is not lost when the pointer passes over it, and SHALL give it input again WHEN the drag ends.
RSF-7 WHEN a handle emits step THE resizable frame SHALL change the size the step's axis stands for — the width for the inline axis, the height for the block axis — by step pixels for amount one and by largeStep pixels for amount large, wider toward the edge the handle stands on (toward the end for the end and the corner handle, toward the start for the start handle) and taller downward, and to its least for amount limit with direction −1 (Home) and to its greatest with direction 1 (End), kept within its least and greatest, and SHALL emit change once WHERE the size changed; it SHALL move to the new size over comp.resizable-frame.motion.resize-duration with comp.resizable-frame.motion.resize-easing, and at once where motion is reduced.
RSF-8 WHEN the start or the end handle is activated THE resizable frame SHALL make its width its greatest WHILE it is narrower, and SHALL give it back the width it had before the person last made it the greatest WHILE it already is the greatest (the least width where it had none); the bottom handle SHALL do the same with the height, the content's height standing for the greatest WHILE maxHeight is null; the corner handle SHALL do both. Each SHALL move as RSF-7 says and emit change once, so that no size the frame offers depends on a drag (WCAG 2.5.7).
RSF-9 THE resizable frame SHALL give each handle the value its size stands for — the width in pixels for the start and the end handle, the height for the bottom and the corner handle — with its least and greatest as min and max, and SHALL name the start and the end handle by widthLabel, the bottom handle by heightLabel and the corner handle by cornerLabel; WHILE a drawn handle's label is empty THE resizable frame SHALL still render it, and in debug builds report that it has no accessible name.
RSF-10 WHILE sizeIndicator is always, or sizeIndicator is active and a handle is held by a press or a drag or has keyboard focus, THE resizable frame SHALL draw its size indicator inside the box, comp.resizable-frame.size-indicator.offset from its top and end edges, over the content: the width, the character ×, and the height, in whole pixels written with the platform's digits for the layout's language and without grouping, in comp.resizable-frame.size-indicator.label.typescale and comp.resizable-frame.size-indicator.label.color, on a container comp.resizable-frame.size-indicator.container.height high, padded by comp.resizable-frame.size-indicator.container.padding-inline at its sides, with comp.resizable-frame.size-indicator.container.shape corners, filled with comp.resizable-frame.size-indicator.container.color; it SHALL take no input, and SHALL be hidden from assistive technology, which reads each size as its handle's value.
RSF-11 WHEN the size indicator appears or goes THE resizable frame SHALL fade it in over comp.resizable-frame.motion.indicator-enter-duration with comp.resizable-frame.motion.indicator-enter-easing and out over comp.resizable-frame.motion.indicator-exit-duration with comp.resizable-frame.motion.indicator-exit-easing, and at once where motion is reduced; WHILE a drag lasts it SHALL update the numbers in every frame, without a motion.
RSF-12 WHEN the product sets width or height THE resizable frame SHALL draw the new size at once and SHALL NOT emit resize or change; WHEN the layout's width becomes narrower than the frame's width THE resizable frame SHALL be as wide as the layout allows and keep the width the person gave for when there is room again.
RSF-13 WHERE the layout direction is right-to-left THE resizable frame SHALL mirror its layout: the box at the right of its room (at its left WHILE it stands at the end edge, RSF-1), the end handle on the box's left edge and the start handle on its right, the corner handle at the bottom-left corner, so that a drag away from the box widens it, and the size indicator at the top-left, its numbers still written left to right, the width at the left of the height, as a size is written in every language.
RSF-14 THE resizable frame SHALL take its layout direction from where it is used — the direction of the nearest ancestor that sets one, and the platform's own where none does — and SHALL have no direction setting of its own; WHEN that direction changes while the frame is shown THE resizable frame SHALL draw itself for the new direction at once, without a motion of its own, keeping its size.
RSF-15 WHERE the platform draws with a person's own forced colors THE resizable frame SHALL draw the outlined box's edge in the platform's text color, and its size indicator's text in the platform's text color on the platform's canvas color, with an edge of comp.resizable-frame.outline.width in the text color around it.
RSF-16 IF handles names a value other than start, end, bottom and bottom-end, or variant or sizeIndicator a value the component does not define, THE resizable frame SHALL ignore that handle, draw the variant as outlined or treat the indicator as active, and in debug builds report the unknown value; IF a value of snapWidths is not a whole number of pixels above zero THE resizable frame SHALL ignore it and in debug builds report it.
RSF-17 THE resizable frame SHALL have no words of its own and SHALL read none of the product's words: widthLabel, heightLabel and cornerLabel are about this one frame, and the size indicator is made of digits and a mark.
RSF-18 THE resizable frame SHALL add to the focus order its handles after its content, in the order start, end, bottom, bottom-end, and no other stop of its own but the box while it scrolls (RSF-2).
RSF-19 WHILE variant is outlined and a fine pointer is over the frame — its box or a handle's target — THE resizable frame SHALL draw its handles at rest (the handle's revealed), so that a person who points at a preview sees where to take it; WHILE variant is plain THE resizable frame SHALL leave each handle out of sight until it is used, as the Handle does (HDL-23), so that a pane's edge stays quiet under a pointer that only passes over the pane.

Correspondencia de nombres por plataforma

Paridad no significa API idénticas. Cada plataforma expresa el mismo contrato con su propio estilo.

Especificación Web SwiftUI Jetpack Compose Flutter React Native
Componente tanrei-resizable-frame TanreiResizableFrame TanreiResizableFrame TanreiResizableFrame ResizableFrame
variant · Propiedad variant variant variant variant variant
handles · Propiedad handles handles handles handles handles
width · Propiedad width width width width width
height · Propiedad height height height height height
minWidth · Propiedad minWidth minWidth minWidth minWidth minWidth
maxWidth · Propiedad maxWidth maxWidth maxWidth maxWidth maxWidth
minHeight · Propiedad minHeight minHeight minHeight minHeight minHeight
maxHeight · Propiedad maxHeight maxHeight maxHeight maxHeight maxHeight
snapWidths · Propiedad snapWidths snapWidths snapWidths snapWidths snapWidths
step · Propiedad step step step step step
largeStep · Propiedad largeStep largeStep largeStep largeStep largeStep
sizeIndicator · Propiedad sizeIndicator sizeIndicator sizeIndicator sizeIndicator sizeIndicator
widthLabel · Propiedad widthLabel widthLabel widthLabel widthLabel widthLabel
heightLabel · Propiedad heightLabel heightLabel heightLabel heightLabel heightLabel
cornerLabel · Propiedad cornerLabel cornerLabel cornerLabel cornerLabel cornerLabel
resize · Evento resize onResize onResize onResize onResize
change · Evento change onChange onChange onChanged onChange
Notas <tanrei-resizable-frame variant handles="end bottom-end" width height min-width max-width min-height max-height snap-widths="360 600 1024" step large-step size-indicator width-label height-label corner-label> with the content in the default slot. handles and snapWidths are array properties; their attributes are space-separated or a JSON array. The handles are <tanrei-handle> in the shadow root. RSF-6 sets pointer-events: none on every slotted <iframe>, <object> and <embed> (and every one inside the slotted content) between the handles' resizestart and resizeend. resize and change are composed, bubbling CustomEvents with { width, height }; the Handle's own events stay in the shadow root. width and height are Binding<CGFloat?>; snapWidths is [CGFloat]. Content is the view builder. snapWidths: List<Dp>; sizes in Dp. Content is the trailing composable. snapWidths: List<double>. Content is child. snapWidths: number[]. Content is children.

Tokens

Token Alias de Valor resuelto (claro)
--tanrei-comp-resizable-frame-container-min-height — 200px
--tanrei-comp-resizable-frame-container-min-width — 320px
--tanrei-comp-resizable-frame-container-shape sys.shape.corner.large 12px
--tanrei-comp-resizable-frame-handle-gap sys.space.space100 8px
--tanrei-comp-resizable-frame-motion-indicator-enter-duration sys.motion.role.appear.hint.enter 250ms
--tanrei-comp-resizable-frame-motion-indicator-enter-easing sys.motion.easing.enter cubic-bezier(0.2, 0, 0, 1)
--tanrei-comp-resizable-frame-motion-indicator-exit-duration sys.motion.role.appear.hint.exit 200ms
--tanrei-comp-resizable-frame-motion-indicator-exit-easing sys.motion.easing.exit cubic-bezier(0.3, 0, 1, 1)
--tanrei-comp-resizable-frame-motion-resize-duration sys.motion.role.resize.default 300ms
--tanrei-comp-resizable-frame-motion-resize-easing sys.motion.easing.spatial cubic-bezier(0.2, 0, 0, 1)
--tanrei-comp-resizable-frame-outline-color sys.color.outline-variant #000000 · 8%
--tanrei-comp-resizable-frame-outline-width sys.border.hairline 1px
--tanrei-comp-resizable-frame-size-indicator-container-color sys.color.inverse-surface #1f1f1f
--tanrei-comp-resizable-frame-size-indicator-container-height — 24px
--tanrei-comp-resizable-frame-size-indicator-container-padding-inline sys.space.space100 8px
--tanrei-comp-resizable-frame-size-indicator-container-shape sys.shape.corner.small 6px
--tanrei-comp-resizable-frame-size-indicator-label-color sys.color.inverse-on-surface #f1f1f1
--tanrei-comp-resizable-frame-size-indicator-offset sys.space.space100 8px
--tanrei-comp-resizable-frame-snap-distance sys.space.space100 8px
--tanrei-comp-resizable-frame-size-indicator-label-typescale sys.typescale.code-small 400 12px/1.3333

Fixtures

Representaciones canónicas. Todas las plataformas capturan cada fixture con el mismo identificador para poder comparar los resultados.

Generado a partir de specs/resizable-frame.spec.json, tokens/comp/resizable-frame.tokens.json, design/tokens/

Pautas

Cuándo usarlo

Úsalo donde una persona deba darle a algo el espacio que quiera y ver qué hace con él: la vista previa de una página o de un componente con otra anchura, un panel junto al contenido principal, un panel de herramientas.

Necesitas Usa
Solo que la altura de un campo crezca con su texto El tirador propio de la esquina del campo de texto.
Una hoja que sube desde el borde inferior La hoja inferior, que dibuja su propio tirador de arrastre.
Elegir entre unos pocos tamaños fijos, sin nada entre ellos Un botón segmentado que los alterne.
Que lo que se muestra se haga más pequeño como una imagen, no que reciba menos espacio No esto: un marco redimensionable cambia el espacio, nunca la escala de lo que contiene.

Sus aspectos

variant Dibuja Úsalo para
outlined (predeterminado) Esquinas redondeadas y una línea fina; los tiradores, en su propio espacio fuera de la caja. El ratón sobre el marco muestra los tiradores. Una vista previa: el contenido se ve entero y nada del marco lo tapa.
plain Nada propio: el contenido llena la caja con su propia superficie. Cada tirador está en su borde y solo aparece cuando se señala, recibe el foco o se mantiene pulsado. El borde de un panel: un panel de navegación, una barra lateral.

Sus tiradores

handles Va en Cambia
end (predeterminado) El borde final La anchura. Para contenido al comienzo de un diseño: una vista previa, un panel de navegación.
start El borde inicial La anchura, que crece hacia el inicio. Para contenido al final de un diseño: una barra lateral. La caja se coloca entonces al final de su espacio.
bottom El borde inferior La altura.
bottom-end La esquina inferior final Las dos a la vez.

Indica cualquiera de ellos, en cualquier combinación; una lista vacía no dibuja ninguno, y el marco es una caja del tamaño que fijes. start y end siguen la dirección de la página: en un diseño de derecha a izquierda, el borde final es el izquierdo.

Tamaños

width y height son el tamaño de la caja en píxeles. Mientras son null, la caja toma la anchura que le da el diseño y la altura que le da el diseño, o la altura del contenido donde el diseño no le da ninguna. En cuanto una persona mueve un tirador, el tamaño es suyo, y se mantiene hasta que tú fijes otro. Un tamaño que fijas se dibuja al instante y no envía ningún evento; un diseño más estrecho estrecha la caja y le devuelve la anchura cuando vuelve a haber espacio.

La anchura mínima es minWidth, y 320 píxeles mientras no fijes ninguna: la anchura con la que el contenido debe reorganizarse sin desplazarse hacia los lados. Fija la tuya para un panel: un panel de navegación tiene su propia anchura mínima. La máxima es maxWidth, o el espacio que da el diseño. snapWidths son anchuras a las que se ajusta un arrastre al pasar por ellas, como las de un teléfono común, una tableta y un portátil pequeño.

Lo que te dice

Evento Cuándo
resize En cada fotograma en que un arrastre cambia el tamaño: width y height.
change Una vez que una persona ha cambiado el tamaño: terminó un arrastre, una tecla lo movió o se pulsó un tirador sin arrastrar. Guárdalo aquí si conservas el tamaño de una persona.

El indicador de tamaño

Mientras un tirador se mantiene pulsado o tiene el foco del teclado, una pequeña etiqueta en la esquina superior final de la caja muestra el tamaño, como «390 × 640». sizeIndicator con el valor always lo muestra siempre (una vista previa en la que se comprueba el tamaño) y con none, nunca (un panel, cuyo tamaño nadie lee). Se escribe con las cifras del idioma de la página y de izquierda a derecha en cualquier diseño, y la tecnología de asistencia no lo lee: lee en su lugar el valor de cada tirador.

Recomendado

  • Dale a cada tirador dibujado un nombre que diga qué redimensiona: widthLabel, heightLabel, cornerLabel («Cambiar la anchura de la vista previa», «Cambiar el tamaño de la barra lateral»).
  • Fija una anchura mínima con la que el contenido siga funcionando, y una máxima que deje usable el resto de la página.
  • Conserva el tamaño de una persona donde vaya a volver a él: la anchura de un panel de navegación o de una barra lateral, a partir de change.

Evita

  • No dibujes tus propios tiradores de cambio de tamaño alrededor del contenido: usa este marco, con plain para el borde de un panel.
  • No lo uses para hacer más pequeño el contenido como una imagen: cambia el espacio, no la escala.
  • No quites los tiradores de un panel cuyo tamaño una persona debe poder cambiar: las teclas y la pulsación son lo que usa quien no puede arrastrar.

Accesibilidad

Rol
none (a group of the product's content and its handles); each handle is a focusable separator
Etiquetado
Each handle is named by its label (widthLabel for the start and the end handle, heightLabel, cornerLabel) and tells its size as its value in pixels, with its least and greatest. The size indicator is hidden: it draws what the handles already tell.
Objetivo mínimo
El área de pulsación cumple el tamaño mínimo de objetivo aunque el tamaño visual sea menor. minimum 32px · pointer 44px · spacing 8px · touch 48px

Teclado

Teclas Acción
Tab Moves through the content, then the handles: start, end, bottom, corner.
Arrow keys on a handle Change the size by step pixels; with Shift, by largeStep (HDL-9, RSF-7). On the start handle the arrow toward the start widens.
Page Up / Page Down Change the size by largeStep.
Home / End Give the size its least or its greatest.
Enter / Space Switch between the greatest size and the size before it (RSF-8).

Notas

  • The default least width, 320, is the width at which content must reflow without a sideways scroll (WCAG 1.4.10), so that a person checking a design can reach that width and no narrower by accident; a product sets minWidth lower for a narrower check, and a pane sets its own.
  • Dragging movements (WCAG 2.5.7): every size is also reachable by activating a handle (the greatest and the one before) and by its keys.
  • The keys follow the window splitter pattern of the ARIA Authoring Practices: each handle is a separator with a value, Home and End give the least and the greatest.

Generado a partir de specs/resizable-frame.spec.json, tokens/sys/measure.tokens.json

De qué se encarga el componente

  • Cada tirador es un separador que recibe el foco — el divisor de ventanas de ARIA Authoring Practices —, nombrado por su etiqueta, con el tamaño en píxeles como valor y el mínimo y el máximo como rango.
  • Los tiradores van después del contenido en el orden de foco: inicial, final, inferior, esquina. La caja outlined solo es una parada de foco mientras su contenido es más alto que ella y se desplaza.
  • Las flechas cambian el tamaño en step píxeles; Mayús con una flecha, Re Pág y Av Pág, en largeStep; Inicio y Fin dan el mínimo y el máximo. En el tirador inicial, la flecha que apunta hacia el inicio ensancha.
  • Intro, Espacio o una pulsación sin arrastre alternan entre el tamaño máximo y el anterior, de modo que cada tamaño se alcanza sin arrastrar.
  • Mientras dura un arrastre, ningún documento incrustado en el contenido toma el puntero, así que el arrastre no se pierde cuando el puntero pasa por encima.
  • El indicador de tamaño está oculto para la tecnología de asistencia; dibuja lo que ya dicen los valores de los tiradores. Los cambios hechos con una tecla o una pulsación se aplican al instante donde se pide movimiento reducido.
  • En el modo de colores forzados, el borde outlined y el texto del indicador toman el color del texto, y el fondo del indicador el color del lienzo.

Qué debes hacer tú

  • Dale su etiqueta a cada tirador que dibujes. Sin ella, el tirador se dibuja y funciona igual, y una compilación de depuración lo avisa.
  • Comprueba que el contenido funciona en cada tamaño que permites, a partir de la anchura mínima.