Ho una barra di navigazione fissa sul mio sito web che rimane in alto con collegamenti che mi portano a diverse sezioni più in basso nella pagina. Tuttavia, poiché la barra di navigazione fissa ha un'altezza di 40 px, l'inizio di 40 pixel di ogni sezione viene coperto. Come dovrei compensare il punto in cui i miei link mi portano da 40px usando HTML o CSS? Grazie.Come faccio a spostare dove mi porta la barra di navigazione fissa?
risposta
Si potrebbe provare assolutamente posizionando ancoraggi "fittizi" 40 pixel sopra la parte superiore di ogni sezione. Puoi dare loro zero larghezza/altezza e visibilità nascosta per garantire che questi ancoraggi non influiscano sul modo in cui viene visualizzata la pagina. Quando l'utente fa clic su uno dei link nella barra di navigazione fissa, la finestra scorrerà fino alla cima dell'ancora fittizia, 40 pixel sopra l'inizio della sua sezione effettiva.
Esempio HTML:
<div class="navbar">
<a href="#anchor1">Anchor 1</a>
<a href="#anchor2">Anchor 2</a>
<a href="#anchor3">Anchor 3</a>
</div>
<div class="section">
<span id="anchor1" class="anchor"></span>
Section Content
</div>
<div class="section">
<span id="anchor2" class="anchor"></span>
Section Content
</div>
<div class="section">
<span id="anchor3" class="anchor"></span>
Section Content
</div>
Esempio CSS:
body {
padding-top: 40px;
}
.navbar {
position: fixed;
width: 100%;
height: 40px;
top: 0;
left: 0;
z-index: 10;
border-bottom: 1px solid #ccc;
background: #eee;
}
.section {
position: relative;
}
.anchor {
display: block;
position: absolute;
width: 0;
height: 0;
z-index: -1;
top: -40px;
left: 0;
visibility: hidden;
}
Per un esempio di lavoro, vedere http://jsfiddle.net/HV7QL/
Edit: CSS3 include anche il :target
pseudo-classe, che si applica a un elemento di cui id
è stato referenziato dallo href
di un link nel documento o il valore hash dell'URL. Puoi applicare una imbottitura da 40 pixel nella parte superiore di :target
che verrà applicata solo alla sezione selezionata dall'utente dalla barra di navigazione fissa.
Esempio CSS:
.section:target {
padding-top: 40px;
}
Questo è semanticamente più pulita rispetto al metodo descritto in precedenza, ma non funziona su browser più vecchi.
esempio di lavoro: http://jsfiddle.net/5Ngft/
Wow, la tua seconda risposta è davvero bella. L'unico problema che penso è che mentre il tuo target # è ancora nella url, quell'elemento manterrà il padding. Quindi, se si scorre di nuovo, si ha questo strano spazio nella pagina. –
Questo ha funzionato, ma non è pulito come vorrei. Mi piace lavorare, ma il codice potrebbe essere decisamente più pulito. – Brian
Mi è capitato di incappare in questo problema io stesso oggi così avevo pensato a questo proposito già da un po ', ma penso che ho appena trovato una soluzione:
Aggiungi un padding-top: 40px; margin-top: -40px
per l'elemento che si desidera passare a. Il margine negativo annulla il padding, ma il browser pensa ancora che la parte superiore dell'elemento sia 40px più alta di quanto non sia in realtà (perché in effetti lo è, solo il suo contenuto inizia più in basso).
Sfortunatamente, questo potrebbe entrare in collisione con margini e paddings già impostati, e se si sta usando uno sfondo sull'elemento mirato, si tratterà di tutto.
Vedrò se riesco a risolvere questo e inviare un jsfiddle, ma nel frattempo ecco una risposta di base almeno :)
a cura: pensavo di avere una soluzione per lo sfondo, ma non ha funzionato Rimosso di nuovo.
modifica finale: Funziona se si conosce il colore di sfondo dell'elemento di spostamento. Nel mio esempio, so che il testo è su uno sfondo bianco, ma i titoli hanno uno sfondo argentato. Per evitare che il titolo di avere un background sul chilo in più abbiamo impostato, invece ho messo su un pseudo-elemento prima:
#three:before {
content: " ";
background: white;
display: block;
margin-top: -40px;
padding-top: 40px;
}
In questo modo il chilo in più ha di nuovo uno sfondo bianco, ma questo funziona solo se sai già di quale sfondo ha bisogno. Ad esempio, impostandolo su trasparente mostrerà lo sfondo sottostante del titolo stesso, non dell'articolo.
jsFiddle: http://jsfiddle.net/Lzve6/ Il primo è quello predefinito con cui si verificano problemi. L'intestazione due è la mia prima soluzione, garantita per funzionare su quasi tutti i browser L'intestazione tre utilizza lo pseudoelemento :before
, potrebbe non funzionare su older browsers.
Questo ha incasinato i miei altri margini e paddings che avevo impostato sul posto. Attualmente l'ho impostato: '#contact { \t display: block; \t allineamento del testo: centro; margine \t: 0 auto; \t background-color: rgba (255, 255, 255, 0.15); \t larghezza: auto; \t padding: 15px; margine \t: 15px; } ' – Brian
C'è un modo per combinare i miei margini correnti e il padding con le tue modifiche. Qualcosa come il margine ' : -40px 0px 0px 0px auto; padding: 55px 15px 15px 15px; ' – Brian
Certo, ma dovrai aggiungerli manualmente. Il tuo esempio dovrebbe funzionare :) –
- 1. Bootstrap 3 barra di navigazione fissa fissa fissa in visualizzazione mobile
- 2. Posizionare un div "wrapper" sotto una barra di navigazione fissa?
- 3. Come aggiungere ulteriore barra fissa alla barra di navigazione Bootstrap di Twitter?
- 4. Come faccio a spostare un JSplitPane?
- 5. Come faccio a rendere la barra di navigazione sempre in alto?
- 6. Navigazione barra laterale fissa in fluid twitter bootstrap 2.0
- 7. Barra di navigazione lista larghezza di navigazione - contenuto a capo
- 8. Bootstrap barra di navigazione fisso all'interno div
- 9. PhoneGap - Come faccio a rendere la barra di stato nera?
- 10. come faccio a mantenere una barra di navigazione nella parte superiore della pagina?
- 11. Impossibile modificare il colore del testo con la barra di navigazione di Android Barra di navigazione a discesa
- 12. La barra di navigazione fissa si separa dalla parte superiore del browser su Chrome per iPhone
- 13. Pulsante barra di navigazione image
- 14. Seguito modale, la barra di navigazione scompare
- 15. Come rendere barra di navigazione come Instagram
- 16. Barra di navigazione titleVisione allineamento
- 17. Autolayout iOS - Posizione corretta sotto la barra di navigazione traslucida
- 18. aggiungi UIImageView che copre la barra di navigazione
- 19. Mettere un logo su twitter barra di navigazione bootstrap senza ridimensionare la barra di navigazione
- 20. Come spostare la barra delle applicazioni di Windows (due)
- 21. Come faccio a ottenere l'interfaccia utente di Swagger per utilizzare la porta 443 con Swashbuckle?
- 22. Come modificare la dimensione della barra di navigazione di ionic?
- 23. Posso modificare la posizione della voce della barra di navigazione?
- 24. Barra di navigazione multilinea Titolo
- 25. per la barra di navigazione voce di elemento swift
- 26. Barra di navigazione trasparente bootstrap
- 27. Come manipolare la barra di navigazione usando i percorsi?
- 28. jQuery Mobile (1.1): disabilita l'occultamento di una barra di navigazione fissa
- 29. Come faccio a sapere quale porta seriale usare su Linux?
- 30. Altezza della barra di navigazione a livello di programmazione
hai provato a impostare un 'top-margin: 40px;' al contenuto 'div'? – Boris
bborisovs, che purtroppo non funziona. Brian, domanda interessante, me lo sono chiesto anch'io. Non credo sia possibile ... –
Il modo migliore per me era usare javascript: 'var shiftWindow = function() {scrollBy (0, -50)}; if (location.hash) shiftWindow(); window.addEventListener ("hashchange", shiftWindow); ' –