Tengo el siguiente fragmento de CSS y HTML que se está representando.
textarea
{
border:1px solid #999999;
width:100%;
margin:5px 0;
padding:3px;
}
<div style="display: block;" id="rulesformitem" class="formitem">
<label for="rules" id="ruleslabel">Rules:</label>
<textarea cols="2" rows="10" id="rules"/>
</div>
El problema es que el área de texto termina siendo 8px más ancho (2px para borde + 6px para relleno) que el padre. ¿Hay alguna manera de continuar usando el borde y el relleno pero restringiendo el tamaño total textarea
del ancho de los padres?
html
css
stylesheet
Eric Schoonover
fuente
fuente
Respuestas:
¿Por qué no olvidar los hacks y simplemente hacerlo con CSS?
Uno que uso con frecuencia:
Consulte el soporte del navegador aquí .
fuente
La respuesta a muchos problemas de formato CSS parece ser "agregar otro <div>!"
Entonces, en ese espíritu, ¿ha intentado agregar un div de envoltura al que se aplica el borde / relleno y luego poner el área de texto de 100% de ancho dentro de eso? Algo como (no probado):
fuente
Consideremos el resultado final presentado al usuario de lo que queremos lograr: un área de texto acolchada con un borde y un relleno, cuyas características son que al hacer clic pasan el foco a nuestra área de texto y la ventaja de un ancho automático del 100% típico de los elementos de bloque.
El mejor enfoque en mi opinión es utilizar soluciones de bajo nivel en la medida de lo posible, para alcanzar el máximo soporte de navegadores. En este caso, el único HTML podría funcionar bien, evitando el uso de Javascript (que de todos modos todos amamos).
La etiqueta LABEL viene en nuestra ayuda porque tiene ese comportamiento y puede contener los elementos de entrada a los que debe dirigirse. Su estilo predeterminado es el de los elementos en línea, por lo que, al darle a la etiqueta un estilo de visualización de bloque, podemos aprovechar el ancho automático del 100%, incluido el relleno y los bordes, mientras que el área de texto interna no tiene borde, relleno y un ancho del 100% .
Echando un vistazo a los detalles específicos del W3C, otras ventajas que podemos notar son:
Consulte los detalles del W3C para obtener información más detallada.
Ejemplo simple:
El relleno y el borde de los elementos .textareaContainer son los que queremos dar al área de texto. Intenta editarlos para darle el estilo que quieras. Le di un relleno y bordes grandes y visibles al elemento .textareaContainer para que pueda ver su comportamiento al hacer clic.
fuente
Si no le preocupa demasiado el ancho del relleno, esta solución también mantendrá el relleno en porcentajes.
No es perfecto, pero obtendrá algo de relleno y el ancho se sumará al 100%, por lo que todo está bien
fuente
Encontré otra solución aquí que es tan simple: agregar padding-right al contenedor del área de texto. Esto mantiene el margen, el borde y el relleno en el área de texto, lo que evita el problema que Beck señaló sobre el enfoque destacado que Chrome y Safari pusieron alrededor del área de texto.
El relleno derecho del contenedor debe ser la suma del margen efectivo, el borde y el relleno en ambos lados del área de texto, más cualquier relleno que pueda desear para el contenedor. Entonces, para el caso en la pregunta original:
fuente
Este código funciona para mí con IE8 y Firefox
fuente
Puede hacer uso de la propiedad de tamaño de caja, es compatible con todos los principales navegadores compatibles con el estándar e IE8 +. Sin embargo, aún necesitará una solución para IE7. Lee más aquí .
fuente
No, no puedes hacer eso con CSS. Esa es la razón por la que Microsoft presentó inicialmente otro modelo de caja , y quizás más práctico . El modelo de caja que finalmente ganó, hace que sea poco práctico mezclar porcentajes y unidades.
No creo que esté bien que usted exprese el ancho de los bordes y el relleno también en porcentaje del padre.
fuente
Estaba buscando una solución de diseño en línea en lugar de una solución CSS, y esto es lo mejor que puedo obtener para un área de texto receptiva:
fuente
Si rellenas y lo compensas así:
el lado derecho del área de texto se alinea perfectamente con el lado derecho del contenedor, y el texto dentro del área de texto se alinea perfectamente con el texto del cuerpo en el contenedor ... y el lado izquierdo del área de texto 'sobresale' un poco. A veces es más bonito.
fuente
Usar propiedad de tamaño de caja :
Eso ayudará
fuente
Para las personas que usan Bootstrap, textarea.form-control también puede generar problemas de tamaño de textarea. Chrome y Firefox parecen usar diferentes alturas con el siguiente CSS de Bootstrap:
fuente
A menudo soluciono ese problema con
calc()
. Simplemente le da al área de texto un ancho del 100% y una cierta cantidad de relleno, pero debe restar el relleno total izquierdo y derecho del ancho del 100% que le ha dado al área de texto:O si quieres darle un borde al área de texto:
fuente
¿Qué hay de los márgenes negativos?
fuente
fuente