Tengo un <div>
elemento y quiero ponerle un borde. Sé que puedo escribir style="border: 1px solid black"
, pero esto agrega 2px a cada lado del div, que no es lo que quiero.
Prefiero que este borde sea -1px desde el borde del div. El div en sí es 100px x 100px, y si agrego un borde, entonces tengo que hacer algunas matemáticas para que aparezca el borde.
¿Hay alguna forma de hacer que aparezca el borde y asegurarme de que el cuadro seguirá siendo de 100 px (incluido el borde)?
Respuestas:
Establecer
box-sizing
propiedad paraborder-box
:Funciona en IE8 y superior .
fuente
outline
.box-sizing
caniuse.com/#search=box-sizingTambién puedes usar box-shadow como este:
Ejemplo aquí: http://jsfiddle.net/nVyXS/ (pase el cursor para ver el borde)
Esto funciona solo en navegadores modernos. Por ejemplo: No hay soporte para IE 8. Consulte caniuse.com (función de sombreado) para obtener más información.
fuente
Probablemente sea una respuesta tardía, pero quiero compartir con mis hallazgos. Encontré 2 nuevos enfoques para este problema que no he encontrado aquí en las respuestas:
Borde interno a través de la
box-shadow
propiedad cssSí, box-shadow se usa para agregar box-shadow a los elementos. Pero puede especificar la
inset
sombra, que se vería como un borde interior en lugar de una sombra. Solo necesita establecer sombras horizontales y verticales0px
, y laspread
propiedad " "box-shadow
del ancho del borde que desea tener. Entonces, para el borde 'interno' de 10px, escribirías lo siguiente:Aquí está el ejemplo de jsFiddle que ilustra la diferencia entre el
box-shadow
borde y el borde 'normal'. De esta manera, su borde y el ancho del cuadro son de un total de 100 píxeles, incluido el borde.Más sobre box-shadow: aquí
Borde a través de la propiedad css del esquema
Aquí hay otro enfoque, pero de esta manera el borde estaría fuera de la caja. Aquí hay un ejemplo . Como se deduce del ejemplo, puede usar la
outline
propiedad css para establecer el borde que no afecta el ancho y la altura del elemento. De esta manera, el ancho del borde no se agrega al ancho de un elemento.Más sobre el esquema: aquí
fuente
Yahoo! Esto es realmente posible. Lo encontré.
Para borde inferior:
Para borde superior:
fuente
Usa el pseudo elemento :
Al
::after
usarlo, está estilizando el último hijo virtual del elemento seleccionado.content
La propiedad crea un elemento anónimo reemplazado .Estamos conteniendo el pseudo elemento usando la posición absoluta en relación con el padre. Entonces tiene libertad para tener cualquier fondo o borde personalizado en el fondo de su elemento principal.
Este enfoque no afecta la ubicación de los contenidos del elemento principal, que es diferente del uso
box-sizing: border-box;
.Considere este ejemplo:
Aquí el
.button
ancho está restringido usando el elemento padre. La configuraciónborder-left-width
ajusta el tamaño del cuadro de contenido y, por lo tanto, la posición del texto.El uso del enfoque de pseudoelementos no afecta el tamaño del cuadro de contenido.
Dependiendo de la aplicación, el enfoque que utiliza un pseudo-elemento podría o no ser un comportamiento deseable.
fuente
:Before
.Aunque esta pregunta ya se ha respondido adecuadamente con soluciones que utilizan las propiedades
box-shadow
youtline
, me gustaría ampliar ligeramente esto para todos aquellos que han aterrizado aquí (como yo) en busca de una solución para un borde interior con un desplazamientoEntonces, supongamos que tiene un negro de 100px x 100px
div
y necesita insertarlo con un borde blanco, que tiene un desplazamiento interno de 5px (digamos), esto todavía se puede hacer con las propiedades anteriores.sombra de la caja
El truco aquí es saber que se permiten varias sombras de cuadro, donde la primera sombra está en la parte superior y las sombras posteriores tienen un orden z menor.
Con ese conocimiento, la declaración de cuadro de sombra será:
Mostrar fragmento de código
Básicamente, lo que dice esa declaración es: primero renderice la última sombra (10 px en blanco), luego renderice la sombra negra anterior de 5 px encima.
esquema con desplazamiento de esquema
Para el mismo efecto que el anterior, las declaraciones generales serían:
Mostrar fragmento de código
NB:
outline-offset
IE no lo admite si eso es importante para usted.Codepen demo
fuente
Puede usar las propiedades
outline
youtline-offset
con un valor negativo en lugar de usar un regularborder
, funciona para mí:fuente
Sé que esto es algo antiguo, pero dado que las palabras clave "borde interior" me llevaron directamente aquí, me gustaría compartir algunos hallazgos que vale la pena mencionar aquí. Cuando estaba agregando un borde en el estado de desplazamiento, obtuve los efectos de los que habla OP. El borde anuncia píxeles a la dimensión del cuadro que lo hizo saltar. Hay dos formas más de lidiar con esto que también funcionan para IE7.
1) Tenga un borde ya unido al elemento y simplemente cambie el color. De esta manera las matemáticas ya están incluidas.
2) Compensa tu borde con un margen negativo. Esto todavía agregará los píxeles adicionales, pero la posición del elemento no será irregular.
fuente
Para una representación coherente entre navegadores nuevos y antiguos, agregue un contenedor doble, el exterior con el ancho, el interior con el borde.
obviamente, esto es solo si su ancho preciso es más importante que tener un marcado adicional
fuente
fuente
La mejor solución de navegador cruzado (principalmente para soporte de IE) como @Steve dijo es hacer un div 98px de ancho y alto que agregar un borde 1px a su alrededor, o podría hacer una imagen de fondo para div 100x100 px y dibujar un borde en él.
fuente
Puede mirar el esquema con desplazamiento, pero esto necesita algo de relleno para existir en su div. O puede posicionar absolutamente un borde div dentro, algo así como
Es posible que deba jugar con los márgenes en el div de bordes falsos para ajustarlo a su gusto.
fuente
Una solución más moderna podría ser usar CSS
variables
ycalc
.calc
es ampliamente compatible perovariables
aún no está en IE11 (polyfills disponibles).Aunque esto usa algunos cálculos, que las preguntas originales buscaban evitar. Creo que este es un buen momento para usar cálculos, ya que están controlados por el propio CSS. Tampoco tiene necesidad de marcas adicionales o de apropiación indebida de otras propiedades css que puedan necesitarse más adelante.
Esta solución solo es realmente útil si no se necesita una altura fija .
fuente
Una solución que no vi mencionada anteriormente es el caso en el que tiene relleno en su entrada, que hago el 99% del tiempo. Puedes hacer algo en la línea de ...
Lo que me gusta de esto es que tengo el menú completo de borde + relleno + propiedades de transición para cada lado.
fuente