O que estou procurando:
Uma maneira de estilizar um MEIO de um personagem. (Nesse caso, metade da letra é transparente)
O que eu procurei e tentei no momento (sem sorte):
- Métodos para estilizar metade de um caractere / letra
- Como estilizar parte de um personagem com CSS ou JavaScript
- Aplicar CSS a 50% de um caractere
Abaixo está um exemplo do que estou tentando obter.
Existe uma solução CSS ou JavaScript para isso ou vou precisar recorrer a imagens? Eu preferiria não seguir a rota da imagem, pois esse texto acabará sendo gerado dinamicamente.
ATUALIZAR:
Como muitos perguntaram por que eu gostaria de criar metade de um personagem, é por isso. Minha cidade gastou recentemente US $ 250.000 para definir uma nova "marca" para si mesma. Este logotipo é o que eles criaram. Muitas pessoas se queixaram da simplicidade e falta de criatividade e continuam a fazê-lo. Meu objetivo era criar este site como uma piada. Digite 'Halifax' e você verá o que quero dizer.
fonte
Respostas:
Agora no GitHub como um plug-in!
Sinta-se livre para garfo e melhorar.
Demonstração | Faça o download do Zip | Half-Style.com (redireciona para o GitHub)
Parte 1: Solução básica
Demo: http://jsfiddle.net/arbel/pd9yB/1694/
Isso funciona em qualquer texto dinâmico ou em um único caractere e é tudo automatizado. Tudo o que você precisa fazer é adicionar uma classe ao texto de destino e o restante será resolvido.
Além disso, a acessibilidade do texto original é preservada para os leitores de tela para cegos ou deficientes visuais.
Explicação para um único caractere:
CSS puro. Tudo o que você precisa fazer é aplicar a
.halfStyle
classe a cada elemento que contém o caractere que você deseja que seja estilizado pela metade.Para cada elemento de amplitude que contém o caractere, você pode criar um atributo de dados, por exemplo
data-content="X"
, aqui , e no pseudo-elemento,content: attr(data-content);
para que a.halfStyle:before
classe seja dinâmica e você não precisará codificá-la para todas as instâncias.Explicação para qualquer texto:
Simplesmente adicione
textToHalfStyle
classe ao elemento que contém o texto.( Demo do JSFiddle )
Parte 2: Solução avançada - partes esquerda e direita independentes
Com esta solução, você pode modelar as peças esquerda e direita, individual e independentemente .
Tudo é o mesmo, apenas CSS mais avançado faz a mágica.
Mostrar snippet de código
( Demo do JSFiddle )
Parte 3: Combine e melhore
Agora que sabemos o que é possível, vamos criar algumas variações.
-Meias Partes Horizontais
Sem sombra de texto:
Possibilidade de sombra de texto para cada metade da parte independentemente:
Mostrar snippet de código
( Demo do JSFiddle )
-Vertical 1/3 Peças
Sem sombra de texto:
Possibilidade de sombra de texto para cada parte de 1/3 independentemente:
Mostrar snippet de código
( Demo do JSFiddle )
-Horizontal 1/3 Peças
Sem sombra de texto:
Possibilidade de sombra de texto para cada parte de 1/3 independentemente:
Mostrar snippet de código
( Demo do JSFiddle )
-HalfStyle Improvement Por @KevinGranger
Mostrar snippet de código
( Demo do JSFiddle )
-PeelingStyle melhoria do HalfStyle por @SamTremaine
Mostrar snippet de código
( Demo do JSFiddle e em samtremaine.co.uk )
Parte 4: Pronto para produção
Diferentes conjuntos de estilos de meio estilo personalizados podem ser usados nos elementos desejados na mesma página. Você pode definir vários conjuntos de estilos e dizer ao plugin qual usar.
O plug-in usa o atributo de dados
data-halfstyle="[-CustomClassName-]"
nos.textToHalfStyle
elementos de destino e faz todas as alterações necessárias automaticamente.Portanto, simplesmente no elemento que contém o texto, adicione
textToHalfStyle
classe e atributo de dadosdata-halfstyle="[-CustomClassName-]"
. O plug-in fará o resto do trabalho.As definições de classe dos conjuntos de estilos CSS também correspondem à
[-CustomClassName-]
parte mencionada acima e estão encadeadas.halfStyle
, portanto, teremos.halfStyle.[-CustomClassName-]
( Demo do JSFiddle )
fonte
Acabei de desenvolver o plugin e está disponível para uso de todos! Espero que você goste.
Exibir projeto no GitHub - Exibir site do projeto . (para que você possa ver todos os estilos divididos)
Uso
Primeiro de tudo, verifique se a
jQuery
biblioteca está incluída. A melhor maneira de obter a versão mais recente do jQuery é atualizar sua tag de cabeça com:Após o download dos arquivos, inclua-os no seu projeto:
Marcação
Tudo o que você precisa fazer é atribuir a classe
splitchar
, seguida pelo estilo desejado ao elemento que envolve o texto. por exemploDepois de tudo isso, certifique-se de chamar a função jQuery no arquivo pronto para seu documento, como este:
Customizando
Para que o texto fique exatamente como você deseja, basta aplicar o design da seguinte forma:
É isso aí! Agora você tem o
Splitchar
plugin pronto. Mais informações sobre o assunto em http://razvanbalosin.com/Splitchar.js/ .fonte
Sim, você pode fazer isso com apenas um caractere e apenas CSS.
Apenas Webkit (e Chrome), no entanto:
http://jsbin.com/rexoyice/1/
Visualmente, todos os exemplos que usam dois caracteres (seja JS, pseudo elementos CSS ou apenas HTML) parecem bons, mas observe que todos adicionam conteúdo ao DOM que pode causar acessibilidade - assim como seleção / corte de texto / colar problemas.
fonte
background-clip: text
é super incrível e eles devem considerá-lo (ou algo semelhantetext-decoration-background
) para um módulo de nível 4.JSFiddle DEMO
Vamos fazê-lo usando apenas pseudo-seletores CSS!
Essa técnica funcionará com conteúdo gerado dinamicamente e diferentes tamanhos e larguras de fonte.
HTML:
CSS:
Para quebrar a cadeia gerada dinamicamente, você pode usar uma função como esta:
fonte
Pode ser irrelevante, talvez não, mas há algum tempo atrás eu criei uma função jQuery que faz a mesma coisa, mas horizontalmente.
Eu chamei de "Strippex" Para 'stripe' + 'text', demo: http://cdpn.io/FcIBg
Não estou dizendo que essa é a solução de qualquer problema, mas já tentei aplicar css à metade de um personagem, mas horizontalmente. Portanto, a ideia é a mesma, a realização pode ser horrível, mas funciona.
Ah, e o mais importante, eu me diverti criando!
fonte
pointer-events:none
a&:nth-child(2)
-&:nth-child(5)
. Isso faz com que o texto possa ser destacado apenas uma vez e você receberá apenas uma cópia. Você pode vê-lo aqui: codepen.io/anon/pen/upLajSe você está interessado nisso, o Glitch de Lucas Bebber é um efeito muito semelhante e super legal:
Criado usando um SASS Mixin simples, como
Mais detalhes nas CSS Tricks de Chris Coyer e na página Codepen de Lucas Bebber
fonte
Aqui está uma implementação feia na tela. Eu tentei esta solução, mas os resultados são piores do que eu esperava, então aqui está mesmo assim.
fonte
0.5
a parada de cor vermelha.O mais próximo que posso obter:
Demo: http://jsfiddle.net/9wxfY/2/
Heres uma versão que usa apenas uma extensão: http://jsfiddle.net/9wxfY/4/
fonte
$('span').width()
apenas retorna a largura do primeiro vão encontrado; teria que ser algo que você fez para cada par. O que me dá uma idéia ...Acabei de jogar com a solução da @ Arbel:
fonte
Outra solução apenas para CSS (embora o atributo de dados seja necessário se você não quiser escrever CSS específico para uma letra). Este funciona mais amplamente (Testado IE 9/10, Chrome mais recente e FF mais recente)
fonte
Solução CSS e jQuery limitada
Não tenho certeza de quão elegante é essa solução, mas corta tudo exatamente ao meio: http://jsfiddle.net/9wxfY/11/
Caso contrário, criei uma boa solução para você ... Tudo o que você precisa fazer é ter isso no seu HTML:
Dê uma olhada nesta edição mais recente e precisa a partir de 13/06/2016: http://jsfiddle.net/9wxfY/43/
Quanto ao CSS, é muito limitado ... Você só precisa aplicá-lo ao
:nth-child(even)
fonte
http://experimental.samtremaine.co.uk/half-style/
Você pode usar esse código para fazer todo tipo de coisa interessante - essa é apenas uma implementação que meu associado e eu vimos na noite passada.
fonte
Uma boa solução exclusiva para o WebKit que aproveita o
background-clip: text
suporte: http://jsfiddle.net/sandro_paganotti/wLkVt/fonte
Que tal algo assim para textos mais curtos?
Pode até funcionar para textos mais longos se você fizer algo com um loop, repetindo os caracteres com JavaScript. De qualquer forma, o resultado é algo como isto:
fonte
FWIW, aqui está minha opinião sobre isso, apenas com CSS: http://codepen.io/ricardozea/pen/uFbts/
Várias notas:
A principal razão pela qual fiz isso foi me testar e ver se consegui estilizar metade de um personagem e, ao mesmo tempo, fornecer uma resposta significativa ao OP.
Estou ciente de que essa não é uma solução ideal ou a mais escalável, e as soluções propostas pelas pessoas aqui são muito melhores para cenários do "mundo real".
O código CSS que criei é baseado nos primeiros pensamentos que vieram à minha mente e em minha própria abordagem pessoal ao problema.
Minha solução funciona apenas em caracteres simétricos, como X, A, O, M. ** Não funciona em caracteres assimétricos como B, C, F, K ou letras minúsculas.
** Entretanto, essa abordagem cria 'formas' muito interessantes com caracteres assimétricos. Tente alterar o X para um K ou para uma letra minúscula como um h ou p no CSS :)
HTML
SCSS
fonte
Você também pode fazê-lo usando SVG, se desejar:
http://codepen.io/nicbell/pen/jGcbq
fonte
Isso pode ser conseguido apenas com o
:before
seletor CSS econtent property value
.>> Veja no jsFiddle
fonte
Você pode usar o código abaixo. Aqui, neste exemplo, usei
h1
tag e adicionei um atributodata-title-text="Display Text"
que aparecerá com texto em cores diferentes noh1
elemento de texto tag, o que dá um efeito de texto em meia-cor conforme mostrado no exemplo abaixofonte
Apenas para o registro na história!
Eu vim com uma solução para meu próprio trabalho de 5 a 6 anos atrás, que é Gradext (javascript puro e css puro, sem dependência).
A explicação técnica é que você pode criar um elemento como este:
agora, se você quiser fazer um gradiente no texto, precisará criar várias camadas, cada uma individualmente colorida e o espectro criado ilustrará o efeito de gradiente.
por exemplo, observe esta é a palavra lorem dentro de a
<span>
e causará um efeito de gradiente horizontal ( verifique os exemplos ):e você pode continuar fazendo esse padrão por um longo período de tempo e também por um longo parágrafo.
Mas!
E se você quiser criar um efeito de gradiente vertical nos textos?
Depois, há outra solução que pode ser útil. Vou descrever em detalhes.
Assumindo o nosso primeiro
<span>
novamente. mas o conteúdo não deve ser as letras individualmente; o conteúdo deve ser o texto inteiro, e agora vamos copiar o mesmo<span>
uma e outra vez Veja isso:Mais uma vez, mas!
e se você quiser criar esses efeitos de gradiente para mover e criar uma animação a partir dele?
bem, há outra solução para isso também. Você definitivamente deve verificar
animation: true
ou mesmo o.hoverable()
método que levará a um gradiente para começar com base na posição do cursor! (soa legal xD)é assim que estamos criando gradientes (lineares ou radiais) nos textos. Se você gostou da idéia ou deseja saber mais sobre ela, verifique os links fornecidos.
Talvez essa não seja a melhor opção, talvez não seja a melhor maneira de fazer isso, mas abrirá algum espaço para criar animações emocionantes e deliciosas para inspirar outras pessoas a encontrar uma solução melhor.
Isso permitirá que você use o estilo gradiente nos textos, o que é suportado pelo IE8!
Aqui você pode encontrar uma demonstração ao vivo em funcionamento e o repositório original também está no GitHub, de código aberto e pronto para receber algumas atualizações (: D)
Esta é a minha primeira vez (sim, depois de cinco anos, você ouviu direito) mencionar este repositório em qualquer lugar da Internet, e estou empolgado com isso!
[Atualização - agosto de 2019:] O Github removeu a demonstração de páginas do github desse repositório porque eu sou do Irã! Somente o código fonte está disponível aqui ...
fonte