Estou tentando fazer uma regra horizontal com algum texto no meio. Por exemplo:
----------------------------------- meu título aqui ------------ -----------------
Existe uma maneira de fazer isso em CSS? Sem todos os traços "-" obviamente.
html
css
cross-browser
Jason
fonte
fonte
form
tag?fieldset
e #legend
Respostas:
É assim que eu faria: a linha é criada definindo a
border-bottom
no contendo eh2
depois dando ah2
um menorline-height
. O texto é então colocado em um fundo aninhadospan
com um fundo não transparente.Testei apenas no Chrome, mas não há motivo para que ele não funcione em outros navegadores.
JSFiddle: http://jsfiddle.net/7jGHS/
fonte
Depois de tentar soluções diferentes, eu vim com uma válida para diferentes larguras de texto, qualquer plano de fundo possível e sem adicionar marcações extras.
Eu testei no IE8, IE9, Firefox e Chrome. Você pode ver aqui http://jsfiddle.net/Puigcerber/vLwDf/1/
fonte
h1 {
overflow: hidden; `alinhamento de texto: esquerda; `recuo do texto: 40 px; `}:after
elemento a largura do bloco. Estou curioso: qual é exatamente o papelmargin-right: -50%
? Quando eu estava mexendo no código, perder essa propriedade faria com que a decoração fosse quebrada em outra linha. E mesmo quando:after
é atribuída uma largura de 100%, ainda preciso da margem negativa à direita de 50% para ajustá-la. Por quê?Ok, este é mais complicado, mas funciona em tudo, menos no IE <8
Os elementos: before e: after são posicionados absolutamente para que possamos puxar um para a esquerda e outro para a direita. Além disso, a largura (40% neste caso) é muito dependente da largura do texto dentro .. tem que pensar em uma solução para isso. Pelo menos o
top: 1.2em
garante que as linhas fiquem mais ou menos no centro do texto, mesmo se você tiver um tamanho de fonte diferente.Parece funcionar bem: http://jsfiddle.net/tUGrf/3/
fonte
form
tag. Se ele faz, como eu tenho certeza que você sabe, ele poderia simplesmente usarfieldset
elegend
.Método mais curto e melhor:
fonte
font-family: monospace;
funcionou bem.Aqui está a solução baseada em Flex.
JSFiddle: https://jsfiddle.net/yoshiokatsuneo/3h1fmj29/
fonte
<h1><span>Today</span></h1>
com uma margem / preenchimento no vão.para o navegador mais recente (hoje em dia),
display:flex
anddpseudo-elements
facilita o desenho.border-style
,box-shadow
e atébackground
ajuda também para a maquiagem.fonte
fonte
Dê um preenchimento ao espaço para deixar mais espaço entre o texto e a linha.
Exemplo: http://jsfiddle.net/tUGrf/
fonte
Estive procurando algumas soluções para essa decoração simples e encontrei algumas, algumas estranhas, algumas até com JS para calcular a altura da fonte e bla, bla, bla, então li o um neste post e ler um comentário de trintadot falando sobre
fieldset
elegend
e eu pensei que era ele.Estou substituindo esses estilos de 2 elementos, acho que você pode copiar os padrões W3C para eles e incluí-los em sua
.middle-line-text
classe (ou como você quiser chamar), mas foi o que fiz:Aqui está o violino: http://jsfiddle.net/legnaleama/3t7wjpa2/
Eu brinquei com os estilos de borda e também funciona no Android;) (Testado no kitkat 4.XX)
EDITAR:
Seguindo a ideia de Bekerov Artur, que também é uma boa opção, alterei a imagem .png base64 para criar o traçado com um .SVG, para que você possa renderizar em qualquer resolução e também alterar a cor do elemento sem nenhum outro software envolvido :)
fonte
Solução para IE8 e mais recente ...
Questões que merecem destaque:
Usando
background-color
para mascarar uma borda pode não ser a melhor solução. Se você tiver uma cor (ou imagem) complexa (ou desconhecida) do plano de fundo, o mascaramento falhará. Além disso, se você redimensionar o texto, notará que a cor branca do plano de fundo (ou o que você definir) começará a encobrir o texto na linha acima (ou abaixo).Também não é necessário "estimar" a largura das seções, pois isso torna os estilos muito inflexíveis e quase impossíveis de serem implementados em um site responsivo em que a largura do conteúdo está mudando.
Solução:
( Exibir JSFiddle )
Em vez de "mascarar" uma borda com a
background-color
, use suadisplay
propriedade.HTML
CSS
Redimensione seu texto colocando sua
font-size
propriedade no.group
elementoLimitações:
top
A propriedade no.line
elemento precisa ser metadeline-height
. Então, se você tem umline-height
dos1.5em
, então otop
deve ser-.75em
. Essa é uma limitação, pois não é automatizada e, se você aplicar esses estilos em elementos com diferentes alturas de linha, poderá ser necessário reaplicar seuline-height
estilo.Para mim, essas limitações superam os "problemas" que observei no início da minha resposta para a maioria das implementações.
fonte
Isso fornece um comprimento fixo para as linhas, mas funciona muito bem. Os comprimentos das linhas são controlados adicionando ou usando '\ 00a0' (espaço unicode).
fonte
Se alguém está se perguntando como definir o cabeçalho de modo que apareça com uma distância fixa para o lado esquerdo (e não centralizado como apresentado acima), descobri isso modificando o código do @ Puigcerber.
Aqui o JSFiddle .
fonte
isso vai te ajudar
entre linhas
fonte
Eu uso um layout de tabela para preencher os lados dinamicamente e divs de posição absoluta e altura 0 para posicionamento vertical dinâmico:
https://jsfiddle.net/eq5gz5xL/18/
Eu descobri que um pouco abaixo do verdadeiro centro fica melhor com o texto; isso pode ser ajustado onde
55%
estiver (altura mais alta diminui a barra). A aparência da linha pode ser alterada onde oborder-bottom
estiver.HTML:
CSS:
fonte
Para não bater em um cavalo morto, mas eu estava procurando uma solução, acabei aqui e não estava satisfeito com as opções, até porque, por algum motivo, não consegui fazer com que as soluções fornecidas aqui funcionassem bem para mim. (Provavelmente devido a erros da minha parte ...) Mas eu tenho jogado com o flexbox e aqui está algo que eu trabalhei para mim.
Algumas das configurações são cabeadas, mas apenas para fins de demonstração. Eu acho que essa solução deve funcionar em praticamente qualquer navegador moderno. Apenas remova / ajuste as configurações fixas da classe .flex-parent, ajuste cores / texto / outras coisas e (espero) você ficará tão feliz quanto eu com essa abordagem.
HTML:
Também salvei minha solução aqui: https://jsfiddle.net/Wellspring/wupj1y1a/1/
fonte
Caso alguém queira, IMHO a melhor solução usando CSS é por um flexbox.
Aqui está um exemplo:
Isso sempre deve resultar em um conteúdo alinhado perfeitamente centralizado, com uma linha à esquerda e à direita, com uma margem fácil de controlar entre a linha e o seu conteúdo.
Ele cria um elemento de linha antes e depois do seu controle superior e define-os para pedir 1,3 no seu contêiner flex, enquanto define seu conteúdo como ordem 2 (vá no meio). dar um aumento de 1 antes / depois fará com que eles consumam o espaço mais vago da mesma forma, mantendo o conteúdo centralizado.
Espero que isto ajude!
fonte
Não tenho muita certeza, mas você pode tentar usar uma regra horizontal e empurrar o texto acima da margem superior. Você precisará de uma largura fixa na sua tag de parágrafo e um plano de fundo também. É um pouco hacky e não sei se funcionará em todos os navegadores, e você precisa definir a margem negativa com base no tamanho da fonte. Funciona no chrome embora.
fonte
Eu tentei a maioria das maneiras sugeridas, mas termina com alguns problemas, como largura total ou Inadequado para conteúdo dinâmico. Finalmente eu modifiquei um código e funciona perfeitamente. Este código de exemplo desenhará essas linhas antes e depois e é flexível na alteração do conteúdo. Centro alinhado também.
HTML
CSS
Resultado: https://jsfiddle.net/fasilkk/vowqfnb9/
fonte
Para mim, esta solução funciona perfeitamente bem ...
HTML
<h2 class="strikethough"><span>Testing Text</span></h2>
CSS
fonte
As pessoas que estão usando o Bootstrap 4 podem obter esse método. As classes mencionadas no código HTML são do Bootstrap 4.
E escreva seu HTML assim
fonte
Linha horizontal e vertical com palavras no meio
Isso também é respondido em https://stackoverflow.com/a/57279326/6569224
fonte
Resultado:
fonte