O cliente deseja bordas de duas cores para uma aparência em relevo. Posso fazer isso em um elemento? Eu esperava evitar empilhar dois elementos DOM com bordas individuais.
Sim: Use a outlinepropriedade; ele atua como uma segunda fronteira fora de sua fronteira. Cuidado, embora ele possa interagir de maneira instável com margens, preenchimentos e sombras projetadas. Em alguns navegadores, pode ser necessário usar um prefixo específico do navegador também; para ter certeza de que ele pega nele: -webkit-outlinee assim por diante (embora o WebKit em particular não exija isso).
Isso também pode ser útil no caso em que você deseja descartar o contorno de certos navegadores (como é o caso se você deseja combinar o contorno com uma sombra projetada; no WebKit o contorno está dentro da sombra; no FireFox é fora, então -moz-outline: 0é útil para garantir que você não obtenha uma linha nodosa ao redor de sua bela sombra CSS).
Edit: Algumas pessoas observaram que outlinenão funciona bem com o IE <8. Embora isso seja verdade; apoiar o IE <8 realmente não é algo que você deveria fazer.
-1 para "suportar o IE <8 realmente não é algo que você deveria fazer". Não suportar o IE6 pode ser bom. Mas não suportar o IE7 é ridículo, nenhum site com um público não técnico pode pagar por isso
Pekka,
6
outlineexiste desde o CSS2.
BoltClock
156
+1 por não oferecer suporte ao IE 7, embora seu site deva sempre funcionar e ter uma aparência razoavelmente boa no IE 7, o suporte completo não é necessário. especialmente se for apenas uma borda de duas cores. Eu pessoalmente estou usando box-shadow e outros recursos 'avançados'. O IE7 não consegue ver uma sombra de caixa, ... grande coisa. não há razão para usar uma solução menos adequada, excessivamente complicada ou mesmo desatualizada, apenas para contornar as peculiaridades do IE7.
Marian Theisen
2
Além disso, consulte esta referência para boas razões de acessibilidade para NÃO hackear a propriedade de contorno para fins de design: outlinenone.com
Joel Glovier
11
Uma palavra de cautela, outlineé menos versátil do que border. Em particular, W3C diz : "Nota. O contorno é o mesmo em todos os lados. Em contraste com as bordas, não há nenhuma propriedade 'contorno superior' ou 'contorno esquerdo' ." (Ênfase minha)
Bob Stein
68
Isso é muito possível. É necessário apenas alguns truques de CSS!
Na verdade, é complicado, mas se degrada graciosamente e até funciona no navegador padrão do meu HTC (Android)! Se você usar border-radius, tente reduzir o raio da borda interna em um pixel, isso tornará a lacuna entre as duas bordas arredondadas quase imperceptível.
gripe de
Isso é legal. Usar em bottom:1pxvez de height:100%funcionar melhor para mim apenas para uma borda inferior :)
Nick
se você tiver um preenchimento para o div.border, descobri que adicionar uma margem negativa com as mesmas dimensões para o div.border:beforeajuda a manter tudo alinhado. Talvez haja uma maneira melhor de fazer isso? jsFiddle
NW Tech
+1 para usar pseudo-elementos. Acho que esta resposta é melhor do que a de Williham Totland
Eu prefiro isso porque funciona com raio de borda ao contrário do método de contorno
Johan
18
Você experimentou os diferentes estilos de borda disponíveis nas especificações CSS? Já existem dois estilos de borda que podem atender às suas necessidades:
Funciona bem, mas apenas se você tiver conteúdo com fundo.
Culme
4
Se por "relevo" você quer dizer duas bordas em torno uma da outra com duas cores diferentes, existe a outlinepropriedade ( outline-left, outline-right....), mas é mal suportada na família IE (ou seja, IE6 e 7 não suportam de todo ) Se você precisar de duas bordas, um segundo elemento de invólucro seria de fato melhor.
Se você quer dizer usar duas cores na mesma borda. Use por exemplo
border-right:1px white solid;
border-left:1px black solid;
border-top:1px black solid;
border-bottom:1px white solid;
existem especial border-stylespara isso também ( ridge, outsete inset), mas eles tendem a variar entre os navegadores na minha experiência.
Eu acredito que o que ele está pedindo é algo como o border : black white; que significa definir duas cores diferentes para uma borda que parece sequencialmente ao mesmo tempo.
Tarik,
1
@Braveyard ah, entendo. Isso seria teoricamente possível usando, outlinemas não funcionará bem no IE <8
Pekka,
3
Observe que há apenas contorno ... não existe contorno-esquerdo, contorno-direita, contorno-superior ou contorno-fundo, infelizmente.
David Sherret
-1
Não é possível, mas você deve verificar se border-stylevalores como inset, outsetou algum outro, alcançaram o efeito que você deseja .. ( eu duvido .. )
Respostas:
Sim: Use a
outline
propriedade; ele atua como uma segunda fronteira fora de sua fronteira. Cuidado, embora ele possa interagir de maneira instável com margens, preenchimentos e sombras projetadas. Em alguns navegadores, pode ser necessário usar um prefixo específico do navegador também; para ter certeza de que ele pega nele:-webkit-outline
e assim por diante (embora o WebKit em particular não exija isso).Isso também pode ser útil no caso em que você deseja descartar o contorno de certos navegadores (como é o caso se você deseja combinar o contorno com uma sombra projetada; no WebKit o contorno está dentro da sombra; no FireFox é fora, então
-moz-outline: 0
é útil para garantir que você não obtenha uma linha nodosa ao redor de sua bela sombra CSS).Edit: Algumas pessoas observaram que
outline
não funciona bem com o IE <8. Embora isso seja verdade; apoiar o IE <8 realmente não é algo que você deveria fazer.fonte
outline
existe desde o CSS2.outline
é menos versátil do queborder
. Em particular, W3C diz : "Nota. O contorno é o mesmo em todos os lados. Em contraste com as bordas, não há nenhuma propriedade 'contorno superior' ou 'contorno esquerdo' ." (Ênfase minha)Isso é muito possível. É necessário apenas alguns truques de CSS!
É isso que você está procurando?
fonte
border-radius
, tente reduzir o raio da borda interna em um pixel, isso tornará a lacuna entre as duas bordas arredondadas quase imperceptível.bottom:1px
vez deheight:100%
funcionar melhor para mim apenas para uma borda inferior :)div.border
, descobri que adicionar uma margem negativa com as mesmas dimensões para odiv.border:before
ajuda a manter tudo alinhado. Talvez haja uma maneira melhor de fazer isso? jsFiddleOutra maneira é usar
box-shadow
:Veja o exemplo aqui.
fonte
Você experimentou os diferentes estilos de borda disponíveis nas especificações CSS? Já existem dois estilos de borda que podem atender às suas necessidades:
Ou
fonte
Contorno é bom, mas apenas quando você quer a borda ao redor.
Digamos que se você quiser fazer apenas na parte inferior ou superior, você pode usar
E para baixo:
Espero que isso ajude.
fonte
Em vez de usar contornos sem suporte e problemáticos, use
Exemplo:
HTML:
CSS:
TESTE (JSFiddle) :
Exibir trecho de código
fonte
Se por "relevo" você quer dizer duas bordas em torno uma da outra com duas cores diferentes, existe a
outline
propriedade (outline-left
,outline-right
....), mas é mal suportada na família IE (ou seja, IE6 e 7 não suportam de todo ) Se você precisar de duas bordas, um segundo elemento de invólucro seria de fato melhor.Se você quer dizer usar duas cores na mesma borda. Use por exemplo
existem especial
border-styles
para isso também (ridge
,outset
einset
), mas eles tendem a variar entre os navegadores na minha experiência.fonte
border : black white;
que significa definir duas cores diferentes para uma borda que parece sequencialmente ao mesmo tempo.outline
mas não funcionará bem no IE <8Não é possível, mas você deve verificar se
border-style
valores comoinset
,outset
ou algum outro, alcançaram o efeito que você deseja .. ( eu duvido .. )CSS3 tem propriedades de imagem de borda , mas eu não sei sobre o suporte de navegadores ainda (mais informações em http://www.css3.info/preview/border-image/ ) ..
fonte
Simplesmente escreva
style="border:medium double;"
para a tag html
fonte
Você poderia usar
fonte
Isso produz um bom efeito.
fonte