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?

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


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;


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>


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 ..


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.


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.


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.


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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.