Existe-t-il un moyen CSS simple de rendre la bordure d'un élément semi-transparente avec quelque chose comme ça?
border-opacity: 0.7;
Sinon, quelqu'un a-t-il une idée de comment je pourrais le faire sans utiliser d'images?
Malheureusement, l' opacity
élément rend l'élément entier (y compris tout texte) semi-transparent. La meilleure façon de rendre la bordure semi-transparente est le format de couleur rgba. Par exemple, cela donnerait une bordure rouge avec une opacité de 50%:
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 rgba
format et n'afficheront aucune bordure s'il s'agit de la déclaration entière. La solution consiste à fournir deux déclarations frontalières. Le premier avec une fausse opacité, et le second 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 couleur équivalente à une bordure rouge opaque à 50% sur un fond blanc (bien que les graphiques sous la bordure ne traverseront pas).
MISE À JOUR: J'ai ajouté "background-clip: padding-box;" à cette réponse (selon la suggestion de SooDesuNe dans les commentaires) pour garantir que la bordure reste transparente même si une couleur d'arrière-plan solide est appliquée.
border-radius
, alors ils obtiennent des coins arrondis. Sinon, ils ne le font pas. Le contenu est toujours accessible, il a toujours l'air bien, il semble juste mieux s'il utilise un navigateur compatible. Je n'ai jamais vu un client s'en plaindre au cours des 1,5 dernières années de fonctionnement de cette manière sur chaque projet.background-clip:padding-box;
également le définir .C'est simple, utilisez une ombre pleine avec un décalage de 0:
De plus, si vous définissez un rayon de bordure sur l'élément, cela vous donne des bordures assez arrondies
jsFiddle Demo
la source
box-shadow
n'a pas de taille et peut casser votre mise en page, ce qui vous rend les marges inégales! jsfiddle.net/bj81hew7/2Comme d'autres l'ont mentionné: CSS-3 dit que vous pouvez utiliser la
rgba(...)
syntaxe pour spécifier une couleur de bordure avec une valeur d'opacité (alpha).voici un exemple rapide si vous souhaitez le vérifier.
Il fonctionne dans Safari et Chrome (fonctionne probablement dans tous les navigateurs webkit).
Cela fonctionne dans Firefox
Je doute que cela fonctionne du tout dans IE, mais je soupçonne qu'il existe un filtre ou un comportement qui le fera fonctionner.
Il y a aussi ce post stackoverflow , qui suggère d'autres problèmes - à savoir que la bordure s'affiche au-dessus de toute couleur d'arrière-plan (ou image d'arrière-plan) que vous avez spécifiée; limitant ainsi l'utilité de la bordure alpha dans de nombreux cas.
la source
background-clip: padding-box;
(et jusqu'à ce que cela soit pris en charge, vous pouvez utiliser les extensions de fournisseur -webkit et -moz).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éer une bordure transparente via CSS, comme écrit ci-dessus,
n'est pas accepté par les normes du W3C, pas même pour CSS3. J'ai utilisé le validateur d'entrée directe avec le code CSS suivant,
Les résultats ont été,
Malheureusement, la valeur alpha (la lettre "a" à la fin de "rgb") n'est pas encore acceptée par le W3C comme partie des valeurs de couleur de bordure. Je me demande pourquoi il n'est pas standardisé, 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 en éloigner pour créer quelque chose en CSS.
Pour utiliser le validateur CSS en ligne W3C / Saisie directe .
Toujours une bonne idée d'utiliser un validateur pour vérifier votre travail, cela aide vraiment à trouver de petites ou même de grosses erreurs de codage lorsque vous vous croisez après des heures de travail de codage.
la source
* Pas pour autant que je sache qu'il n'y a pas ce que je fais normalement dans ce genre de circonstances: créer un bloc en dessous avec une plus grande taille ((borderize * 2) + originalsize) et le rendre transparent en utilisant
Voici un exemple
Mise à jour:
Cette réponse est dépassée, car après tout, cette question a plus de 8 ans. Aujourd'hui, tous les navigateurs à jour prennent en charge rgba, box shadows, etc. Mais c'est un bon exemple de la façon dont il y a 8 ans et plus.
la source
rgba(...)
dans les couleurs de bordure. vous pouvez l'essayer ici .Comme solution alternative qui peut fonctionner dans certains cas: changez
border-style
endotted
.Le fait d'avoir des groupes de pixels alternés entre la couleur de premier plan et la couleur d'arrière-plan 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 avec tous les navigateurs sans directives spécifiques au navigateur.
la source
D'autres réponses traitent de l'aspect technique du problème d'opacité de la frontière, alors que je voudrais présenter un hack (CSS et HTML pur uniquement). Fondamentalement, créez un div de conteneur, ayant un div de bordure, puis le div de contenu.
Et puis le CSS: (définissez la bordure de contenu sur aucun, veillez à positionner de telle sorte que l'épaisseur de la bordure soit prise en compte)
la source
Non, il n'y a aucun moyen de définir uniquement l'opacité d'une bordure avec CSS.
Par exemple, si vous ne connaissiez pas la couleur , il n'y a aucun moyen de modifier uniquement l'opacité de la bordure en utilisant simplement
rgba()
.la source
essaye ça:
Et voici notre CSS magique ..
Découvrez la démo ici.
la source