2010-03-24 4 views
72

У меня есть li стиль следующим образом:Как сделать прозрачную границу с CSS?

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

Когда я парить над li граница появляется без Сдвинуть li «s вокруг. Возможно ли иметь «границу», которая не видна?

ответ

82

Вы можете использовать «прозрачный» как цвет. В некоторых версиях IE это черное, но я не тестировал его с IE6 дней.

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

+3

Ну, это сработало на ie8, Mozilla, Opera и Chrome, достаточно для меня, я не пробовал его в Safari, но я не против сафари. большое спасибо! –

+4

Да, это особенно IE6, что это не работает. IE7 в порядке. – bobince

+0

спасибо большое, это отлично поработало для меня –

29

Вы можете удалить границу и увеличить отступы:

li{ 
 
     display:inline-block; 
 
     padding:6px; 
 
     border-width:0px; 
 
    } 
 
    li:hover{ 
 
     border:1px solid #FC0; 
 
     padding:5px; 
 
    }
<ul> 
 
    <li>Hovering is great</li> 
 
</ul>

+0

Ну, это сработало как шарм, я просто подумал, есть ли более чистый способ, как это сделать? если вообще возможно иметь невидимую границу? Еще раз спасибо за предложение. –

+3

Это звучит как более совместимое решение для меня – NibblyPig

+0

Просто понял, что код работает так, как вам нужно! Исправлена. Кроме того, я бы пошел с прозрачным цветом. Я просто не знал об этом: D –

3

Да, вы можете использовать border: 1px solid transparent

Другим решением является использование outline по наведению (и установите границу 0), которая не не влияют на поток документа:

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

NB. Вы можете установить контур только как свойство sharthand, а не для отдельных сторон. Он предназначен только для отладки, но он работает хорошо.

+0

Спасибо большое! чем больше вариантов у меня есть, тем лучше –

3

Поскольку вы сказали в комментарии, что чем больше вариантов у вас есть, тем лучше, вот еще один.

В CSS3 есть две разные так называемые «бокс-модели». Один добавляет границу и дополнение к ширине элемента блока, а другой - нет. Вы можете использовать последние, указав

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

Тогда в современных браузерах элемент всегда будет иметь одинаковую ширину. I.e., если вы примените к нему границу при наведении, ширина границы не будет добавляться к общей ширине элемента; граница будет добавлена ​​«внутри» элемента, так сказать. Однако, если я правильно помню, вы должны явно указать width, чтобы это работало. Вероятно, это не вариант для вас в этом конкретном случае, но вы можете учесть его в будущих ситуациях.

+0

Это может быть один прецедент для прозрачной границы - вместо применения границы при наведении, измените свой цвет с прозрачного на то, что вы можете видеть. – DaveWalley

2

This blog entry имеет способ подражать border-color: transparent в IE6. Ниже пример включает в себя исправление «hasLayout», который воспитывается в комментариях записи в блоге:

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

Убедитесь, что border-color используется в затруднительном IE6 не используется нигде в .testDiv элементе. Я изменил пример с pink на #FEFEFE, потому что это кажется еще менее вероятным.

10

эй это лучшее решение, которое я когда-либо испытывал .. это CSS3

использовать следующее свойство для вашего DIV или где вы хотите положить границы прозрачного

например

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

это будет работать ..

27

Многие из вас должны приземляться здесь, чтобы найти решение для непрозрачной границы вместо прозрачной. В этом случае вы можете использовать rgba, где a означает alpha.

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

Demo

Здесь вы можете изменить opacity в border от 0-1


Если вы просто хотите полную прозрачную границу, то лучше всего использовать это transparent, как border: 1px solid transparent;

+0

И вы можете использовать этот инструмент для преобразования из шестнадцатеричного в цвет rgba ... http://www.hexcolortool.com ... где вы можете дополнительно указать гексаговый цвет в URL-адресе, например ... http : //www.hexcolortool.com/#ffcc00 – clayRay

0

Простейшим решением для этого является t o использовать rgba как цвет: border-color: rgba(0,0,0,0); Это полностью прозрачный цвет границы.

Смежные вопросы