El cliente quiere bordes de dos colores para una apariencia en relieve. ¿Puedo hacer esto en un elemento? Esperaba evitar apilar dos elementos DOM con bordes individuales.
Sí: use la outlinepropiedad; actúa como una segunda frontera fuera de su frontera. Tenga cuidado, aunque puede interactuar de forma irregular con márgenes, rellenos y sombras. En algunos navegadores, es posible que también deba utilizar un prefijo específico del navegador; para asegurarse de que lo capta: -webkit-outliney similares (aunque WebKit en particular no lo requiere).
Esto también puede ser útil en el caso en el que desee descartar el contorno para ciertos navegadores (como es el caso si desea combinar el contorno con una sombra; en WebKit el contorno está dentro de la sombra; en FireFox es afuera, por lo que -moz-outline: 0es útil para asegurarse de que no obtenga una línea retorcida alrededor de su hermosa sombra de CSS).
Editar: Algunas personas han comentado que outlineno funciona bien con IE <8. Si bien esto es cierto; admitir IE <8 realmente no es algo que deba estar haciendo.
-1 para "admitir IE <8 realmente no es algo que debas estar haciendo". No admitir IE6 puede estar bien. Pero no admitir IE7 es ridículo, ningún sitio con una audiencia no técnica puede permitirse esto
Pekka
6
outlineha existido desde CSS2.
BoltClock
156
+1 por no ser compatible con IE 7, aunque su sitio siempre debería funcionar y verse razonablemente bien en IE 7, no es necesario un soporte completo. especialmente si es solo un borde de dos colores. Personalmente estoy usando box-shadow y otras funciones "avanzadas". IE7 no puede ver una sombra de caja, ... gran cosa. no hay razón para usar una solución menos adecuada, demasiado complicada o incluso obsoleta, solo para evitar las peculiaridades de IE7.
Marian Theisen
2
Además, consulte esta referencia para obtener buenas razones de accesibilidad para NO piratear la propiedad de contorno con fines de diseño: outlinenone.com
Joel Glovier
11
Una advertencia, outlinees menos versátil que border. En particular, el W3C dice : "Nota. El contorno es el mismo en todos los lados. A diferencia de los bordes, no existe la propiedad 'outline-top' o 'outline-left' ". (El énfasis es mío.)
Bob Stein
68
Esto es muy posible. ¡Solo se necesita un pequeño truco CSS!
De hecho, es complicado, pero se degrada con gracia e incluso funciona en el navegador estándar de mi HTC (Android). Si lo usa border-radius, intente reducir el radio del borde interior en un píxel, eso hará que el espacio entre los dos bordes redondeados sea casi imperceptible.
gripe
Esto es bonito. Usar en bottom:1pxlugar de height:100%funcionó mejor para mí solo para un borde inferior :)
Nick
Si tiene un relleno para el div.border, descubrí que agregar un margen negativo con las mismas dimensiones para el div.border:before, ayudó a mantener todo en línea. ¿Quizás haya una mejor manera de hacerlo? jsFiddle
NW Tech
+1 por usar pseudoelementos. Creo que esta respuesta es mejor que la de Williham Totland
Prefiero esto porque funciona con border-radius a diferencia del método de contorno
Johan
18
¿Ha probado los diferentes estilos de borde disponibles dentro de la especificación CSS? Ya existen dos estilos de borde que pueden adaptarse a sus necesidades:
Funciona bien, pero solo si tiene contenido con antecedentes.
Culme
4
Si por "relieve" te refieres a dos bordes uno alrededor del otro con dos colores diferentes, existe la outlinepropiedad ( outline-left, outline-right....) pero no es compatible con la familia IE (es decir, IE6 y 7 no lo admiten en absoluto ). Si necesita dos bordes, un segundo elemento de envoltura sería lo mejor.
Si te refieres a usar dos colores en el mismo borde. Utilice por ejemplo
border-right:1px white solid;
border-left:1px black solid;
border-top:1px black solid;
border-bottom:1px white solid;
también hay especiales border-stylespara esto ( ridge, outsety inset) pero, en mi experiencia, tienden a variar según el navegador.
Creo que lo que está preguntando es algo así como border : black white; definir dos colores diferentes para un borde que se ve secuencialmente al mismo tiempo.
Tarik
1
@Braveyard ah, ya veo. Eso sería teóricamente posible usarlo, outlinepero no funcionará bien en IE <8
Pekka
3
Tenga en cuenta que solo hay contorno ... desafortunadamente, no existe contorno-izquierdo, contorno-derecho, contorno-superior o contorno-inferior.
David Sherret
-1
No es posible, pero debe verificar si border-stylevalores como inset, outseto algún otro, lograron el efecto que desea ... ( aunque lo dudo ... )
Respuestas:
Sí: use la
outline
propiedad; actúa como una segunda frontera fuera de su frontera. Tenga cuidado, aunque puede interactuar de forma irregular con márgenes, rellenos y sombras. En algunos navegadores, es posible que también deba utilizar un prefijo específico del navegador; para asegurarse de que lo capta:-webkit-outline
y similares (aunque WebKit en particular no lo requiere).Esto también puede ser útil en el caso en el que desee descartar el contorno para ciertos navegadores (como es el caso si desea combinar el contorno con una sombra; en WebKit el contorno está dentro de la sombra; en FireFox es afuera, por lo que
-moz-outline: 0
es útil para asegurarse de que no obtenga una línea retorcida alrededor de su hermosa sombra de CSS).Editar: Algunas personas han comentado que
outline
no funciona bien con IE <8. Si bien esto es cierto; admitir IE <8 realmente no es algo que deba estar haciendo.fuente
outline
ha existido desde CSS2.outline
es menos versátil queborder
. En particular, el W3C dice : "Nota. El contorno es el mismo en todos los lados. A diferencia de los bordes, no existe la propiedad 'outline-top' o 'outline-left' ". (El énfasis es mío.)Esto es muy posible. ¡Solo se necesita un pequeño truco CSS!
¿Es esto lo que estás buscando?
fuente
border-radius
, intente reducir el radio del borde interior en un píxel, eso hará que el espacio entre los dos bordes redondeados sea casi imperceptible.bottom:1px
lugar deheight:100%
funcionó mejor para mí solo para un borde inferior :)div.border
, descubrí que agregar un margen negativo con las mismas dimensiones para eldiv.border:before
, ayudó a mantener todo en línea. ¿Quizás haya una mejor manera de hacerlo? jsFiddleOtra forma es usar
box-shadow
:Vea el ejemplo aquí.
fuente
¿Ha probado los diferentes estilos de borde disponibles dentro de la especificación CSS? Ya existen dos estilos de borde que pueden adaptarse a sus necesidades:
O
fuente
El contorno es bueno, pero solo cuando desea el borde alrededor.
Digamos que si desea hacerlo solo en la parte inferior o superior, puede usar
Y para el fondo:
Espero que esto ayude.
fuente
En lugar de utilizar un esquema problemático y no compatible, utilice
Ejemplo:
HTML:
CSS:
PRUEBA (JSFiddle) :
Mostrar fragmento de código
fuente
Si por "relieve" te refieres a dos bordes uno alrededor del otro con dos colores diferentes, existe la
outline
propiedad (outline-left
,outline-right
....) pero no es compatible con la familia IE (es decir, IE6 y 7 no lo admiten en absoluto ). Si necesita dos bordes, un segundo elemento de envoltura sería lo mejor.Si te refieres a usar dos colores en el mismo borde. Utilice por ejemplo
también hay especiales
border-styles
para esto (ridge
,outset
yinset
) pero, en mi experiencia, tienden a variar según el navegador.fuente
border : black white;
definir dos colores diferentes para un borde que se ve secuencialmente al mismo tiempo.outline
pero no funcionará bien en IE <8No es posible, pero debe verificar si
border-style
valores comoinset
,outset
o algún otro, lograron el efecto que desea ... ( aunque lo dudo ... )CSS3 tiene las propiedades de imagen de borde , pero aún no conozco el soporte de los navegadores (más información en http://www.css3.info/preview/border-image/ ).
fuente
Simplemente escribe
style="border:medium double;"
para la etiqueta html
fuente
Podrías usar
fuente
Esto produce un efecto agradable.
fuente