Acerca de este problema HTML
El atributo wrap en un <textarea> controla cómo se envuelve el texto cuando se envía el formulario. El valor "virtual" fue usado por algunos navegadores más antiguos (especialmente las primeras versiones de Netscape e Internet Explorer) como una alternativa propietaria a lo que el Estándar HTML ahora llama "soft". Como "virtual" nunca fue parte de ninguna especificación HTML formal, el validador W3C lo rechaza correctamente como un valor inválido.
El Estándar HTML define solo dos valores válidos para wrap:
-
soft(por defecto): El texto se envuelve visualmente en el navegador para propósitos de visualización, pero no se insertan caracteres de salto de línea reales en los datos del formulario enviado. El servidor recibe el texto como líneas continuas. -
hard: El navegador inserta caracteres de retorno de carro + salto de línea (CRLF) en los puntos de envolvimiento visual cuando se envía el formulario, por lo que el servidor recibe el texto con saltos de línea duros. Al usarwrap="hard", debes especificar también el atributocolspara que el navegador sepa dónde están los puntos de envolvimiento.
Como "virtual" era funcionalmente idéntico a "soft", reemplazarlo es sencillo. Si omites el atributo wrap por completo, el navegador usa por defecto el envolvimiento suave, lo que te da el mismo comportamiento.
Por qué esto importa
Usar valores de atributo no estándar puede llevar a comportamientos impredecibles entre navegadores. Aunque la mayoría de los navegadores modernos probablemente recurrirán al envolvimiento suave cuando encuentren un valor wrap no reconocido, esto no está garantizado por ninguna especificación. Adherirse a valores válidos asegura un comportamiento consistente entre navegadores y mantiene tu marcado conforme a los estándares.
Cómo solucionarlo
-
Reemplaza
wrap="virtual"conwrap="soft"para obtener un equivalente explícito. -
Elimina el atributo
wrapcompletamente si quieres el comportamiento por defecto de envolvimiento suave. -
Usa
wrap="hard"con un atributocolssi realmente necesitas que se inserten saltos de línea duros en el envío.
Ejemplos
❌ Inválido: usar el valor no estándar "virtual"
<form>
<label for="msg">Mensaje</label>
<textarea id="msg" name="msg" wrap="virtual"></textarea>
</form>
Esto produce el error: Valor incorrecto “virtual” para el atributo “wrap” en el elemento “textarea”.
✅ Solucionado: usar wrap="soft" (equivalente a "virtual")
<form>
<label for="msg">Mensaje</label>
<textarea id="msg" name="msg" wrap="soft"></textarea>
</form>
✅ Solucionado: omitir wrap completamente (por defecto es "soft")
<form>
<label for="msg">Mensaje</label>
<textarea id="msg" name="msg"></textarea>
</form>
Como "soft" es el valor por defecto, eliminar el atributo produce un comportamiento idéntico y un marcado más limpio.
✅ Solucionado: usar wrap="hard" con cols
Si necesitas que el texto enviado incluya saltos de línea en los puntos de envolvimiento, usa wrap="hard" y especifica cols:
<form>
<label for="msg">Mensaje</label>
<textarea id="msg" name="msg" wrap="hard" cols="60" rows="6"></textarea>
</form>
Ten en cuenta que cols es requerido al usar wrap="hard". Omitirlo producirá un error de validación separado.
Otros valores heredados a tener en cuenta
El valor "virtual" no es el único valor wrap no estándar de los primeros días de la web. También puedes encontrar wrap="physical" (el equivalente heredado de "hard") o wrap="off" (que deshabilitaba el envolvimiento). Ninguno es válido en HTML moderno. Reemplaza "physical" con "hard" (y añade cols), y reemplaza "off" eliminando el atributo y usando CSS (white-space: nowrap; o overflow-wrap: normal;) para controlar el envolvimiento visual si es necesario.
Encuentra problemas como este automáticamente
Rocket Validator escanea miles de páginas en segundos, detectando problemas de HTML en todo tu sitio web.