div {width:200px;height:50px;position: relative;z-index:1;background:#eee;}div:before {content:"";position: absolute;left:0;bottom:0;height:1px;width:50%;/* or 100px */border-bottom:1px solid magenta;}
Essa foi a minha técnica também, mas observe que ela criará a borda na metade esquerda do div. Se você quiser centralizado, dê o div:beforeleft: 50px.
Chowlett
A pergunta não especifica em que posição a borda deve aparecer, então não considerei outras posições
Fabrizio Calderan
5
se a largura da borda inferior for 50% e você quiser centralizá-la, o estilo precisa ser, left: 25%pois será 25% + 50% + 25%
skift
5
Sim, estou ciente que neste exemplo funciona. Mas para outras pessoas que estão fazendo algo semelhante e que podem tentar torná-lo responsivo, talvez seja necessário usar%, pois era o caso para o qual eu precisava da resposta.
skift
4
Use margin: auto, right: 0, left: 0no :beforepara o centro da linha. Vote positivamente se isso ajudou você.
Ale_info
40
Outra maneira de fazer isso (em navegadores modernos) é com uma caixa-sombra negativa. Confira este violino atualizado: http://jsfiddle.net/WuZat/290/
box-shadow:0px24px3px-24px magenta;
Porém, acho que a maneira mais segura e compatível é a resposta aceita acima. Só pensei em compartilhar outra técnica.
Você não pode ter uma borda de tamanho diferente da própria div.
a solução seria apenas adicionar outro div embaixo, centralizado ou posicionado de forma absoluta, com a borda de 1 pixel desejada e apenas 1 pixel de altura.
Deixei a borda original para que você possa ver a largura e tenha dois exemplos - um com largura 100 e outro com largura 100 centralizado. Exclua aquele que você não deseja usar.
Atrasado para a festa, mas para quem quiser fazer 2 bordas (embaixo e à direita no meu caso), você pode usar a técnica na resposta aceita e adicionar um: after psuedo-element para a segunda linha e então apenas alterar as propriedades como então:
http://jsfiddle.net/oeaL9fsm/
Eu fiz algo assim no meu projeto. Eu gostaria de compartilhar isso aqui. Você pode adicionar outro div como filho e dar a ele uma borda com uma largura pequena e colocá-lo à esquerda, centro ou direita com CSS normal
Acabei de fazer o oposto usando :aftere ::afterporque precisava deixar minha borda inferior exatamente 1.3remmais larga:
Meu elemento ficou super deformado quando usei :beforee :afterao mesmo tempo porque os elementos estão alinhados horizontalmente com display: flex, flex-direction: rowe align-items: center.
Você pode usar isso para fazer algo mais amplo ou mais estreito, ou provavelmente qualquer mods de dimensão matemática:
a.nav_link-active {
color: $e1-red;
margin-top:3.7rem;}
a.nav_link-active:visited {
color: $e1-red;}
a.nav_link-active:after {
content:'';
margin-top:3.3rem;// margin and height should
height:0.4rem;// add up to active link margin
background: $e1-red;
margin-left:-$nav-spacer-margin;
display: block;}
a.nav_link-active::after {
content:'';
margin-top:3.3rem;// margin and height should
height:0.4rem;// add up to active link margin
background: $e1-red;
margin-right:-$nav-spacer-margin;
display: block;}
Desculpe, isto é SCSS, basta multiplicar os números por 10 e alterar as variáveis com alguns valores normais.
div:before
left: 50px
.left: 25%
pois será 25% + 50% + 25%margin: auto
,right: 0
,left: 0
no:before
para o centro da linha. Vote positivamente se isso ajudou você.Outra maneira de fazer isso (em navegadores modernos) é com uma caixa-sombra negativa. Confira este violino atualizado: http://jsfiddle.net/WuZat/290/
Porém, acho que a maneira mais segura e compatível é a resposta aceita acima. Só pensei em compartilhar outra técnica.
fonte
Você pode usar um gradiente linear:
fonte
Eu adicionei uma linha sob a tag h3 assim
fonte
Você não pode ter uma borda de tamanho diferente da própria div.
a solução seria apenas adicionar outro div embaixo, centralizado ou posicionado de forma absoluta, com a borda de 1 pixel desejada e apenas 1 pixel de altura.
http://jsfiddle.net/WuZat/3/
Deixei a borda original para que você possa ver a largura e tenha dois exemplos - um com largura 100 e outro com largura 100 centralizado. Exclua aquele que você não deseja usar.
fonte
Atrasado para a festa, mas para quem quiser fazer 2 bordas (embaixo e à direita no meu caso), você pode usar a técnica na resposta aceita e adicionar um: after psuedo-element para a segunda linha e então apenas alterar as propriedades como então: http://jsfiddle.net/oeaL9fsm/
fonte
Eu tenho o caso de ter alguma borda inferior entre as imagens no contêiner div e o melhor código de uma linha era - estilo border-bottom: inset;
fonte
fonte
Eu fiz algo assim no meu projeto. Eu gostaria de compartilhar isso aqui. Você pode adicionar outro div como filho e dar a ele uma borda com uma largura pequena e colocá-lo à esquerda, centro ou direita com CSS normal
Código HTML:
CSS como abaixo:
fonte
A borda recebe todo o elemento html. Se você quiser metade da borda inferior, pode envolvê-la com algum outro bloco identificável como o span.
Código HTML:
CSS como abaixo:
fonte
Isso vai ajudar:
http://www.w3schools.com/tags/att_hr_width.asp
Isso cria uma linha horizontal com largura de 50%, você precisará criar / modificar a classe se quiser editar o estilo.
fonte
Acabei de fazer o oposto usando
:after
e::after
porque precisava deixar minha borda inferior exatamente1.3rem
mais larga:Meu elemento ficou super deformado quando usei
:before
e:after
ao mesmo tempo porque os elementos estão alinhados horizontalmente comdisplay: flex
,flex-direction: row
ealign-items: center
.Você pode usar isso para fazer algo mais amplo ou mais estreito, ou provavelmente qualquer mods de dimensão matemática:
Desculpe, isto é
SCSS
, basta multiplicar os números por 10 e alterar as variáveis com alguns valores normais.fonte