2009-04-16 8 views
6

Qualcuno ha già chiesto, How does the DiggBar work? in una domanda precedente.In che modo il DiggBar ridimensiona dinamicamente l'altezza dell'iframe in base al contenuto non sul proprio dominio?

Mentre qualcuno fornito una risposta decente che non ha affrontato una cosa:

Come si fa a Digg ridimensionare dinamicamente la loro altezza di iframe, in base al contenuto di un sito in un dominio diverso?

Ci sono un sacco di domande e risposte qui su SO per regolare in modo dinamico in base al largo di un contenuto (utilizzando JavaScript) altezza iframe fintanto che l'url è incorniciata sul tuo dominio. Tuttavia, Digg sembra aver risolto questo problema con siti web di qualsiasi dominio.

Qualche programmatore web SO ha idea di come è stato realizzato?

Nota: L'iframe NON è semplicemente impostato su 100% di altezza. Il tag iframe semplicemente non funziona così. Google "100% altezza iframe" e vedrai cosa intendo.

risposta

18

Se si guarda alla their CSS, usano height: 100% per il iframe:

iframe#diggiFrame { 
    color: #666; 
    width: 100%; 
    height: 100%; 
    z-index: 10; 
    -webkit-box-sizing: border-box;  
} 

Essi posizionare il DiggBar sopra che con un'altezza di 46px, in modo che il iframe prende il 100% dello spazio rimanente. Utilizzano overflow: hidden sull'elemento body per mantenere il valore iframe interamente all'interno dell'altezza verticale della pagina, anziché consentire lo scorrimento della pagina. Ciò significa che la barra di scorrimento verrà visualizzata all'interno di iframe, anziché per l'intera pagina. Si noti che il modo in cui funziona DiggBar funziona solo in modalità strane in Firefox; vedi sotto per come farlo in modalità standard.

body { 
    padding: 46px 0 0 0; 
    margin: 0; 
    background: #fff; 
    overflow: hidden; 
    color: #333; 
    text-align: left; 
} 

#t { 
    width: 100%; 
    min-width: 950px; 
    height: 46px; 
    z-index: 100; 
    position: absolute; 
    top: 0; 
    left: 0; 
    /* overflow: hidden; */ 
    border-bottom: 1px solid #666; 
    background: #fff url(/App_PermaFrame/media/img/back.gif) repeat-x; 
    line-height: 1; 
} 

modificare: Per coloro che non mi credete, ecco un small example. Per farlo riempire l'intero spazio, è necessario impostarlo in modo che non contenga alcun bordo, e non è necessario che lo <body> non abbia margini.

modifica 2: Ah, scusa, vedo di cosa stavi parlando. È necessario lo overflow: hidden sul tag body per far funzionare la barra di scorrimento nel modo desiderato.

modifica 3: Sembra che tu debba essere in modalità strane perché funzioni in Firefox; se includi una dichiarazione <!DOCTYPE html>, questo ti porta in modalità standard e il tuo iframe risulta troppo piccolo.

modifica 4: Ah, lo puoi fare anche in modalità standard in Firefox. Hai la risposta here. È necessario impostare l'altezza sugli elementi <html> e <body> su 100%.(Si noti che lo <!DOCTYPE html> è il doctype per HTML 5, che è un lavoro in corso, tuttavia, funziona su tutti i browser moderni per attivare la modalità standard).

<!DOCTYPE html> 
<html> 
<head> 
    <style type="text/css" media="all"> 
    html, body { 
     height: 100% 
    } 
    body { 
     margin: 0; 
     overflow: hidden; 
    } 
    #topbar { 
     height: 50px; 
     width: 100%; 
     border-bottom: 1px solid #666 
    } 
    #iframe { 
     height: 100%; 
     width: 100%; 
     border-width: 0 
    } 
    </style> 
</head> 
<body> 
    <div id="topbar"> 
    <h1>This is my fake DiggBar</h1> 
    </div> 
    <iframe id="iframe" src="http://www.google.com/"></iframe> 
</body> 
+0

non funzionano in questo modo. Prova tu stesso, imposta un iframe con altezza: 100% e imposta il suo src su http://gooogle.com. Non funzionerà. – KingNestor

+0

La maggior parte delle persone finisce per ricorrere a javascript per farlo, ma fallisce quando prova a farlo per un iframe con un set src su un sito attraverso un dominio diverso. Sono curioso di sapere come lo fanno anche loro. – KingNestor

+0

height 100% lo espande all'altezza del tag body, che non è l'altezza del contenuto ifram e nella maggior parte dei casi sarà troppo piccolo. – KingNestor

0

L'iFrame si trova sul sito Web di Digg con il sito Web di destinazione all'interno, non il contrario. L'iFrame è impostato al 100% di larghezza e altezza.

+0

Sì, lo so. Ma lo src a cui punta l'iframe punta a un URL al di fuori del proprio dominio. Pertanto, a causa della sicurezza, non dovrebbero essere in grado di ridimensionarlo dinamicamente in base all'altezza del contenuto. – Mithrax

+0

Gli iframe di altezza 100% non funzionano così. Google it. Gli iframi – Mithrax

2

Parte del problema con l'HTML non si può solo impostare un elemento di qualsiasi cosa per altezza 100% e lo hanno occupano l'intero spazio della finestra. Un modo per farlo è di fare in modo che il corpo abbia un'altezza pixel della finestra e qualsiasi cosa all'interno del corpo impostata al 100% corrisponderà alle dimensioni della finestra.

Fondamentalmente basta creare un JavaScript che si collega all'evento onresize di Windows e farlo ridimensionare il corpo alla dimensione della finestra.

Ecco un esempio che ho fatto utilizzando jQuery

<script language="JavaScript" type="text/JavaScript"> 
    $(window).resize(function() { 
     $('body').height(document.documentElement.clientHeight); 
    }); 
</script> 

Con questo si sarà in grado di impostare un div o altri elementi e farlo lavorare a tutta l'altezza della finestra.

1

Un iframe può avere altezza 100% in modalità di quirks. Digg raggiunge questo lasciando fuori il doctype.

0

100% in un iframe è il 100% percento dello spazio genitore dichiarato. Un esempio è:

/* parent element */ 

html, body { 
    width: 100%; 
    height: 100%; 
} 

/* child element */ 
iframe { 
    width: 100%; /* this is truly 100%, try it out */ 
    height: 100%; /* try it out */ 
Problemi correlati