CSS3 Border Opacity?

y a-t-il un moyen direct CSS pour rendre le bord d'un élément semi-transparent avec quelque chose comme:

border-opacity:0.7;

?

dans la négative, quelqu'un a-t-il une idée de la façon dont je pourrais le faire sans utiliser d'images?

335
demandé sur web-tiki 2010-10-31 08:48:53
la source

8 ответов

malheureusement, l'élément opacity rend l'ensemble de l'élément (y compris tout texte) semi-transparent. La meilleure façon de rendre la bordure semi-transparente est avec le format couleur rgba. Par exemple, cela donnerait une bordure rouge avec 50% d'opacité:

div {
    border: 1px solid rgba(255, 0, 0, .5);
    -webkit-background-clip: padding-box; /* for Safari */
    background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}

le problème avec cette approche est que certains navigateurs ne comprennent pas le format rgba et n'afficheront aucune bordure si c'est la déclaration entière. La solution est de fournir deux transfrontalières déclarations. La première avec un faux opacité, et la seconde avec le réel. Si un navigateur est capable, il utilisera le second, sinon, il utilisera le premier.

div {
    border: 1px solid rgb(127, 0, 0);
    border: 1px solid rgba(255, 0, 0, .5);
    -webkit-background-clip: padding-box; /* for Safari */
    background-clip: padding-box; /* for IE9+, Firefox 4+, Opera, Chrome */
}

la première déclaration de bordure sera de la même couleur qu'une bordure rouge opaque à 50% sur fond blanc (bien que les graphiques sous la bordure ne seront pas filtrés).

mise à JOUR: j'ai ajouté "background-clip: padding-box;" ce réponse (suggestion de SooDesuNe dans les commentaires) pour s'assurer que la bordure reste transparente même si une couleur de fond solide est appliquée.

522
répondu kingjeffrey 2012-06-28 23:28:45
la source

c'est facile, utilisez une ombre solide avec 0 offset:

#foo {
  border-radius: 1px;
  box-shadow: 0px 0px 0px 8px rgba(0,0,0,0.3);       
}

aussi, si vous définissez un rayon de bordure à l'élément, il vous donne de jolies frontières arrondies

jsFiddle Démo

enter image description here

123
répondu Pedro L. 2013-07-21 02:43:11
la source

comme d'autres l'ont mentionné: CSS-3 dit que vous pouvez utiliser la syntaxe rgba(...) pour spécifier une couleur de bordure avec une valeur d'opacité (alpha).

voici un exemple rapide si vous souhaitez vérifier.

  • il fonctionne dans Safari et Chrome (fonctionne probablement dans tous les navigateurs webkit).

  • Il fonctionne dans Firefox

  • je doute que cela fonctionne du tout dans IE, mais je soupçonne qu'il ya un certain filtre ou un comportement qui va le faire fonctionner.

il y a aussi ce poteau de débordement , qui suggère quelques autres questions--à savoir, que la bordure rend sur-dessus-de n'importe quelle couleur d'arrière-plan (ou image d'arrière-plan) que vous avez spécifié; limitant ainsi l'utilité de bord alpha dans de nombreux cas.

11
répondu Lee 2017-05-23 15:18:22
la source

si vous vérifiez votre codage CSS avec le validateur W3C, vous verrez si votre code CSS est acceptable, même s'il a fonctionné dans les principaux navigateurs.

Création d'une bordure transparente via CSS, comme écrit ci-dessus,

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

n'est pas accepté par les normes W3C, même pas pour CSS3. J'ai utilisé le validateur d'entrée directe avec le code CSS suivant,

.test { border: 1px solid rgba(255, 0, 0, .5); }

Les résultats ont été,

Erreur de valeur: limite trop de valeurs ou les valeurs ne sont pas reconnues : 1px solide rgba (255,0,0,0.5)

dommage que la valeur alpha (la lettre "a" à la fin de "rgb") n'est pas encore acceptée par W3C comme faisant partie des valeurs de couleur de la frontière. Je me demande pourquoi elle n'est pas normalisée, car il fonctionne dans tous les navigateurs. Le seul problème est de savoir si vous voulez vous en tenir aux normes W3C ou vous écarter pour créer quelque chose dans CSS.

à utiliser W3C en ligne validateur CSS / Direct Input .

toujours une bonne idée d'utiliser un validateur pour vérifier votre travail, il est vraiment utile de trouver des petites ou même de grandes erreurs de codage lorsque votre aller louche après des heures de travail de codage.

4
répondu Mark2012 2015-07-31 15:33:40
la source

pas autant que je sache il n'y a pas ce que je fais normalement dans ce genre de circonstances est de créer un bloc en dessous avec une plus grande taille ((bordersize*2)+originalsize) et le rendre transparent en utilisant

filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;

voici un exemple

#main{
    width:400px;
    overflow:hidden;
    position:relative;
}
.border{
    width:100%;
    position:absolute;
    height:100%;
    background-color:#F00;
    filter:alpha(opacity=50);
    -moz-opacity:0.5;
    -khtml-opacity: 0.5;
    opacity: 0.5;
}
.content{
    margin:15px;/*size of border*/
    background-color:black;
}
<div id="main">
    <div class="border">
    </div>
    <div class="content">
        testing
    </div>
</div>
4
répondu Breezer 2017-02-14 17:22:16
la source

D'autres réponses traitent de l'aspect technique de la question de l'opacité des frontières, tandis que j'aimerais présenter un hack(CSS pur et HTML seulement). Essentiellement créer une Div de conteneur, ayant une div frontière et puis la div de contenu.

<div class="container">
  <div class="border-box"></div>
  <div class="content-box"></div>
</div>

et ensuite le CSS: (réglez la limite du contenu à none, veillez à ce que l'épaisseur de la limite soit prise en compte)

.container {
  width: 20vw;
  height: 20vw;
  position: relative;
}
.border-box {
  width: 100%;
  height: 100%;
  border: 5px solid black;
  position: absolute;
  opacity: 0.5;
}
.content-box {
  width: 100%;
  height: 100%;
  border: none;
  background: green;
  top: 5px;
  left: 5px;
  position: absolute;
}
0
répondu RBk 2016-02-06 12:53:07
la source

essayez ceci:

<h2>Snippet for making borders transparent</h2>
<div>
  <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi. Nulla quis sem at nibh elementum imperdiet. Duis sagittis ipsum. Praesent mauris. Fusce nec tellus sed augue semper porta.
    Mauris massa. Vestibulum lacinia arcu eget nulla. <b>Lorem ipsum dolor sit amet, consectetur adipiscing elit</b>. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Curabitur sodales ligula in libero. Sed dignissim
    lacinia nunc. <i>Lorem ipsum dolor sit amet, consectetur adipiscing elit</i>. Curabitur tortor. Pellentesque nibh. Aenean quam. In scelerisque sem at dolor. Maecenas mattis. Sed convallis tristique sem. Proin ut ligula vel nunc egestas porttitor.
    <i>Lorem ipsum dolor sit amet, consectetur adipiscing elit</i>. Morbi lectus risus, iaculis vel, suscipit quis, luctus non, massa. Fusce ac turpis quis ligula lacinia aliquet. Mauris ipsum. Nulla metus metus, ullamcorper vel, tincidunt sed, euismod
    in, nibh. Quisque volutpat condimentum velit. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Nam nec ante. Sed lacinia, urna non tincidunt mattis, tortor neque adipiscing diam, a cursus ipsum ante quis
    turpis. Nulla facilisi. Ut fringilla. Suspendisse potenti. Nunc feugiat mi a tellus consequat imperdiet. Vestibulum sapien. Proin quam. Etiam ultrices. <b>Nam nec ante</b>. Suspendisse in justo eu magna luctus suscipit. Sed lectus. <i>Sed convallis tristique sem</i>.
    Integer euismod lacus luctus magna. <b>Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos</b>. Quisque cursus, metus vitae pharetra auctor, sem massa mattis sem, at interdum magna augue eget diam. Vestibulum
    ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Morbi lacinia molestie dui. Praesent blandit dolor. Sed non quam. In vel mi sit amet augue congue elementum. Morbi in ipsum sit amet pede facilisis laoreet. Donec lacus nunc,
    viverra nec, blandit vel, egestas et, augue. Vestibulum tincidunt malesuada tellus. Ut ultrices ultrices enim. <b>Suspendisse in justo eu magna luctus suscipit</b>. Curabitur sit amet mauris. Morbi in dui quis est pulvinar ullamcorper. </p>
</div>
<div id="transparentBorder">
  This &lt;div&gt; has transparent borders.
</div>

et voici notre CSS magique..

* {
  padding: 10pt;
  font: 13px/1.5 Helvetica Neue, Arial, Helvetica, 'Liberation Sans', FreeSans, sans-serif;
}

b {
  font-weight: bold;
}

i {
  font-style: oblique;
}

H2 {
  font-size: 2em;
}

div[id='transparentBorder'] {
  height: 100px;
  width: 200px;
  padding: 10px;
  position: absolute;
  top: 40%;
  left: 30%;
  text-align: center;
  background: Black;
  border-radius: 4px;
  border: 10pt solid rgba(0, 0, 0, 0.5);
  -moz-background-clip: border;
  /* Firefox 3.6 */
  -webkit-background-clip: border;
  /* Safari 4? Chrome 6? */
  background-clip: border-box;
  /* Firefox 4, Safari 5, Opera 10, IE 9 */
  -moz-background-clip: padding;
  /* Firefox 3.6 */
  -webkit-background-clip: padding;
  /* Safari 4? Chrome 6? */
  background-clip: padding-box;
  /* Firefox 4, Safari 5, Opera 10, IE 9 */
  text-align: center;
  margin: 0;
  color: #fff;
  cursor: pointer;
}

découvrez les Démo ici.

0
répondu A Malik 2016-02-06 13:10:48
la source

comme solution de rechange que peut travailler dans certains cas: changer le border-style en dotted .

ayant une alternance de groupes de pixels entre la couleur du premier plan et la couleur de fond n'est pas la même chose qu'une ligne continue de pixels partiellement transparents. D'un autre côté, cela nécessite beaucoup moins de CSS et il est beaucoup plus compatible à travers chaque navigateur sans aucune directive spécifique au navigateur.

0
répondu Stephan Samuel 2018-02-14 02:47:38
la source

Autres questions sur css css3 opacity