Ao clicar em estou adicionando, borda de 1px a div, então o tamanho da Div aumenta em 2px X 2px. Eu não quero aumentar o tamanho da div. Existe alguma maneira simples de fazer isso?
Explicação detalhada bagunçada
Na verdade, estou adicionando DIVs com float: left (left size, like icons) a um container-div, para que tudo seja empilhado um após o outro e quando (a largura do container-div for 300px), não haverá espaço na largura, portanto DIVs filhos vem na próxima linha, portanto, é semelhante ao catálogo, mas devido ao tamanho apenas do DIV selecionado da borda aumentar, o DIV no DIV selecionado vai para a direita e cria um espaço vazio abaixo do DIV selecionado.
EDIT:
Diminuindo Altura / Largura na seleção, mas como aumentá-lo de volta. Usando alguma estrutura de terceiros, não tenha evento quando o DIV perder a seleção.
Respostas:
A propriedade border css aumentará o tamanho "externo" de todos os elementos, excederá tds nas tabelas. Você pode ter uma idéia visual de como isso funciona no Firebug ( descontinuado ), na guia html-> layout.
Apenas como exemplo, uma div com largura e altura de 10px e borda de 1px terá largura e altura externas de 12px.
No seu caso, para fazer parecer que a borda está no "interior" da div, na classe CSS selecionada, você pode reduzir a largura e a altura do elemento dobrando o tamanho da borda ou pode fazer o mesmo para os elementos preenchidos.
Por exemplo:
fonte
outline
ou uma borda com a mesma cor do plano de fundo (e alterar sua cor para outra coisa quando selecionada) é mais flexível.border-color: transparent
Isso também é útil nesse cenário. permite definir bordas sem alterar a largura da div
Retirado de http://css-tricks.com/box-sizing/
fonte
defina uma borda antes de clicar para ter a mesma cor do plano de fundo.
Então, quando você clicar, basta alterar a cor do plano de fundo e a largura não será alterada.
fonte
border-color: transparent
Outra boa solução é usar em
outline
vez deborder
. Ele adiciona uma borda sem afetar o modelo da caixa. Isso funciona no IE8 +, Chrome, Firefox, Opera, Safari.( https://stackoverflow.com/a/8319190/2105930 )
fonte
box-shadow
por minha outra resposta em uma pergunta semelhante. Ele não tem o mesmo suporte a navegador, mas isso é menos problemático atualmente.box-shadow
pode suportar borda de um lado, solução perfeita.border-color: transparent
tem melhor suporte entre navegadores --- veja minha resposta ...Tente mudar
border
paraoutline
:fonte
Tendo usado muitas dessas soluções, acho que usar o truque da configuração
border-color: transparent
é o mais flexível e com amplo suporte:Por que é melhor:
outline
, você ainda pode especificar, por exemplo, as bordas superior e inferior separadamentefonte
transparent
isto é que necessidade!Tente isto
fonte
Eu normalmente uso preenchimento para resolver esse problema. O preenchimento será adicionado quando a borda desaparecer e removido quando a borda aparecer. Código de amostra:
Veja meu código de exemplo completo no JSFiddle: https://jsfiddle.net/3t7vyebt/4/
fonte
Apenas diminua a largura e a altura pelo dobro da largura da borda
fonte
Você pode fazer coisas sofisticadas com sombras embutidas. Exemplo para colocar uma borda na parte inferior de um elemento sem alterar seu tamanho:
fonte
Às vezes, você não deseja que a altura ou a largura sejam afetadas sem definir explicitamente. Nesse caso, acho útil usar pseudo elementos.
Você também pode fazer muito mais com o pseudo elemento, portanto esse é um padrão bastante poderoso.
fonte
width
eheight
e adicionando umbottom
eleft
propriedade, além dotop
eleft
, tudo o que deve ser definida para a largura oposto a borda original (no meu caso -1px). Grande corte emboraTente diminuir o tamanho da margem ao aumentar a borda
fonte
Eu precisava ser capaz de "delimitar" qualquer elemento adicionando uma classe e não afetando suas dimensões. Uma boa solução para mim foi usar o box-shadow. Mas, em alguns casos, o efeito não era visível devido a outros irmãos. Então, eu combinei tanto sombra de caixa típica quanto sombra de caixa inserida. O resultado é uma aparência de borda sem alterar nenhuma dimensão.
Valores separados por vírgula. Aqui está um exemplo simples:
jsfiddle
Ajuste a sua aparência preferida e pronto!
fonte
Também podemos usar a função css calc ()
subtraindo 2px para bordas
fonte
fonte
Você pode criar o elemento com borda com a mesma cor do plano de fundo e, quando quiser que a borda apareça, basta alterar sua cor.
fonte
border-color: transparent
ul li a{border-bottom:2px solid transparent;} ul li a:hover{border-bottom:2px solid red;}
Caso seu conteúdo
div
seja renderizado dinamicamente e você queira definir sua altura, use um truque simples comoutline
:Exemplo aqui: https://codepen.io/Happysk/pen/zeQzaZ
fonte
Você pode tentar inserir uma caixa de sombra
algo como isto: box-shadow: inset 0px -5px 0px 0px #fff
adiciona uma borda branca de 5px à parte inferior do elemento sem aumentar o tamanho
fonte