¿Cómo dar borde a cualquier elemento usando css sin agregar ancho de borde a todo el ancho del elemento?
Como en Photoshop, podemos dar trazos: adentro, centro y afuera
Creo que las propiedades de borde CSS predeterminadas están centradas como centro en Photoshop, ¿verdad?
Quiero dar un borde dentro de la caja, no afuera. y no desea incluir el ancho del borde en el ancho del cuadro.
Mira el tamaño de caja de CSS ...
La propiedad CSS3 de tamaño de caja puede hacer esto. El valor del cuadro de borde (a diferencia del valor predeterminado del cuadro de contenido) hace que el cuadro renderizado final tenga el ancho declarado y cualquier borde y relleno se corten dentro del cuadro. Ahora puede declarar de forma segura que su elemento tiene un ancho del 100%, incluido el relleno y el borde basados en píxeles, y lograr su objetivo a la perfección.
Sugeriría crear un mixin para manejar esto por ti. Puede encontrar más información sobre el tamaño de las cajas en W3c http://www.w3schools.com/cssref/css3_pr_box-sizing.asp
fuente
box-sizing
Será suficiente.Dependiendo de la compatibilidad de su navegador, puede utilizar la
box-shadow
propiedad.Puede establecer el valor de desenfoque en 0 y la extensión al grosor que desee. Lo mejor de la sombra del cuadro es que puede controlar si se dibuja afuera (por defecto) o adentro (usando la
inset
propiedad).Ejemplo:
o
Una gran ventaja de usar la sombra de caja es que puede ser creativo usando varias sombras de caja:
Lo único que no puedo decir es la diferencia que esto hará que el rendimiento del renderizado sea sabio. Asumiría que podría convertirse en un problema si tuviera cientos de elementos usando esta técnica en la pantalla a la vez.
fuente
Me encontré con el mismo problema.
Esta respuesta le permite especificar un solo lado. Y funcionaría en IE8 +, a diferencia de usar box-shadow.
Por supuesto, cambie las propiedades de sus pseudo elementos ya que necesita seleccionar un lado específico.
* Nuevo y mejorado *
Esto permite la posibilidad de usar bordes y golpear varios lados de una caja.
fuente
Úselo
box-sizing: border-box
para crear un borde DENTRO de un div sin modificar el ancho del div.Úselo
outline
para crear un borde FUERA de un div sin modificar el ancho del div.Aquí un ejemplo: https://jsfiddle.net/4000cae9/1/
Notas:
border-box
actualmente no es compatible con IEApoyo:
http://caniuse.com/#feat=outline
http://caniuse.com/#search=border-box
fuente
Como dijo Abenson, puedes usar un contorno, pero un problema es que Opera podría dibujar una "forma no rectangular". Otra opción que parece funcionar es usar márgenes negativos, como este css:
Con este html:
Otra opción menos limpia es agregar un marcado adicional al html. Por ejemplo, establece el ancho de un elemento exterior y agrega el borde al interior. El CSS:
Y el html:
fuente
Use relleno cuando no haya borde. Retire el relleno cuando haya un borde.
Esencialmente, simplemente reemplace el relleno de 2px con bordes de 2px. El tamaño de div sigue siendo el mismo.
fuente
En su caso, ¿puede modificarlo restando la mitad del borde del relleno? (-2,5 del relleno si su borde tiene 5 px de ancho, no puede tener un relleno negativo, por lo que para reducirlo, reduzca el ancho total del cuadro). Puede agregar 2.5px adicionales al margen para mantener el cuadro general del mismo tamaño.
Realmente no me gusta esta sugerencia, pero no creo que haya una manera de manejar esto limpiamente.
fuente
Por lo tanto, ¿está tratando de lograr lo mismo que el conocido error del modelo de caja de IE ? Eso no es posible. O desea admitir clientes con IE solo en Windows y elegir un tipo de documento que obligue a IE a entrar en modo peculiar .
fuente
Otra opción, si su color de fondo es sólido:
fuente
#FFF
por transparente y luego no es necesario que recuerde cambiar dos valores. Su sugerencia tiene la ventaja de que si necesitara un borde punteado, esto funcionaría dondebox-shadow
falte en este sentido.contorno: 3px negro sólido || borde: 3px negro sólido
fuente