Come far funzionare la proprietà CSS di overflow con nascosto come valore


123

Sto attraversando un periodo difficile con overflow: hidden .

Fondamentalmente, sto cercando di nascondere l'overflow di un elenco non ordinato che si trova in un file <div>.

Non ho idea del motivo per cui non funziona.

Invece di nasconderlo, rompe il mio elenco da un layout orizzontale a un layout verticale.

L'elenco non ordinato è a carosello e il contenitore è elenco.

Di seguito è riportato il mio codice CSS;

div.body .container .images {
    background: url(/images/images-background.jpg);
    height: 62px;
    margin-bottom: 17px;
    width: 384px;
}
div.body .container .images #images-previous {
    cursor: pointer;
    float: left;
}
div.body .container .images #images-next {
    cursor: pointer;
    float: left;
}
div.body .container .images .list {
    float: left;
    overflow: hidden;
    vertical-align: top;
    width: 336px;
}
div.body .container .images .carousel {
    margin-bottom: 6px;
    margin-top: 8px;
    width: 336px;
}

Qui, il mio HTML;

<div class="images">
    <div id="images-previous">
        <img src="/images/images-previous.jpg" width="24" height="62" alt="Previous" />
    </div>
    <div class="list">
        <ul class="carousel">
            <li>
                <img src="/photogallery/23.jpg" width="44" height="44" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="thumbnail" />
                <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="over" />
                <img src="/images/carousel-image-holder.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="under" />
            </li>
            <li>
                <img src="/photogallery/23.jpg" width="44" height="44" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="thumbnail" />
                <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="over" />
                <img src="/images/carousel-image-holder.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="under" />
            </li> 
            <li>
                <img src="/photogallery/23.jpg" width="44" height="44" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="thumbnail" />
                <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="over" />
                <img src="/images/carousel-image-holder.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="under" />
            </li>
            <li>
                <img src="/photogallery/23.jpg" width="44" height="44" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="thumbnail" />
                <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="over" />
                <img src="/images/carousel-image-holder.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="under" />
            </li>    
            <li>
                <img src="/photogallery/23.jpg" width="44" height="44" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="thumbnail" />
                <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="over" />
                <img src="/images/carousel-image-holder.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="under" />
            </li>
            <li>
                <img src="/photogallery/23.jpg" width="44" height="44" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="thumbnail" />
                <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="over" />
                <img src="/images/carousel-image-holder.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="under" />
            </li>
            <li>
                <img src="/photogallery/23.jpg" width="44" height="44" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="thumbnail" />
                <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="over" />
                <img src="/images/carousel-image-holder.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="under" />
            </li>
            <li>
                <img src="/photogallery/23.jpg" width="44" height="44" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="thumbnail" />
                <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="over" />
                <img src="/images/carousel-image-holder.png" width="49" height="48" alt="Cross Bottle 8.5" Frosted/Amber/Chain/Fleur di Lis" class="under" />
            </li>
            <!--
            <cfset i=1>
                <cfloop condition="i lte images.recordcount">
                    <cfoutput>
                        <li>
                            <img src="#images.thumburl[i]#" width="44" height="44" alt="#images.alt[i]#" class="thumbnail" />
                            <img src="/images/carousel-image-holder-over.png" width="49" height="48" alt="#images.alt[i]#" class="over" />
                            <img src="/images/carousel-image-holder.png" width="49" height="48" alt="#images.alt[i]#" class="under" />
                        </li>
                    </cfoutput>
                    <cfset i=i+1>
                </cfloop>
            </cfset>
            -->
        </ul>
    </div>
    <div id="images-next">
        <img src="/images/images-next.jpg" width="24" height="62" alt="Next" />
    </div>
<div class="clear"></div>

2
C'è qualcosa che impedisce di dare .listun'altezza fissa? Penso che allora funzionerebbe.
— Pekka

2
@Pekka, lo farà, ho controllato. Supponendo che si applichino le regole CSS ( perché l'HTML postato qui non mostra div.bodygli .containerelementi e )
— Gabriele Petrioli

1
Non ha funzionato. Avvolge l'elenco se l'elenco trabocca invece di nasconderlo.
— Darren

1
Come hai <li>ottenuto un layout orizzontale? Ti sei perso mostrarci alcuni CSS? A cosa serve esattamente? Un cursore di immagine?
— Moin Zaman

1
Ciao ragazzi, risulta che non posso usare un menu orizzontale perché il display float o inline si spanderà sempre a causa della larghezza principale. Sto provando un tavolo ora, ma anche questo è un dolore.
— Darren

Risposte:


397

Ok, se qualcun altro ha questo problema, questa potrebbe essere la tua risposta:

Se stai cercando di nascondere elementi con posizionamento assoluto, assicurati che il contenitore di quegli elementi con posizionamento assoluto sia posizionato relativamente.


1
Ho avuto un problema simile con il contenuto relativamente posizionato in un contenitore e avevo bisogno che anche il contenitore fosse relativo. Quindi non si tratta solo di nascondere elementi posizionati in modo assoluto, ma anche di nascondere qualsiasi elemento posizionato. :)
— Chris

10
fantastico - tranne che questo è stupido. overflow: hidden dovrebbe essere nascosto. senza un riferimento astratto alla documentazione qualcuno può fornire una buona ragione per scegliere questo percorso rispetto al percorso che ha più senso?
— user1873073

3
In realtà l'elemento genitore deve solo essere posizionato, il che significa che anche assoluto e fisso sono validi. Fondamentalmente tutto ciò che non è statico.
— Ryan Jenkins,

1
Ottima risposta, ha funzionato anche per il mio scenario. Nel mio caso, il div con overflow: hidden aveva un attributo position: relative. Aggiunta di una posizione: relativa al suo genitore ha risolto il problema.
— Anurag

74

In realtà...

Per nascondere un elemento posizionato in modo assoluto, il contenitore positiondeve essere qualsiasi cosa tranne static. Può essere relativeo fixedin aggiunta a absolute.


1
Per chiunque altro stia ancora riscontrando questo problema: il bambino deve essere staticposizionato alleato, per quanto ne so. L'impostazione position:relativesia per il genitore che per il bambino non funziona.
— Alvin Wan

6

Oltre alle risposte fornite:

sembra che l'elemento genitore (quello con overflow:hidden) non debba essere display:inline. Il passaggio a ha display:inline-blockfunzionato per me.

.outer {
  position: relative;
  border: 1px dotted black;
  padding: 5px;
  overflow: hidden;
}
.inner {
  position: absolute;
  left: 50%;
  margin-left: -20px;
  top: 70%;
  width: 40px;
  height: 80px;
  background: yellow;
}
<span class="outer">
  Some text
  <span class="inner"></span>
</span>
<span class="outer" style="display:inline-block;">
  Some text
  <span class="inner"></span>
</span>


1
scusa questo non ha senso, come hai fatto ad avere overflow con inline? anche la documentazione è chiara: developer.mozilla.org/en-US/docs/Web/CSS/overflow l'overflow si applica solo al block container
— Temani Afif

1
Certo che ha senso. Prova a posizionare l'elemento figlio assoluto con offset negativo. Puoi commettere un errore del genere con elementi inline predefiniti come LIs e SPAN
— Miloš Đakonović

1
@TemaniAfif e Miloš Đakonović .. È corretto, inline-blocko qualsiasi altro tipo di visualizzazione a blocchi , anche se in questo caso, dove l'elemento con overflow: hiddenha float, funziona anche sugli inlineelementi.
— Ason

1
quando aggiungi la posizione assoluta, l'elemento diventa un elemento di blocco, quindi non è coinvolto alcun inline qui
— Temani Afif

2
@LGSon mettiamo il tuo esempio allora, ma ancora non pertinente a questa domanda .. probabilmente dovrebbe essere adatto a un'altra domanda.
— Temani Afif

1

Evidentemente, a volte, dovrebbero essere impostate anche le proprietà di visualizzazione del genitore dell'elemento contenente l'argomento che non dovrebbe finire, ad esempio:overflow:hidden

<div style="overflow: hidden">
  <div style="overflow: hidden">some text that should not overflow<div>
</div>

Perché? Non ne ho idea ma ha funzionato per me. Vedi https://medium.com/@crrollyson/overflow-hidden-not-working-check-the-child-element-c33ac0c4f565 (ignora lo sniping su stackoverflow!)


0

Questo ha funzionato per me

<div style="display: flex; position: absolute; width: 100%;">
  <div style="white-space: nowrap; overflow: hidden;text-overflow: ellipsis;">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer nec odio. Praesent libero. Sed cursus ante dapibus diam. Sed nisi.
  </div>
</div>

Aggiunta position:absolute al contenitore principale lo ha fatto funzionare.

PS: questo è per chiunque cerchi una soluzione per troncare dinamicamente il testo.

EDIT: Questa doveva essere una risposta a questa domanda, ma dal momento che sono correlati e potrebbe aiutare qualcuno su questa domanda, la lascerò qui invece di eliminarla.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.