153 votes

Comment faire fonctionner la propriété CSS "overflow" avec la valeur "hidden" ?

J'ai du mal avec overflow: hidden .

En gros, j'essaie de masquer le débordement d'une liste non ordonnée qui se trouve dans un fichier de type <div> .

Je ne sais pas pourquoi ça ne fonctionne pas.

Au lieu de le cacher, il fait passer ma liste d'une disposition horizontale à une disposition verticale.

La liste non ordonnée est un carrousel et le conteneur est une liste.

Voici mon code 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;
}

Tiens, mon 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 votes

Y a-t-il quelque chose qui parle contre le fait de donner .list une hauteur fixe ? Je pense que cela fonctionnerait alors.

2 votes

@Pekka, c'est le cas, j'ai vérifié. En supposant que les règles CSS s'appliquent ( parce que le HTML affiché ici ne montre pas le div.body et le .container éléments )

1 votes

Ça n'a pas marché. Il enveloppe la liste si elle déborde au lieu de la cacher.

499voto

Darren Points 2788

Ok, si quelqu'un d'autre a ce problème, ceci peut être votre réponse :

Si vous essayez de masquer des éléments positionnés de manière absolue, assurez-vous que le conteneur de ces éléments positionnés de manière absolue est positionné de manière relative.

1 votes

J'ai eu un problème similaire avec un contenu positionné de manière relative dans un conteneur et j'avais besoin que le conteneur soit également relatif. Ainsi, il ne s'agit pas seulement de masquer les éléments positionnés de manière absolue, mais aussi de masquer tous les éléments positionnés, comme cela semble être le cas :)

4 votes

En fait, l'élément parent doit seulement être positionné, ce qui signifie qu'absolu et fixe sont également valables. En fait, tout ce qui n'est pas statique.

1 votes

Excellente réponse, qui a également fonctionné pour mon scénario. Dans mon cas, le div avec overflow:hidden avait un attribut position:relative. L'ajout d'une position:relative à son parent a réglé le problème.

83voto

rwollr Points 60

En fait...

Pour masquer un élément positionné en absolu, le conteneur position doit être n'importe quoi sauf static . Il peut être relative ou fixed en plus de absolute .

1 votes

Pour tous les autres qui rencontrent encore ce problème : l'enfant doit être static allié positionné, pour autant que je puisse dire. Réglage position:relative à la fois au parent et à l'enfant ne fonctionne pas.

16voto

Charles Goodwin Points 31

De toute évidence, parfois, les propriétés d'affichage des parent de l'élément contenant la matière qui ne doit pas déborder doit également être réglé sur overflow:hidden également, par exemple :

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

Pourquoi ? Je n'en ai aucune idée mais ça a marché pour moi. Voir https://medium.com/@crrollyson/overflow-hidden-not-working-check-the-child-element-c33ac0c4f565 (ignorez les sarcasmes de stackoverflow !)

7voto

Miloš Đakonović Points 1516

En plus des réponses fournies :

il semble que l'élément parent (celui avec overflow:hidden ) ne doit pas être display:inline . Passer à display:inline-block a fonctionné pour moi.

.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>

2voto

jedierikb Points 4066

Si vous jouez avec <SPAN> alors c'est peut-être ici que vous devez chercher de l'aide : Cacher le dépassement de SPAN

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X