A documentação de bootstrap sobre esse tópico é um pouco confusa para mim. Desejo obter um comportamento semelhante ao dos documentos com a barra de navegação afixada: a barra de navegação está abaixo de um título de parágrafo / página e, ao rolar para baixo, deve primeiro rolar até chegar ao topo da página e, em seguida, ficar fixada para mais rolagens .
Como jsFiddle não funciona com o conceito de navbar, configurei uma página separada para uso como um exemplo mínimo: http://i08fs1.ira.uka.de/~s_drr/navbar.html
Eu uso isso como minha barra de navegação:
<div class="navbar affix-top" data-spy="affix" data-offset-top="50">
<div class="navbar-inner">
<div class="container">
<div class="span12">
<a class="brand" href="#">My Brand</a>
This is my navbar.
</div>
</div> <!-- container -->
</div> <!-- navbar-inner -->
</div> <!-- navbar -->
Eu acho que gostaria data-offset-top
de ter o valor 0 (uma vez que a barra deve "grudar" no topo ", mas com 50 há pelo menos algum efeito assistível.
Se também colocar o código javascript no lugar:
<script>
$(document).ready (function (){
$(".navbar").affix ();
});
</script>
Qualquer ajuda apreciada.
fonte
.navbar-fixed-top
vez de affix ()?.navbar-fixed-top
colocaria a barra de navegação no topo o tempo todo . Eu quero um cabeçalho de página ACIMA da barra de navegação e, ao rolar para baixo (e, portanto, a barra de navegação apostaria rolando para longe), ele deve ficar no topo - então e somente então. Os documentos do Bootstrap usavam os mesmos mecanismos que um subnav em seus documentos anteriores, infelizmente eles o removeram para os documentos 2.1.0.)};
deveria ser});
Respostas:
Eu estava tendo um problema semelhante e acredito que encontrei uma solução melhorada.
Não se preocupe
data-offset-top
em especificar em seu HTML. Em vez disso, especifique-o ao chamar.affix()
:A vantagem aqui é que você pode alterar o layout do seu site sem precisar atualizar o
data-offset-top
atributo. Como isso usa a posição real computada do elemento, também evita inconsistências com navegadores que exibem o elemento em uma posição ligeiramente diferente.Você ainda precisará prender o elemento na parte superior com CSS. Além disso, tive que definir
width: 100%
o elemento nav, já que os.nav
elementos composition: fixed
mau comportamento por algum motivo:Uma última coisa: quando um elemento afixado se torna fixo, seu elemento não ocupa mais espaço na página, fazendo com que os elementos abaixo dele "saltem". Para evitar essa feiura, envolvo o navbar em um
div
cuja altura eu defini para ser igual ao navbar em tempo de execução:.
Aqui está o jsFiddle obrigatório para vê-lo em ação .
fonte
Acabei de implementar isso pela primeira vez e aqui está o que descobri.
O
data-offset-top
valor é a quantidade de pixels que você deve rolar para que o efeito de fixação ocorra. No seu caso, depois de50px
rolar a tela, a classe em seu item é alterada de.affix-top
para.affix
. Você provavelmente desejaria definirdata-offset-top
para aproximadamente130px
em seu caso de uso.Depois que essa mudança de classe ocorrer, você deve posicionar seu elemento em css estilizando o posicionamento para a classe
.affix
. O Bootstrap 2.1 já o define.affix
,position: fixed;
então tudo que você precisa fazer é adicionar seus próprios valores de posição.Exemplo:
fonte
.navbar
classe é preservada - tem certeza?Para corrigir esse problema, modifiquei o plugin afixo para emitir um evento jQuery quando um objeto é afixado ou não.
Aqui está a solicitação de pull: https://github.com/twitter/bootstrap/pull/4712
E o código: https://github.com/corbinu/bootstrap/blob/master/js/bootstrap-affix.js
E então faça isso para anexar a barra de navegação:
fonte
Você precisa remover
.affix()
do seu script.O Bootstrap oferece a opção de realizar coisas via
data-attributes
ou direto JavaScript na maioria das vezes.fonte
Peguei isso no código-fonte do twitterbootstrap e está funcionando muito bem:
HTML:
CSS:
JS:
fonte
Você só precisa remover o script. Aqui está meu exemplo:
fonte
Obrigado a namuol e Dave Kiss pela solução. No meu caso, tive um pequeno problema com a altura e largura da navbar quando usei o aflix e os plug-ins de recolhimento juntos. O problema com a largura pode ser facilmente resolvido herdando-o do elemento pai (recipiente no meu caso). Além disso, consegui fazer com que ele diminuísse suavemente com um pouco de javascript (na verdade, coffeescript). O truque é definir a altura do invólucro para
auto
antes de ocorrer a alternância de recolhimento e corrigi-lo novamente depois.Marcação (haml):
CSS:
Coffeescript:
fonte
Minha solução para anexar a barra de navegação:
fonte
Semelhante à resposta aceita, você também pode fazer algo como o seguinte para fazer tudo de uma vez:
Isso não apenas invoca o
affix
plug - in, mas também envolve o elemento afixado em uma div que manterá a altura original da barra de navegação.fonte