contour sur une seule bordure


86

Comment appliquer une bordure incrustée dans un élément HTML, mais seulement sur un côté de celui-ci. Jusqu'à présent, j'utilisais une image pour faire cela (GIF / PNG) que j'utilisais ensuite comme arrière-plan et l'étirais (repeat-x) et la positionnais un peu en dehors du haut de mon bloc. Récemment, j'ai découvert la propriété CSS contour , ce qui est génial! Mais semble entourer tout le bloc ... Est-il possible d'utiliser cette propriété de contour pour le faire sur une seule bordure? Sinon, avez-vous une astuce CSS qui pourrait remplacer l'image d'arrière-plan? (pour que je puisse personnaliser les couleurs du contour plus tard en utilisant CSS, etc.). Merci d'avance!

Voici une image de ce que j'essaie d'accomplir: http://exiledesigns.com/stack.jpg


7
Votre lien est mort. Vous pouvez simplement coller l'image directement dans la question à l'aide de l'outil Image.
toddmo

Réponses:


46

Le contour s'applique en effet à l'ensemble de l'élément .

Maintenant que je vois votre image, voici comment y parvenir.

.element {
  padding: 5px 0;
  background: #CCC;
}
.element:before {
  content: "\a0";
  display: block;
  padding: 2px 0;
  line-height: 1px;
  border-top: 1px dashed #000; 
}
.element p {
  padding: 0 10px;
}
<div class="element">
  <p>Some content comes here...</p>
</div>

(Ou voir la démo externe. )

Toutes les tailles et couleurs ne sont que des espaces réservés, vous pouvez les modifier pour qu'elles correspondent exactement au résultat souhaité.

Remarque importante : .element doit avoir display:block;(par défaut pour un div) pour que cela fonctionne. Si ce n'est pas le cas, veuillez fournir votre code complet, afin que je puisse élaborer une réponse spécifique.


Bonjour Giona, je viens d'ajouter une image à ma question pour la rendre plus claire: j'ai besoin d'espace entre les limites de mon bloc et ma bordure.
Corinne

Merci @GionaF, mais il semble que la frontière soit toujours «au-dessus» du bloc et non «à l'intérieur». (qu'est-ce que \ a0? Juste un contenu aléatoire pour créer le bloc?) exiledesigns.com/stack2.jpg (J'ai essayé avec 5px de rembourrage mais rien n'a changé)
Corinne

1
@DominicTobias je ne me souviens vraiment pas ;-)
Giona

1
Pour référence, \a0est un espace insécable.

1
Pour mon cas d'utilisation, j'ai pris ceci et modifié un peu. Nécessaire pour ajouter une position absolue en haut et une largeur de 100% sur l'élément avec la pseudo-classe: before, et la position relative de l'élément, au cas où quelqu'un d'autre aurait le même problème.
josh1978

130

Vous pouvez utiliser box-shadowpour créer un contour sur un côté. Comme outline, box-shadowne change pas la taille du modèle de boîte.

Cela met une ligne en haut:

box-shadow: 0 -1px 0 #000;

J'ai créé un jsFiddle où vous pouvez le vérifier en action.


INSET

Pour une bordure incrustée , utilisez le mot clé inset . Cela met une ligne incrustée sur le dessus:

box-shadow: 0 1px 0 #000 inset;

Plusieurs lignes peuvent être ajoutées à l'aide d'instructions séparées par des virgules. Cela met une ligne incrustée en haut et à gauche:

box-shadow: 0 1px 0 #000 inset,
            1px 0 0 #000 inset;

Pour plus de détails sur son box-shadowfonctionnement, consultez la page MDN .


1
J'aime cette approche créative, merci du partage!
PNJ

Vous n'avez pas créé de bordure incrustée et vous n'expliquez pas la syntaxe de box-shadow. Merci.
toddmo

Celui-ci a des limites, si une bordure de style personnalisé est nécessaire!
Andris

9

Essayez avec l'ombre (comme la bordure) + la bordure

border-bottom: 5px solid #fff;
box-shadow: 0 5px 0 #ffbf0e;

1

Je sais que c'est vieux. Mais ouais. Je préfère une solution beaucoup plus courte que la réponse de Giona

[contenteditable] {
    border-bottom: 1px solid transparent;
    &:focus {outline: none; border-bottom: 1px dashed #000;}
}

0

J'aime donner à mon champ de saisie une bordure, supprimer le contour sur le focus et "délimiter" la bordure à la place:

input {
  border: 1px solid grey;

  &:focus {
    outline: none;
    border-left: 1px solid violet;
  }
 }

Vous pouvez également le faire avec une bordure transparente:

input {
  border: 1px solid transparent;

  &:focus {
    outline: none;
    border-left: 1px solid violet;
  }
 }

-1

La grande chose à propos de HTML / CSS est qu'il existe généralement plus d'une façon d'obtenir le même effet. Voici une autre solution qui fait ce que vous voulez:

<nav id="menu1">
    <ul>
        <li><a href="#">Menu Link 1</a></li>
        <li><a href="#">Menu Link 2</a></li>
    </ul>
</nav>

nav {
    background:#666;
    margin:1em;
    padding:.5em 0;
}
nav ul {
    border-top:1px dashed #fff;
    list-style:none;
    padding:.5em;
}
nav ul li {
    display:inline-block;
}
nav ul li a {
    color:#fff;
}

http://jsfiddle.net/10basetom/uCX3G/1/


-2

un seul côté outlinene fonctionnera pas, vous pouvez utiliser leborder-left/right/top/bottom

si je reçois correctement votre commentaire

entrez la description de l'image ici


2
Comment faire l'insertion de bordure gauche / droite / etc? Comme par exemple, à 3 pixels de la bordure du bloc mais à l' intérieur ?
Corinne

@CorinneStoppelli pouvez-vous expliquer?
Database_Query

@Database_Query, je pense que vous avez manqué la partie de l'utilisation de la propriété de contour (ou similaire), ce qui signifie qu'il ne veut pas ajouter plus de poids / hauteur au div. La propriété border ajoute en fait, mais pas contour. L'alternative box-shadow semble être une meilleure option, même si vous devez jouer un peu avec ses options.
xarlymg89
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.