Au clic, j'ajoute, 1px frontière à div, donc la taille Div augmente de 2px X 2px. Je ne veux pas augmenter la taille des div. Existe-t-il un moyen simple de le faire?
Explication détaillée
désordonnée En fait, j'ajoute des DIV avec float: left (même taille, comme les icônes) à un conteneur-div, donc tout s'empile les uns après les autres, et quand (la largeur du conteneur-div est de 300px) il n'y a pas d'espace laissé dans le sens de la largeur, donc Les DIV enfants viennent dans la ligne suivante, donc c'est comme le catalogue, mais à cause de la bordure seule la taille DIV sélectionnée est augmentée, DIV sous DIV sélectionné va à droite et crée un espace vide sous DIV sélectionné.
EDIT:
Diminuer la hauteur / largeur sur la sélection, mais comment l'augmenter en arrière. En utilisant un framework tiers, donc ne pas avoir d'événement lorsque DIV perd la sélection.
Réponses:
La propriété border css augmentera la taille "externe" de tous les éléments, à l'exception des tds dans les tables. Vous pouvez avoir une idée visuelle de la façon dont cela fonctionne dans Firebug ( abandonné ), sous l'onglet html-> layout.
À titre d'exemple, un div avec une largeur et une hauteur de 10px et une bordure de 1px, aura une largeur et une hauteur extérieures de 12px.
Pour votre cas, pour donner l'impression que la bordure est à "l'intérieur" du div, dans la classe CSS sélectionnée, vous pouvez réduire la largeur et la hauteur de l'élément en doublant la taille de votre bordure, ou vous pouvez faire de même pour le rembourrage des éléments.
Par exemple:
la source
outline
ou une bordure avec la même couleur que l'arrière-plan (et changer sa couleur en quelque chose d'autre lorsque est sélectionné) est plus flexible.border-color: transparent
Cela est également utile dans ce scénario. il vous permet de définir des bordures sans changer la largeur div
Tiré de http://css-tricks.com/box-sizing/
la source
définissez une bordure dessus avant de cliquer pour avoir la même couleur que l'arrière-plan.
Ensuite, lorsque vous cliquez, changez simplement la couleur d'arrière-plan et la largeur ne changera pas.
la source
border-color: transparent
Une autre bonne solution consiste à utiliser à la
outline
place deborder
. Il ajoute une bordure sans affecter le modèle de boîte. Cela fonctionne sur IE8 +, Chrome, Firefox, Opera, Safari.( https://stackoverflow.com/a/8319190/2105930 )
la source
box-shadow
par mon autre réponse sur une question similaire. Il n'a pas le même support de navigateur, mais c'est moins un problème de nos jours.box-shadow
peut également prendre en charge la bordure d'un côté, solution parfaite.border-color: transparent
a un meilleur support multi-navigateurs --- voir ma réponse ...Essayez de changer
border
pouroutline
:la source
Ayant utilisé plusieurs de ces solutions, je trouve que l'utilisation de l'astuce de réglage
border-color: transparent
est la plus flexible et la plus largement prise en charge:Pourquoi c'est mieux:
outline
, vous pouvez toujours spécifier, par exemple, les bordures supérieure et inférieure séparémentla source
transparent
voilà quel besoin!Essaye ça
la source
J'utilise généralement un rembourrage pour résoudre ce problème. Le remplissage sera ajouté lorsque la bordure disparaît et supprimée lorsque la bordure apparaît. Exemple de code:
Voir mon exemple de code complet sur JSFiddle: https://jsfiddle.net/3t7vyebt/4/
la source
Diminuez simplement la largeur et la hauteur du double de la largeur de la bordure
la source
Vous pouvez faire des choses fantaisistes avec des ombres incrustées. Exemple pour mettre une bordure au bas d'un élément sans changer sa taille:
la source
Parfois, vous ne voulez pas que la hauteur ou la largeur soient affectées sans définir explicitement non plus. Dans ce cas, je trouve utile d'utiliser des pseudo éléments.
Vous pouvez également faire beaucoup plus avec le pseudo élément, c'est donc un modèle assez puissant.
la source
width
etheight
et d'ajouter une propriétébottom
etleft
en plus detop
etleft
, qui devraient tous être définis sur la largeur opposée de la bordure d'origine (dans mon cas -1px). Super hack cependantEssayez de réduire la taille de la marge lorsque vous augmentez la bordure
la source
J'avais besoin de pouvoir "border" n'importe quel élément en ajoutant une classe et de ne pas affecter ses dimensions. Une bonne solution pour moi était d'utiliser box-shadow. Mais dans certains cas, l'effet n'était pas visible en raison d'autres frères et sœurs. J'ai donc combiné à la fois une ombre de boîte typique et une ombre de boîte encastrée. Le résultat est un aspect de bordure sans changer les dimensions.
Valeurs séparées par une virgule. Voici un exemple simple:
jsfiddle
Ajustez votre look préféré et vous êtes prêt à partir!
la source
Nous pouvons également utiliser la fonction css calc ()
soustraction de 2 pixels pour les bordures
la source
la source
Vous pouvez créer l'élément avec une bordure de la même couleur que votre arrière-plan, puis lorsque vous voulez que la bordure s'affiche, changez simplement sa couleur.
la source
border-color: transparent
ul li a{border-bottom:2px solid transparent;} ul li a:hover{border-bottom:2px solid red;}
div
Si le contenu de votre est rendu dynamiquement et que vous souhaitez définir sa hauteur, vous pouvez utiliser une astuce simple avecoutline
:Exemple ici: https://codepen.io/Happysk/pen/zeQzaZ
la source
Vous pouvez essayer un encadré d'ombre de boîte
quelque chose comme ceci: box-shadow: inset 0px -5px 0px 0px #fff
ajoute une bordure blanche de 5 pixels au bas de l'élément sans augmenter la taille
la source