97 votes

Comment définir l'épaisseur de la bordure en pourcentage ?

Comment définir la largeur de la bordure d'un élément en pourcentage ? J'ai essayé la syntaxe

border-width:10%;

Mais ça ne marche pas.

La raison pour laquelle je veux mettre border-width dans les pourcentages est que j'ai un élément avec width: 80%; y height: 80%; Je veux que l'élément couvre la totalité de la fenêtre du navigateur et je veux donc que toutes les bordures soient à 10 %. Je ne peux pas le faire avec la méthode des deux éléments, dans laquelle l'un serait positionné derrière l'autre et ferait office de bordure, car l'arrière-plan de l'élément est transparent et le fait de positionner un élément derrière lui affecterait sa transparence.

Je sais que cela peut être fait via JavaScript, mais je cherche une méthode uniquement CSS, si possible.

4voto

robocat Points 1567

Les navigateurs modernes prennent en charge les unités vh et vw. qui représentent un pourcentage de la fenêtre d'affichage.

Vous pouvez donc avoir des bordures purement CSS en pourcentage de la taille de la fenêtre :

border: 5vw solid red;

Essayez cet exemple et modifiez la largeur de la fenêtre ; la bordure changera d'épaisseur à mesure que la fenêtre change de taille. box-sizing: border-box; peut également être utile.

2voto

David Genger Points 478

Dimensionnement des boîtes
définir la taille de la boîte en tant que boîte de bordure box-sizing: border-box; et définissez une largeur de 100% et une largeur fixe pour la bordure, puis ajoutez une largeur minimale pour que la bordure ne prenne pas toute la place sur un petit écran.

0voto

Vous pouvez créer une bordure personnalisée en utilisant un span. Faites un span avec une classe (spécifiant la direction dans laquelle la bordure va aller) et un id :

<html>
    <body>
        <div class="mdiv">
            <span class="VerticalBorder" id="Span1"></span>
            <header class="mheader">
                <span class="HorizontalBorder" id="Span2"></span>
            </header>
        </div>
    </body>
</html>

Ensuite, allez dans votre CSS et mettez la classe à position:absolute , height:100% (pour les bordures verticales), width:100% (pour les bordures horizontales), margin:0% y background-color:#000000; . Ajoutez tout ce qui est nécessaire :

body{
    margin:0%;
}

div.mdiv{
    position:absolute;
    width:100%;
    height:100%;
    top:0%;
    left:0%;
    margin:0%;
}

header.mheader{
    position:absolute;
    width:100%;
    height:20%; /* You can set this to whatever. I will use 20 for easier calculations. You don't need a header. I'm using it to show you the difference. */
    top:0%;
    left:0%;
    margin:0%;
}

span.HorizontalBorder{
    position:absolute;
    width:100%;
    margin:0%;
    background-color:#000000;
}

span.VerticalBorder{
    position:absolute;
    height:100%;
    margin:0%;
    background-color:#000000;
}

Ensuite, définissez l'id qui correspond à class="VerticalBorder" à top:0%; , left:0%; , width:1%; (Étant donné que la largeur du mdiv est égale à la largeur du mheader à 100 %, la largeur sera égale à 100 % de ce que vous avez défini. Si vous définissez la largeur à 1%, la bordure sera de 1% de la largeur de la fenêtre). Définissez l'id qui correspond à l'élément class="HorizontalBorder" à top:99% (Puisqu'il se trouve dans un conteneur d'en-tête, le haut fait référence à la position dans laquelle il se trouve selon l'en-tête. La somme de cette position et de la hauteur doit être égale à 100 % si vous voulez qu'il atteigne le bas), left:0%; y height:1% (Étant donné que la hauteur du mdiv est 5 fois supérieure à celle du mheader [100 % = 100, 20 % = 20, 100/20 = 5], la hauteur sera de 20 % de celle que vous avez définie. Si vous définissez la hauteur à 1%, la bordure sera de 0,2% de la hauteur de la fenêtre). Voici à quoi cela ressemblera :

span#Span1{
    top:0%;
    left:0%;
    width:.4%;
}
span#Span2{
    top:99%;
    left:0%;
    width:1%;
}

AVERTISSEMENT : Si vous redimensionnez la fenêtre à une taille suffisamment petite, les bordures disparaîtront. Une solution serait de limiter la taille de la bordure si la fenêtre est redimensionnée à un certain point. Voici ce que j'ai fait :

window.addEventListener("load", Loaded);

function Loaded() {
  window.addEventListener("resize", Resized);

  function Resized() {
    var WindowWidth = window.innerWidth;
    var WindowHeight = window.innerHeight;
    var Span1 = document.getElementById("Span1");
    var Span2 = document.getElementById("Span2");
    if (WindowWidth <= 800) {
      Span1.style.width = .4;
    }
    if (WindowHeight <= 600) {
      Span2.style.height = 1;
    }
  }
}

Si vous avez tout fait correctement, cela devrait ressembler à ce que vous voyez sur ce lien : https://jsfiddle.net/umhgkvq8/12/ Pour une raison étrange, la bordure disparaît dans jsfiddle mais pas si vous le lancez dans un navigateur.

-2voto

ilgice Points 18

Jetez un coup d'œil à spécification calc() . Voici un exemple d'utilisation :

border-right:1px solid;
border-left:1px solid;
width:calc(100% - 2px);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X