Criei um menu horizontal usando listas HTML e CSS. Tudo funciona como deveria, exceto quando você passa o mouse sobre os links. Veja bem, eu criei um estado de foco em negrito para os links, e agora os links do menu mudam devido à diferença de tamanho em negrito.
Encontro o mesmo problema que esta postagem do SitePoint . No entanto, a postagem não possui solução adequada. Procurei em toda parte por uma solução e não consigo encontrar uma. Certamente não posso ser o único a tentar fazer isso.
Alguém tem alguma idéia?
PS: Não sei a largura do texto nos itens de menu, por isso não posso apenas definir a largura dos itens de li.
.nav { margin: 0; padding: 0; }
.nav li {
list-style: none;
display: inline;
border-left: #ffffff 1px solid;
}
.nav li a:link, .nav li a:visited {
text-decoration: none;
color: #000;
margin-left: 8px;
margin-right: 5px;
}
.nav li a:hover{
text-decoration: none;
font-weight: bold;
}
.nav li.first { border: none; }
<ul class="nav">
<li class="first"><a href="#">item 0</a></li>
<li><a href="#">item 1</a></li>
<li><a href="#">item 2</a></li>
<li><a href="#">item 3</a></li>
<li><a href="#">item 4</a></li>
</ul>
margin-top: -1px
a:after
para evitar a criação de espaço de 1px de altura.:
vs::
"Todos os navegadores que suportam a::
sintaxe CSS3 de dois pontos também suportam apenas a:
sintaxe, mas o IE 8 suporta apenas os dois pontos; por enquanto, é recomendável usar apenas os dois pontos para melhor suporte ao navegador." css-tricks.com/almanac/selectors/a/after-and-beforeUL
oua::after
, em outras palavras - reinicializar todos os / marging / linha-alturas de preenchimento / font-tamanhos etcUma solução comprometida é fingir negrito com sombra de texto, por exemplo:
Para uma melhor comparação, criei estes exemplos:
Passar para
text-shadow
um valor realmente baixoblur-radius
fará com que o efeito de desfoque não seja tão aparente.Em geral, quanto mais repetir,
text-shadow
mais ousado será o texto, mas ao mesmo tempo perderá a forma original das letras.Devo avisar que definir as
blur-radius
frações para não renderiza o mesmo em todos os navegadores! O Safari, por exemplo, precisa de valores maiores para renderizá-lo da mesma maneira que o Chrome fará.fonte
Se você não pode definir a largura, isso significa que a largura será alterada à medida que o texto estiver em negrito. Não há como evitar isso, exceto por compromissos como a modificação do preenchimento / margens de cada estado.
fonte
Outra ideia é usar
letter-spacing
fonte
Uma linha no jquery:
editar: Embora isso possa trazer a solução, é preciso mencionar que ela não funciona em conjunto com o código da postagem original. "display: inline" deve ser substituído por parâmetros flutuantes para que uma configuração de largura seja eficaz e que o menu horizontal funcione conforme o esperado.
fonte
ul.nav li a
pora
obras?Solução CSS3 - Experimental
(Ousadia falsa)Pensou em compartilhar uma solução diferente que ninguém sugeriu aqui. Existe uma propriedade chamada
text-stroke
que será útil para isso.Aqui, estou direcionando o texto para dentro da
span
tag e traçamos um pixel com oblack
qual simularemos obold
estilo para esse texto em particular.Observe que essa propriedade não é amplamente suportada. No momento (ao escrever esta resposta), apenas o Chrome e o Firefox parecem oferecer suporte. Para obter mais informações sobre o suporte ao navegador
text-stroke
, consulte CanIUse .Apenas para compartilhar algumas coisas extras, você pode usar
-webkit-text-stroke-width: 1px;
se não quiser definir umcolor
para o seu AVC.fonte
Você poderia usar algo como
e, em seu css, defina o conteúdo da extensão em negrito e oculte-o com visibilidade: hidden, para que ele mantenha suas dimensões. Em seguida, você pode ajustar as margens dos seguintes elementos para ajustá-lo corretamente.
Não tenho certeza se essa abordagem é amigável para SEO.
fonte
Acabei de resolver o problema com a solução "sombra". Parece o mais simples e eficaz.
Não há necessidade de repetir a sombra três vezes (o resultado foi o mesmo para mim).
fonte
Eu tive um problema semelhante ao seu. Eu queria que meus links ficassem em negrito quando você passasse o mouse sobre eles, mas não apenas no menu, mas também no texto. Como você pode imaginar, seria uma tarefa real descobrir todas as larguras diferentes. A solução é bem simples:
Crie uma caixa que contenha o texto do link em negrito, mas colorido como plano de fundo e com o link real acima dele. Aqui está um exemplo da minha página:
CSS:
Claro que você precisa substituir # FFFFE0 pela cor de fundo da sua página. Os índices-z não parecem ser necessários, mas eu os coloco de qualquer maneira (como o elemento "hipo" ocorrerá após o elemento "hiper" no código HTML). Agora, para colocar um link em sua página, inclua o seguinte:
HTML:
O segundo "aqui" ficará invisível e oculto abaixo do seu link. Como esta é uma caixa estática com o texto do link em negrito, o restante do texto não será mais alterado, pois já foi alterado antes de você passar o mouse sobre o link.
Espero ter conseguido ajudar :).
Tanto tempo
fonte
Você pode trabalhar com a propriedade "margin":
Apenas verifique se as margens esquerda e direita são grandes o suficiente para que o espaço extra possa conter o texto em negrito. Para palavras longas, você pode escolher margens diferentes. É apenas mais uma solução alternativa, mas fazer o trabalho para mim.
fonte
Eu gosto de usar sombra de texto. Especialmente porque você pode usar transições para animar sombra de texto.
Tudo o que você realmente precisa é:
Para uma navegação completa, confira este jsfiddle: https://jsfiddle.net/831r3yrb/
Suporte ao navegador e mais informações sobre sombra de texto: http://www.w3schools.com/cssref/css3_pr_text-shadow.asp
fonte
Eu aconselho a não trocar as fontes (°) ao passar o mouse. Nesse caso, são apenas os itens de menu que estão se movendo um pouco, mas já vi casos em que o parágrafo completo é reformatado porque o alargamento causa uma quebra de linha extra. Você não quer ver isso acontecer quando a única coisa que você faz é mover o cursor; se você não fizer nada, o layout da página não deve mudar.
A mudança também pode acontecer ao alternar entre normal e itálico. Eu tentaria alterar as cores ou alternar o sublinhado se você tiver espaço abaixo do texto. (o sublinhado deve ficar afastado da borda inferior)
Eu seria boo'd se eu usasse alternar fontes para a minha classe Design de Formulário :-)
(°) A palavra fonte é frequentemente usada incorretamente. "Verdana" é um tipo de letra , "Verdana normal" e "Verdana negrito" são fontes diferentes do mesmo tipo de letra.
fonte
fonte
Eu uso a solução de sombra de texto como alguns outros mencionados aqui:
a diferença é que eu não especifico a cor da sombra, portanto, esta solução é universal para todas as cores de fonte.
fonte
Uma abordagem alternativa seria "emular" texto em negrito via sombra de texto. Isso tem o bônus (/ malus, dependendo do seu caso) para funcionar também nos ícones de fontes.
Meio hacky, embora você evite a duplicação de texto (o que é útil se for muito, como no meu caso).
fonte
Esta é a solução que eu prefiro. Requer um pouco de JS, mas você não precisa que sua propriedade title seja exatamente a mesma e seu CSS pode permanecer muito simples.
fonte
Que tal isso? Uma solução livre de javascript - CSS3.
http://jsfiddle.net/u1aks77x/1/
fonte
Solução não muito elegante, mas "funciona":
fonte
Combinei várias técnicas acima para fornecer algo que não é totalmente ruim com o js desativado e é ainda melhor com um pouco do jQuery. Agora que o suporte ao navegador para espaçamento entre letras de subpixel está melhorando, é muito bom usá-lo.
fonte
É melhor usar a :: before em vez de :: :: assim:
Para mais detalhes: https://jsfiddle.net/r25foavy/
fonte
a::before
que seria melhor do quea::after
? Isso parece ser uma peça-chave da sua resposta, mas não é óbvio por que uma é preferível à outra nesse caso.Eu fixei menu quando pairar sucesso ousado. Suporta responsivo, este é o meu código:
fonte
Se você não tem aversão ao uso do Javascript, pode definir a largura adequada assim que a página for mostrada. Aqui está como eu fiz (usando o Prototype):
fonte
Eu realmente não suporto quando alguém diz para você não fazer algo dessa maneira quando há uma solução simples para o problema. Não tenho certeza sobre os elementos li, mas acabei de corrigir o mesmo problema. Eu tenho um menu que consiste em tags div.
Basta definir a tag div como "display: inline-block". Inline para que eles fiquem próximos um do outro e bloqueie para que você possa definir uma largura. Basta definir a largura suficiente para acomodar o texto em negrito e alinhar o centro do texto.
(Nota: parece estar retirando meu html [abaixo], mas cada item de menu tinha uma tag div envolvida com o ID correspondente e o nome da classe SearchBar_Cateogory.
<div id="ROS_SearchSermons" class="SearchBar_Category">
HTML (eu tinha tags âncora em volta de cada item de menu, mas não consegui enviá-las como um novo usuário)
CSS:
fonte
tente isto:
fonte
Você também pode tentar as margens negativas se o texto em negrito for maior que o normal. (nem sempre) Portanto, a idéia é usar classes para estilizar o estado: hover.
jQuery:
CSS:
Espero poder ajudar!
fonte