Ok, entonces sabemos que establecer el relleno en un objeto hace que su ancho cambie incluso si se establece explícitamente. Si bien se puede argumentar la lógica detrás de esto, causa algunos problemas con algunos elementos.
Para la mayoría de los casos, solo agrega un elemento hijo y agrega relleno a ese en lugar del conjunto al 100%, pero para las entradas de formulario, ese no es un paso posible.
Echa un vistazo a esto: http://sandman.net/test/formcss.html
La segunda entrada tiene su relleno establecido en 5px, que prefiero a la configuración predeterminada. Pero desafortunadamente, eso hace que la entrada crezca 10px en todas las direcciones, incluida la adición de 10px al 100% de ancho.
El problema aquí es que no puedo agregar un elemento hijo dentro de la entrada, así que no puedo arreglarlo. Entonces la pregunta es:
¿Hay alguna forma de agregar relleno dentro de la entrada mientras se mantiene el ancho al 100%? Debe ser 100% ya que los formularios se mostrarán en padres de ancho diferente, por lo que no sé de antemano el ancho del padre.
box-sizing
atributo CSS3Respuestas:
Usando CSS3 puede usar el tamaño del cuadro de propiedad para alterar cómo el navegador calcula el ancho de la entrada .
Puede leer más sobre esto aquí: http://css-tricks.com/box-sizing/
fuente
box-sizing: border-box;
es lo primero en lo que pensé, pero absolutamente no funciona para mí. ¿Quizás el tatarabuelodisplay: flex;
está jugando con esto?No sé cuán compatible es el navegador cruzado (funciona en Firefox y Safari), pero podría probar esta solución:
(Solo publiqué los valores que cambié)
fuente
Una opción es envolver el
INPUT
en unDIV
que tiene el relleno.CSS:
HTML:
fuente
Los olvidados
calc
pueden venir al rescate aquí:Como sabemos que el relleno se agregará al ancho del elemento, simplemente restamos el relleno del ancho total. Es compatible con todos los principales navegadores, es receptivo y no requiere divs de contenedor desordenados.
fuente
He tenido algunos problemas con algo similar a esto. Tengo tds con entradas de 100% y un pequeño relleno. Lo que hice fue compensar el relleno en el td de la siguiente manera:
relleno de 8px para incluir el borde y el relleno de la entrada / área de texto. ¡Espero que esto ayude!
fuente
Quizás quite el borde + fondo del
input
, y en su lugar enciérrelo en undiv
borde + fondo y ancho: 100%, y establezca un margen en elinput
?fuente
Una solución que he encontrado que funciona es posicionar absolutamente la entrada con una etiqueta principal relativamente posicionada.
Aplican el estilo:
Lo único que debe tener en cuenta es que la etiqueta de párrafo necesita una configuración de altura ya que sus elementos secundarios absolutamente posicionados no expandirán su altura. Esto evita la necesidad de establecerlo
width: 100%
bloqueándolo a los lados izquierdo y derecho del elemento padre.fuente
Intenta usar porcentajes para tu relleno:
Si le preocupan los usuarios de navegadores antiguos que no pueden ver el recuadro sombreado, simplemente dé a la entrada un color de fondo sutil como respaldo. Si está utilizando píxeles para este tipo de cosas, entonces es probable que los esté utilizando en otro lugar, lo que podría presentar algunos desafíos adicionales, avíseme si los encuentra.
fuente
Lo único que sé para evitar esto es asignar valores como ese 100% -10. Pero tiene algunos problemas de compatibilidad aunque.
fuente