361 votes

Comment augmenter l'espace entre les points de la bordure en pointillés ?

J'utilise une bordure en pointillés dans ma boîte comme suit

.box {
    width: 300px;
    height: 200px;
    border: dotted 1px #f00;
    float: left;
}

Je veux augmenter l'espace entre chaque point de la bordure.

547voto

Eagorajose Points 541

Cette astuce fonctionne aussi bien pour les bordures horizontales que verticales :

/*Horizontal*/
background-image: linear-gradient(to right, black 33%, rgba(255,255,255,0) 0%);
background-position: bottom;
background-size: 3px 1px;
background-repeat: repeat-x;

/*Vertical*/
background-image: linear-gradient(black 33%, rgba(255,255,255,0) 0%);
background-position: right;
background-size: 1px 3px;
background-repeat: repeat-y;

Vous pouvez régler la taille avec background-size et la proportion avec les pourcentages du gradient linéaire. Dans cet exemple, j'ai une ligne pointillée de 1px de points et 2px d'espacement. De cette façon, vous pouvez aussi avoir plusieurs bordures en pointillés en utilisant plusieurs arrière-plans.

Essayez-le dans ce JSFiddle ou regardez l'exemple de l'extrait de code :

div {
  padding: 10px 50px;
}
.dotted {
  border-top: 1px #333 dotted;
}
.dotted-gradient {
  background-image: linear-gradient(to right, #333 40%, rgba(255, 255, 255, 0) 20%);
  background-position: top;
  background-size: 3px 1px;
  background-repeat: repeat-x;
}
.dotted-spaced {
  background-image: linear-gradient(to right, #333 10%, rgba(255, 255, 255, 0) 0%);
  background-position: top;
  background-size: 10px 1px;
  background-repeat: repeat-x;
}
.left {
  float: left;
  padding: 40px 10px;
  background-color: #F0F0DA;
}
.left.dotted {
  border-left: 1px #333 dotted;
  border-top: none;
}
.left.dotted-gradient {
  background-image: linear-gradient(to bottom, #333 40%, rgba(255, 255, 255, 0) 20%);
  background-position: left;
  background-size: 1px 3px;
  background-repeat: repeat-y;
}
.left.dotted-spaced {
  background-image: linear-gradient(to bottom, #333 10%, rgba(255, 255, 255, 0) 0%);
  background-position: left;
  background-size: 1px 10px;
  background-repeat: repeat-y;
}

<div>no
  <br>border</div>
<div class='dotted'>dotted
  <br>border</div>
<div class='dotted-gradient'>dotted
  <br>with gradient</div>
<div class='dotted-spaced'>dotted
  <br>spaced</div>

<div class='left'>no
  <br>border</div>
<div class='dotted left'>dotted
  <br>border</div>
<div class='dotted-gradient left'>dotted
  <br>with gradient</div>
<div class='dotted-spaced left'>dotted
  <br>spaced</div>

0 votes

Wow, c'est mignon. Pour la ligne horizontale, c'est assez facile d'ajouter à une :after définition.

15 votes

Je pense que c'est un piratage à n degrés.

11 votes

Je veux faire la même chose mais la largeur de la bordure en pointillé est de 3px au lieu de 1px et maintenant elle devient carrée au lieu de pointillée.

142voto

Matt Points 1007

Voici une astuce que j'ai utilisée sur un projet récent pour réaliser presque tout ce que je veux avec des bordures horizontales. J'utilise <hr/> chaque fois que j'ai besoin d'une bordure horizontale. La méthode de base pour ajouter une bordure à ce fichier est la suivante

 hr {border-bottom: 1px dotted #000;}

Mais si vous voulez prendre le contrôle de la bordure et, par exemple, augmenter l'espace entre les points, vous pouvez essayer quelque chose comme ceci :

hr {
height:14px; /* specify a height for this hr */
overflow:hidden;
}

Et dans la suite, vous créez votre bordure (voici un exemple avec des points)

hr:after {
content:".......................................................................";
letter-spacing: 4px; /* Use letter-spacing to increase space between dots*/
}

Cela signifie également que vous pouvez ajouter des ombres de texte aux points, aux dégradés, etc. Tout ce que vous voulez...

Eh bien, cela fonctionne très bien pour les bordures horizontales. Si vous avez besoin de bordures verticales, vous pouvez spécifier une classe pour un autre hr et utiliser le CSS3 rotation propriété.

3 votes

Est-ce compatible avec les différents navigateurs ?

106 votes

Je ne peux pas imaginer quelle douleur dans le a** que ce serait à maintenir.

1 votes

Comment obtenir le même effet pour la verticale ?

138voto

Shadikka Points 1878

Vous ne pouvez pas le faire avec du pur CSS - le Spécification CSS3 a même une citation spécifique à ce sujet :

Remarque : il n'y a aucun contrôle sur l'espacement des points et des tirets, ni sur la longueur des tirets. Les implémentations sont encouragées à choisir un espacement qui rend les coins symétriques.

Vous pouvez toutefois utiliser soit une image de bordure ou une image de fond qui fait l'affaire.

7 votes

Vous pouvez utiliser des gradients (pure CSS) pour une bordure entièrement personnalisable. Voir la réponse ci-dessous

3 votes

-1, @Shadikka, Ce que la spécification CSS3 dit est que cela ne peut pas être fait en utilisant border: dotted mais il es Il est possible de le faire en utilisant des gradients comme l'a montré la réponse d'Eagorajose.

23voto

Pekka 웃 Points 249607

Voir le Documents MDN pour les valeurs disponibles pour border-style :

  • none : Pas de bordure, définit la largeur à 0. C'est la valeur par défaut.
  • hidden : Identique à 'none', sauf en ce qui concerne la résolution des conflits de bordure. résolution des conflits de bordure pour les éléments éléments.
  • en pointillés : Série de courts tirets ou de segments de ligne.
  • pointillés : Série de points.
  • double : Deux lignes droites droites qui s'ajoutent à la quantité de pixels définie comme largeur de la bordure.
  • rainure : Effet sculpté.
  • inset : fait apparaître la boîte apparaît encastrée.
  • outset : Opposé à inset ". Donne l'impression que la boîte est en 3D (gaufré).
  • crête : Opposé à rainure'. La bordure apparaît en 3D (sortant).
  • solide : Simple, ligne droite et solide.

En dehors de ces choix, il n'y a aucun moyen d'influencer le style de la bordure standard.

Si les possibilités qui y sont offertes ne vous conviennent pas, vous pouvez pourrait utiliser la technologie CSS3 border-image mais notez que la prise en charge par les navigateurs est encore très aléatoire ( EDIT : Support du navigateur est valable à partir de 2020).

0 votes

Merci pekka, cela signifie que je ne peux pas utiliser la propriété border ... donc je dois utiliser une image pour cela.

0 votes

@kc si aucun des styles de bordure n'est à votre goût, oui.

1voto

Crozin Points 22346

Réponse courte : Vous ne pouvez pas.

Vous devrez utiliser border-image et quelques images.

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