Supposons que vous ayez un certain style et le balisage:
ul
{
white-space: nowrap;
overflow-x: visible;
overflow-y: hidden;
/* added width so it would work in the snippet */
width: 100px;
}
li
{
display: inline-block;
}
<div>
<ul>
<li>1</li> <li>2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
<li>1</li> <li>2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
<li>1</li> <li>2</li> <li>3</li>
<li>4</li> <li>5</li> <li>6</li>
<li>7</li> <li>8</li> <li>9</li>
</ul>
</div>
Lorsque vous affichez cela. Le <ul>
a une barre de défilement en bas même si j'ai spécifié des valeurs visibles et cachées pour le débordement x / y.
(observé sur Chrome 11 et opéra (?))
Je suppose qu'il doit y avoir des spécifications W3C ou quelque chose qui disent que cela doit arriver, mais pour la vie de moi, je ne peux pas comprendre pourquoi.
MISE À JOUR: - J'ai trouvé un moyen d'obtenir le même résultat en ajoutant un autre élément enroulé autour du ul
. Vérifiez-le.
overflow-x hidden;
il supprime le défilement, mais comme j'ai besoin des éléments li pour masquer la bordure en bas, il donne donc l'effet pointillé souhaité. Je ne comprends pas pourquoioverflow-x: visible
crée une barre de défilement. Cela ne devrait pas afaik.overflow: hidden;
et un enfant inséré autour de l'<ul>
êtreoverflow: visible
.Réponses:
Après quelques recherches sérieuses, il semble que j'ai trouvé la réponse à ma question:
à partir de: http://www.brunildo.org/test/Overflowxy2.html
aussi la spécification W3C dit:
Version courte:
Si vous utilisez
visible
pour ouoverflow-x
ouoverflow-y
et autre chose quevisible
pour l'autre, lavisible
valeur est interprétée commeauto
.la source
overflow-x:visible
coursoverflow-y:hidden
sans un hack parent / enfant? Jolie couchette, OMI.overflow-y: visible
. Boo CSS!un autre hack pas cher, qui semble faire l'affaire:
style="padding-bottom: 250px; margin-bottom: -250px;"
sur l'élément où le débordement vertical se coupe, avec250
autant de pixels que nécessaire pour votre liste déroulante, etc.la source
position: relative
ou l'utilisation de wrappers n'était pas possible, c'était la seule solution qui fonctionnait, même si cela nécessitait également l'ajout de nombreuses marges moches aux éléments enfants à l'intérieur de l'élément que je voulais définiroverflow-x: hidden
pour compenser le hacky rembourrage. Cela m'a sauvé, cependant, merci!À l'origine, j'ai trouvé un moyen CSS de contourner cela lors de l'utilisation du plugin Cycle jQuery. Cycle utilise JavaScript pour définir ma diapositive.Ainsi
overflow: hidden
, lors de la définition de mes images,width: 100%
les images sembleront coupées verticalement, je les ai donc forcées à être visibles avec!important
et à éviter d'afficher l'animation de la diapositive hors de la boîte que j'ai définieoverflow: hidden
sur la div du conteneur de la faire glisser. J'espère que ça marche pour toi.MISE À JOUR - Nouvelle solution:
Problème d'origine -> http://jsfiddle.net/xMddf/1/ (Même si je l'utilise,
overflow-y: visible
il devient "auto" et en fait "scroll".)La nouvelle solution -> http://jsfiddle.net/xMddf/2/ (J'ai trouvé une solution de contournement en utilisant un div wrapper à appliquer
overflow-x
etoverflow-y
à différents éléments DOM comme James Khoury l'a conseillé sur le problème de la combinaisonvisible
ethidden
d'un seul élément DOM.)la source
overflow-x:visible;
etoverflow-y:hidden
. Pas l'inverse.overflow-x
et-y
: violon mis à jour .J'ai rencontré ce problème en essayant de créer une barre latérale positionnée fixe avec du contenu à défilement vertical et des enfants positionnés absolus imbriqués à afficher en dehors des limites de la barre latérale .
Mon approche consistait à appliquer séparément:
overflow: visible
propriété à l'élément de la barre latéraleoverflow-y: auto
propriété au wrapper intérieur de la barre latéraleVeuillez consulter l'exemple ci-dessous ou un codepen en ligne .
la source
auto
au lieu dehidden
.position
J'ai utilisé l'
content+wrapper
approche ... mais j'ai fait quelque chose de différent de celui mentionné jusqu'à présent: je me suis assuré que les limites de mon wrapper ne s'alignaient PAS avec les limites du contenu dans la direction que je voulais être visible .Remarque importante: Il est assez facile d'obtenir l'
content+wrapper, same-bounds
approche du travail sur un navigateur ou d'une autre en fonction de diverses combinaisons de css deposition
,overflow-*
, etc ... mais je ne peut utiliser cette approche pour les obtenir tout correct (Edge, Chrome, Safari,. ..).Mais quand j'avais quelque chose comme:
... tous les navigateurs étaient satisfaits.
la source
Il existe maintenant une nouvelle façon de résoudre ce problème - si vous supprimez la position: relative du conteneur qui doit avoir le débordement-y visible, vous pouvez avoir le débordement-y visible et le débordement-x caché, et vice versa (avoir le débordement- x visible et débordement-y caché, assurez-vous simplement que le conteneur avec la propriété visible n'est pas positionné relativement).
Voir cet article de CSS Tricks pour plus de détails - cela a fonctionné pour moi: https://css-tricks.com/popping-hidden-overflow/
la source