J'ai un <div>
élément et je veux mettre une frontière dessus. Je sais que je peux écrire style="border: 1px solid black"
, mais cela ajoute 2 pixels de chaque côté du div, ce qui n'est pas ce que je veux.
Je préfère que cette bordure soit à -1px du bord de la div. Le div lui-même est 100px x 100px, et si j'ajoute une bordure, alors je dois faire quelques calculs pour faire apparaître la bordure.
Existe-t-il un moyen de faire apparaître la bordure et de s'assurer que la boîte sera toujours de 100 pixels (y compris la bordure)?
Réponses:
Définissez la
box-sizing
propriété surborder-box
:Il fonctionne sur IE8 et supérieur .
la source
outline
.box-sizing
caniuse.com/#search=box-sizingVous pouvez également utiliser l'ombre de boîte comme ceci:
Exemple ici: http://jsfiddle.net/nVyXS/ (survolez pour voir la bordure)
Cela fonctionne uniquement dans les navigateurs modernes. Par exemple: pas de support IE 8. Voir caniuse.com (fonctionnalité d'ombre de boîte) pour plus d'informations.
la source
C'est probablement une réponse tardive, mais je veux partager mes conclusions. J'ai trouvé 2 nouvelles approches à ce problème que je n'ai pas trouvées ici dans les réponses:
Bordure intérieure via la
box-shadow
propriété CSSOui, l'ombre de boîte est utilisée pour ajouter des ombres de boîte aux éléments. Mais vous pouvez spécifier une
inset
ombre, qui ressemblerait plutôt à une bordure intérieure qu'à une ombre. Il vous suffit de définir les ombres horizontales et verticales sur0px
, et laspread
propriété " " de labox-shadow
sur la largeur de la bordure que vous souhaitez avoir. Ainsi, pour la bordure «intérieure» de 10 pixels, vous écririez ce qui suit:Voici un exemple jsFiddle qui illustre la différence entre
box-shadow
bordure et bordure «normale». De cette façon, votre bordure et la largeur de la boîte sont de 100 pixels au total, bordure comprise.En savoir plus sur box-shadow: ici
Bordure à travers la propriété CSS de contour
Voici une autre approche, mais de cette façon, la frontière serait en dehors de la boîte. Voici un exemple . Comme indiqué dans l'exemple, vous pouvez utiliser la
outline
propriété css pour définir la bordure qui n'affecte pas la largeur et la hauteur de l'élément. De cette façon, la largeur de bordure n'est pas ajoutée à la largeur d'un élément.En savoir plus sur le plan: ici
la source
Yahoo! C'est vraiment possible. Je l'ai trouvé.
Pour la bordure inférieure:
Pour la bordure supérieure:
la source
Utilisez un pseudo-élément :
À l'aide de
::after
vous, vous stylisez le dernier enfant virtuel de l'élément sélectionné.content
La propriété crée un élément remplacé anonyme .Nous contenons le pseudo-élément en utilisant la position absolue par rapport au parent. Ensuite, vous avez la liberté d'avoir n'importe quel arrière-plan et / ou bordure personnalisé à l'arrière-plan de votre élément principal.
Cette approche n'affecte pas le placement du contenu de l'élément principal, ce qui est différent de l'utilisation
box-sizing: border-box;
.Considérez cet exemple:
Ici, la
.button
largeur est contrainte à l'aide de l'élément parent. La définition deborder-left-width
ajuste la taille de la zone de contenu et donc la position du texte.L'utilisation de l'approche pseudo-élément n'affecte pas la taille de la zone de contenu.
Selon l'application, l'approche utilisant un pseudo-élément peut être ou non un comportement souhaitable.
la source
:Before
.Bien que cette question ait déjà reçu une réponse adéquate avec des solutions utilisant les propriétés
box-shadow
etoutline
, je voudrais développer légèrement cela pour tous ceux qui ont atterri ici (comme moi) à la recherche d'une solution pour une bordure intérieure avec un décalageDisons donc que vous avez un noir 100px x 100px
div
et que vous devez l' insérer avec une bordure blanche - qui a un décalage interne de 5px (disons) - cela peut toujours être fait avec les propriétés ci-dessus.boîte ombre
L'astuce ici est de savoir que plusieurs ombres de boîte sont autorisées, où la première ombre est au-dessus et les ombres suivantes ont un ordre z inférieur.
Avec cette connaissance, la déclaration box-shadow sera:
Afficher l'extrait de code
Fondamentalement, ce que dit cette déclaration, c'est: restituez d'abord la dernière ombre (10px blanche), puis rendez l'ombre noire précédente de 5px au-dessus.
contour avec contour-offset
Pour le même effet que ci-dessus, les grandes lignes des déclarations seraient:
Afficher l'extrait de code
NB:
outline-offset
n'est pas pris en charge par IE si cela est important pour vous.Démo Codepen
la source
Vous pouvez utiliser les propriétés
outline
etoutline-offset
avec une valeur négative au lieu d'utiliser un régulierborder
, fonctionne pour moi:la source
Je sais que c'est un peu plus ancien, mais comme les mots clés "border inside" m'ont atterri directement ici, je voudrais partager quelques résultats qui méritent d'être mentionnés ici. Lorsque j'ajoutais une bordure sur le survol, j'ai eu les effets dont OP parle. La bordure annonce des pixels à la dimension de la boîte, ce qui la rend nerveuse. Il existe deux autres façons de gérer cela, qui fonctionnent également pour IE7.
1) Ayez une bordure déjà attachée à l'élément et changez simplement la couleur. De cette façon, les mathématiques sont déjà incluses.
2) Compensez votre frontière avec une marge négative. Cela ajoutera toujours les pixels supplémentaires, mais le positionnement de l'élément ne sera pas instable
la source
pour un rendu cohérent entre les nouveaux navigateurs et les anciens, ajoutez un double conteneur, l'extérieur avec la largeur, l'intérieur avec la bordure.
ce n'est évidemment que si votre largeur précise est plus importante que d'avoir un balisage supplémentaire!
la source
la source
La meilleure solution de navigateur croisé (principalement pour le support IE) comme @Steve a dit est de faire une div 98px en largeur et en hauteur que d'ajouter une bordure 1px autour d'elle, ou vous pouvez créer une image d'arrière-plan pour div 100x100 px et dessiner une bordure dessus.
la source
Vous pouvez regarder le contour avec décalage, mais cela nécessite un remplissage pour exister sur votre div. Ou vous pouvez absolument positionner une div frontière à l'intérieur, quelque chose comme
Vous devrez peut-être jouer avec les marges sur les fausses bordures div pour l'adapter à votre guise.
la source
Une solution plus moderne pourrait être d'utiliser css
variables
etcalc
.calc
est largement pris en charge maisvariables
n'est pas encore dans IE11 (polyfills disponibles).Bien que cela utilise certains calculs, ce que les questions originales cherchaient à éviter. Je pense que c'est un bon moment pour utiliser les calculs car ils sont contrôlés par le CSS lui-même. Il n'a également pas besoin de balisage supplémentaire ou de détournement d'autres propriétés css qui pourraient être nécessaires plus tard.
Cette solution n'est vraiment utile que si une hauteur fixe n'est pas nécessaire .
la source
Une solution que je n'ai pas vue mentionnée ci-dessus est le cas où vous avez un remplissage sur votre entrée, ce que je fais 99% du temps. Vous pouvez faire quelque chose comme ...
Ce que j'aime à ce sujet, c'est que j'ai le menu complet des propriétés border + padding + transition pour chaque côté.
la source