Como dar borda a qualquer elemento usando css sem adicionar a largura da borda a toda a largura do elemento?
Como no Photoshop, podemos dar traços- dentro, centro e fora
Acho que as propriedades de borda css padrão estão no centro como no centro no photoshop, estou certo?
Quero dar borda dentro da caixa não fora. e não deseja incluir a largura da borda na largura da caixa.
Verifique o tamanho da caixa CSS ...
A propriedade CSS3 de tamanho de caixa pode fazer isso. O valor da caixa da borda (em oposição ao padrão da caixa de conteúdo) torna a caixa renderizada final a largura declarada e qualquer borda e preenchimento cortado dentro da caixa. Agora você pode declarar com segurança que seu elemento tem 100% de largura, incluindo preenchimento e borda baseados em pixels, e realizar seu objetivo perfeitamente.
Eu sugiro criar um mixin para lidar com isso para você. Você pode encontrar mais informações sobre dimensionamento de caixa em W3c http://www.w3schools.com/cssref/css3_pr_box-sizing.asp
fonte
box-sizing
será suficiente.Dependendo do suporte do navegador pretendido, você pode usar a
box-shadow
propriedade.Você pode definir o valor de desfoque para 0 e a propagação para qualquer espessura que você deseja. A grande vantagem da sombra da caixa é que você pode controlar se ela é desenhada para fora (por padrão) ou para dentro (usando a
inset
propriedade).Exemplo:
ou
Uma grande vantagem de usar box shadow é que você pode ser criativo usando múltiplas box shadow:
A única coisa que não posso dizer é que diferença isso fará no desempenho da renderização. Eu presumiria que isso poderia se tornar um problema se você tivesse centenas de elementos usando essa técnica na tela ao mesmo tempo.
fonte
Eu tive o mesmo problema.
Esta resposta permite que você especifique um único lado. E funcionaria no IE8 + - ao contrário do uso de box-shadow.
É claro que altere as propriedades dos seus pseudoelementos, pois você precisa selecionar um lado específico.
* Novo e melhorado *
Isso permite a capacidade de usar a borda e atingir vários lados de uma caixa.
fonte
Use
box-sizing: border-box
para criar uma borda DENTRO de um div sem modificar a largura do div.Use
outline
para criar uma borda FORA de um div sem modificar a largura do div.Aqui está um exemplo: https://jsfiddle.net/4000cae9/1/
Observações:
border-box
atualmente não é compatível com o IEApoio, suporte:
http://caniuse.com/#feat=outline
http://caniuse.com/#search=border-box
fonte
Como disse Abenson, você pode usar um contorno, mas uma pegadinha é que o Opera pode desenhar uma "forma não retangular". Outra opção que parece funcionar é usar margens negativas, como este css:
Com este html:
Uma outra opção menos limpa é adicionar marcação extra ao html. Por exemplo, você define a largura de um elemento externo e adiciona a borda ao interno. O CSS:
E o html:
fonte
Use preenchimento quando não houver borda. Remova o preenchimento quando houver uma borda.
Basicamente, basta substituir o preenchimento de 2 px por bordas de 2 px. O tamanho da div permanece o mesmo.
fonte
No seu caso, você pode distorcer subtraindo metade da borda do enchimento? (-2,5 do preenchimento se sua borda tiver 5px de largura, você não pode ter preenchimento negativo, portanto, para diminuir, reduza a largura geral da caixa). Você pode adicionar 2,5 px extras à margem para manter a caixa geral do mesmo tamanho.
Eu realmente não gosto dessa sugestão, mas não acho que haja uma maneira de lidar com isso de forma limpa.
fonte
Portanto, você está tentando obter o mesmo que o conhecido bug do modelo de caixa do IE ? Isso não é possível. Ou você deseja oferecer suporte a clientes com IE no Windows apenas e escolher um doctype que force o IE em quirksmode .
fonte
Outra opção, se a cor de fundo for sólida:
fonte
#FFF
transparente e então não precisa se lembrar de alterar dois valores. Sua sugestão tem o benefício de que, se você precisar de uma borda tracejada, isso funcionará quando houverbox-shadow
falta nesse aspecto.contorno: 3px totalmente preto || borda: 3px totalmente preto
fonte