Border ne prend pas en charge le pourcentage... mais c'est toujours possible...
Comme d'autres l'ont souligné Spécification CSS Les pourcentages ne sont pas supportés par les frontières :
'border-top-width',
'border-right-width',
'border-bottom-width',
'border-left-width'
Value: <border-width> | inherit
Initial: medium
Applies to: all elements
Inherited: no
Percentages: N/A
Media: visual
Computed value: absolute length; '0' if the border style is 'none' or 'hidden'
Comme vous pouvez voir il dit Pourcentages : N/A .
Solution non scénarisée
Vous pouvez simuler vos bordures en pourcentage à l'aide d'un élément enveloppant où vous le feriez :
- Définir les paramètres de l'élément d'habillage
background-color
à la couleur de bordure souhaitée
- Définir les paramètres de l'élément d'habillage
padding
en pourcentages (parce qu'ils sont soutenus)
- définissez vos éléments
background-color
en blanc (ou ce qui doit l'être)
Cela simulerait en quelque sorte votre pourcentage de frontières. Voici un exemple d'un élément avec un côté de 25% de largeur frontières qui utilise cette technique.
HTML utilisé dans l'exemple
.faux-borders {
background-color: #f00;
padding: 1px 25%; /* set padding to simulate border */
}
.content {
background-color: #fff;
}
<div class="faux-borders">
<div class="content">
This is the element to have percentage borders.
</div>
</div>
Question : Vous devez être conscient que cela sera beaucoup plus compliqué si un arrière-plan complexe est appliqué à votre élément... Surtout si cet arrière-plan est hérité de la hiérarchie DOM ancestrale. Mais si votre interface utilisateur est assez simple, vous pouvez le faire de cette façon.
Solution scénarisée
@BoltClock a mentionné une solution scriptée. où vous pouvez calculer par programme la largeur de la bordure en fonction de la taille de l'élément.
En voici un exemple avec un script extrêmement simple utilisant jQuery.
var el = $(".content");
var w = el.width() / 4 | 0; // calculate & trim decimals
el.css("border-width", "1px " + w + "px");
.content { border: 1px solid #f00; }
<div class="content">
This is the element to have percentage borders.
</div>
Mais vous devez être conscient que vous devrez ajuster la largeur de la bordure chaque fois que votre modifications de la taille des conteneurs (c'est-à-dire le redimensionnement de la fenêtre du navigateur). Mon premier contournement avec l'élément wrapper semble beaucoup plus simple car il ajustera automatiquement la largeur dans ces situations.
Le côté positif de la solution scriptée est qu'elle ne souffre pas des problèmes de fond mentionnés dans ma solution non-scriptée précédente.