Подтвердить что ты не робот

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

Я пытаюсь сделать что-то подобное для клиента, у которого есть блог.

http://i.stack.imgur.com/4h31s.png

Она хотела полупрозрачную рамку. Я знаю, что это возможно, сделав его просто фоном. Но я не могу найти логику/код, лежащий в основе такого метода CSS для баннеров. Кто-нибудь знает, как это сделать? Это было бы очень полезно, потому что мой клиент хотел добиться своего блога....

4b9b3361

Ответ 1

Хорошо, если вы хотите полностью прозрачно, чем использовать

border: 5px solid transparent;

Если вы имеете в виду непрозрачный/прозрачный, чем вы можете использовать

border: 5px solid rgba(255, 255, 255, .5);

Здесь a означает альфу, которую вы можете масштабировать, 0-1.

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

Для старых браузеров всегда объявляйте цвет фона, используя # (hex), как раз как назад, так что, если старые браузеры не распознают rgba, они будут применять цвет hex к вашему элементу.

Демо

Демо 2 (с фоновым изображением для вложенного div)

Демо 3 (с тегом img вместо background-image)

body {
    background: url(http://www.desktopas.com/files/2013/06/Images-1920x1200.jpg);   
}

div.wrap {
    border: 5px solid #fff; /* Fall back, not used in fiddle */
    border: 5px solid rgba(255, 255, 255, .5);
    height: 400px;
    width: 400px;
    margin: 50px;
    border-radius: 50%;
}

div.inner {
    background: #fff; /* Fall back, not used in fiddle */
    background: rgba(255, 255, 255, .5);
    height: 380px;
    width: 380px;
    border-radius: 50%; 
    margin: auto; /* Horizontal Center */
    margin-top: 10px; /* Vertical Center ... Yea I know, that 
                         manually calculated*/
}

Примечание (для демонстрации 3): Изображение будет масштабироваться в соответствии с высотой и шириной, поэтому убедитесь, что он не нарушает коэффициент масштабирования.

Ответ 2

Вы также можете использовать border-style: double с background-clip: padding-box, без использования каких-либо дополнительных (псевдо) элементов. Это, вероятно, самое компактное решение, но не так гибкое, как другие.

Например:

<div class="circle">Some text goes here...</div>

.circle{
    width: 100px;
    height: 100px;
    padding: 50px;
    border-radius: 200px;
    border: double 15px rgba(255,255,255,0.7);
    background: rgba(255,255,255,0.7);
    background-clip: padding-box;
}

Result

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

Ответ 3

Использование псевдоэлемента :before,
CSS3 border-radius,
и некоторая прозрачность довольно проста:

LIVE DEMO

enter image description here

<div class="circle"></div>

CSS

.circle, .circle:before{
  position:absolute;
  border-radius:150px;  
}
.circle{  
  width:200px;
  height:200px;
  z-index:0;
  margin:11%;
  padding:40px;
  background: hsla(0, 100%, 100%, 0.6);   
}
.circle:before{
  content:'';
  display:block;
  z-index:-1;  
  width:200px;
  height:200px;

  padding:44px;
  border: 6px solid hsla(0, 100%, 100%, 0.6);
  /* 4px more padding + 6px border = 10 so... */  
  top:-10px;
  left:-10px; 
}

:before присоединяется к нашему .circle другому элементу, который вам нужно сделать только (ok, block, absolute и т.д.) прозрачным и играть с непрозрачностью границы.

Ответ 4

используйте rgba (rgb с alpha transparency):

border: 10px solid rgba(0,0,0,0.5); // 0.5 means 50% of opacity

Диаграмма alpha transparency между 0 (0% непрозрачность = 100% прозрачная) и 1 (100 непрозрачность = 0% прозрачная)