Como faço uma borda transparente com CSS?

101

Eu tenho o liseguinte estilo:

li{
    display:inline-block;
    padding:5px;
    border:1px solid none;
}
li:hover{
    border:1px solid #FC0;
}

Quando eu passo o mouse sobre a liborda, aparece sem fazer o lideslocamento do. É possível ter uma 'borda' que não é visível?

William Calleja
fonte

Respostas:

107

Você pode usar "transparente" como cor. Em algumas versões do IE, isso aparece em preto, mas não testei desde os dias do IE6.

http://www.researchkitchen.de/blog/archives/css-bordercolor-transparent.php

Douglas
fonte
3
Bem, funcionou no IE8, Mozilla, Opera e Chrome, bom o suficiente para mim, não experimentei no Safari, mas não me importo muito com o safari. Muito obrigado!
William Calleja
5
Sim, é especificamente no IE6 que isso não funciona. O IE7 está OK.
bobince
Isso não funcionou para mim, infelizmente. Acabei usando pseudo após elementos feitos inteiramente fora de fronteiras ... que bagunça!
Alex
51

Muitos de vocês devem estar chegando aqui para encontrar uma solução para bordas opacas em vez de transparentes. Nesse caso, você pode usar rgba, onde asignifica alpha.

.your_class {
    height: 100px;
    width: 100px;
    margin: 100px;
    border: 10px solid rgba(255,255,255,.5);
}

Demo

Aqui, você pode mudar o opacitydo borderde0-1


Se você simplesmente quer uma borda transparente completa, a melhor coisa a usar é transparent, comoborder: 1px solid transparent;

Sr. estrangeiro
fonte
E você pode usar esta ferramenta para converter de hexadecimal para rgba ... hexcolortool.com ... onde você pode opcionalmente especificar a cor hexadecimal no URL, assim ... hexcolortool.com/#ffcc00
clayRay
32

Você pode remover a borda e aumentar o preenchimento:

li {
  display: inline-block;
  padding: 6px;
  border-width: 0px;
}

li:hover {
  border: 1px solid #FC0;
  padding: 5px;
}
<ul>
  <li>Hovering is great</li>
</ul>

Matt Ellen
fonte
Bem, isso funcionou como um encanto, eu só me perguntei se havia uma maneira mais limpa de como fazer isso? se fosse possível ter uma borda invisível? Obrigado novamente pela sugestão.
William Calleja
3
Parece uma solução mais compatível para mim
NibblyPig
Acabei de perceber que o código funciona oposto ao que você precisa! Fixo. Além disso, eu escolheria a cor transparente. Eu simplesmente não sabia sobre isso: D
Matt Ellen
Diminuir a borda e aumentar o preenchimento não tem utilidade se você quiser, por exemplo (meu caso), uma <a/>caixa totalmente clicável . A borda pertence ao elemento (portanto, clicável), enquanto o preenchimento pertence ao pai.
Nico
13

ei, esta é a melhor solução que já experimentei .. este é CSS3

use a seguinte propriedade para seu div ou em qualquer lugar que você queira colocar fronteira transparente

por exemplo

div_class { 
 border: 10px solid #999;
 background-clip: padding-box; /* Firefox 4+, Opera, for IE9+, Chrome */
}

isso vai funcionar ..

Raau
fonte
4

Sim, você pode usar border: 1px solid transparent

Outra solução é usar outlineao passar o mouse (e definir a borda como 0), o que não afeta o fluxo do documento:

li{
    display:inline-block;
    padding:5px;
    border:0;
}
li:hover{
    outline:1px solid #FC0;
}

NB. Você só pode definir o contorno como uma propriedade sharthand, não para lados individuais. Ele deve ser usado apenas para depuração, mas funciona bem.

DisgruntledGoat
fonte
Muito obrigado! quanto mais opções eu tiver, melhor
William Calleja
3

Já que você disse em um comentário que quanto mais opções você tiver, melhor, aqui está outra.

No CSS3, existem dois chamados "modelos de caixa" diferentes. Um adiciona a borda e o preenchimento à largura de um elemento de bloco, enquanto o outro não. Você pode usar o último especificando

-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;

Então, nos navegadores modernos, o elemento sempre terá a mesma largura. Ou seja, se você aplicar uma borda a ele ao pairar, a largura da borda não será adicionada à largura geral do elemento; a borda será adicionada "dentro" do elemento, por assim dizer. No entanto, se bem me lembro, você deve especificar widthexplicitamente para que isso funcione. O que provavelmente não é uma opção para você neste caso em particular, mas você pode manter isso em mente para situações futuras.

ЯegDwight
fonte
Este pode ser um caso de uso para uma borda transparente - em vez de aplicar uma borda ao passar o mouse, mude sua cor de transparente para algo que você possa ver.
DaveWalley
2

Esta entrada de blog pode ser emulada border-color: transparentno IE6. O exemplo a seguir inclui a correção "hasLayout" que é apresentada nos comentários de entrada do blog:

/* transparent border */
.testDiv {
    width: 200px;
    height: 200px;
    border: solid 10px transparent;
}
/* IE6 fix */
*html .testDiv {
    zoom: 1;
    border-color: #FEFEFE;
    filter: chroma(color=#FEFEFE);
}

Certifique-se de que o border-colorusado na correção do IE6 não seja usado em nenhum lugar do .testDivelemento. Mudei o exemplo de pinkpara #FEFEFEporque parece ainda menos provável de ser usado.

Sonny
fonte
0

A solução mais fácil para isso é usar rgbacomo a cor: border-color: rgba(0,0,0,0);Essa é uma cor de borda totalmente transparente.

Jake Wilson
fonte
0

Use propriedade transparente

border-color : transparent;
Prabesh Guragain
fonte