2013-04-05 13 views
8

Così ho questa modale che si apre usando il CSS: selettore di destinazione. Tuttavia, la pagina salta all'ancora quando si fa clic. Vorrei evitare che la pagina salti al: selettore di destinazione. Come posso fare questo?Impedire il salto della pagina da: selettore di destinazione

<a href="#openModal">Info</a> 

<div id="openModal" class="modalDialog"> 

CSS:

.modalDialog { 
    position: absolute; 
    pointer-events: none; 
    z-index: 99999; 
opacity:0; 
} 

.modalDialog:target { 
    opacity:1; 
    pointer-events: auto; 
} 

.modalDialog > div { 
    width: 900px; 
    height: 506px; 
    position: relative; 
    background: rgba(0,0,0,0.9); 
} 
+2

L'intero * punto * di un'ancora consente di passare a una parte specifica di una pagina: se il browser deve scorrere per raggiungerlo, scorrerà. Sembra che ": target" non sia la scelta giusta per quello che stai cercando di fare. – BoltClock

risposta

0

Questo non ha nulla a che fare con i CSS in realtà, è pianura vecchio HTML.

Hai un ID di hash nel tuo collegamento, fa riferimento a un elemento nella pagina. Ogni browser dovrebbe scorrere la pagina sull'elemento di riferimento quando viene fatto clic su tale collegamento. Questo è un comportamento molto standard.

Non è possibile impedirlo se non utilizzando questa tecnica. Beh, forse c'è un modo per impedire lo scorrimento con la magia nera JavaScript, ma non dovresti.

utilizzare alcuni jQuery invece: http://docs.jquery.com/Tutorials:Basic_Show_and_Hide

1

provare ad arrestare l'azione predefinita del tag di ancoraggio

$('a').on('click', function(e){ 
    e.preventDefault(); 

    //do your poppin' up here. 
}); 
+0

In realtà se il selettore ': target' ha lo scopo di mostrare' .modalDialog', 'preventDefault' impedirebbe anche quell'azione !!! Ciò funzionerebbe solo se la logica di mostrare Modal si trova nel jQuery che non è giusto concettualmente. –

+0

Se si impedisce il default, neanche: target funzionerà ... – gleenk

0

Hai provato il css3: selettore di messa a fuoco?

https://developer.mozilla.org/en-US/docs/Web/CSS/:focus

anche

CSS Menu - Keep parent hovered while focus on submenu

È anche possibile utilizzare un tag <button> invece e lo stile che più vi si prega. Ciò impedirebbe il salto della pagina poiché non è un'ancora.

+1

Non mi è chiaro come si userebbe ': focus' invece di': target' in questo caso. – Blazemonger

+0

Sebbene possa funzionare per visualizzare la finestra di dialogo modale, non appena qualcosa nella finestra di dialogo viene interagita, lo stato attivo si sposta e la finestra di dialogo scompare. –

2

Creare .modalDialogposition: fixed anziché absolute. Ciò lo farà posizionare sempre dovunque la pagina è attualmente scorsa.

Un esempio più completo: http://codepen.io/mblase75/pen/xbRNeV

(C'è qualche altro inganno coinvolto in questo demo codepen - l'aggiunta di un altro obiettivo per il pulsante 'stretta' sul modale che è anche fixed mantiene la pagina dal scorrimento quando la modal è chiuso, e cambiando il z-index del vostro modale dalla -1 a 100 (o qualche altro opportunamente grande numero intero) per impedire che il blocco scatti subito dopo averlo chiuso.)

+0

"Altro inganno" è geniale. Lo scroll della pagina su modal non-JS era un dealbreaker per me, ma questa correzione è perfetta. Molto bene! – kittykittybangbang

1

Usa

<a href="#/">...</a> 

per cambiare: selettore di destinazione in CSS ma andare da nessuna parte. Il frammento #/non esiste, quindi la pagina non scorrerà, ma: il selettore di destinazione cambierà per influenzare la modifica del CSS.

+0

Welp, solo rocce. Grazie per il trucco molto esoterico. – Sirat

Problemi correlati