CSS 100% de largeur, mais éviter de barre de défilement
C'est probablement une variation de quelque chose qui a été résolu des dizaines de fois mais CSS me fait vraiment sentir comme un imbécile.
Je suis en train de construire un widget qui peut être positionné et dimensionné dans une variété de façons. C'est une jolie mise en page simple - hauteur fixe-tête, fixe-hauteur du pied de page, et un corps qui occupe le reste de l'espace. L'ensemble de la largeur et de la hauteur varie. La teneur de l'organisme en a besoin pour faire défiler. J'ai le conteneur global, en-tête, pied de page, et le corps de dimensionnement ok.
Mais ce que je veux, c'est pour le corps pour faire défiler lorsqu'il en a besoin, SANS se rétracter du contenu vers la gauche lorsque la barre de défilement apparaît. C'est, je veux le corps à être aussi large qu'il le peut MOINS la barre de défilement qui serait là si elle avait besoin de faire défiler, de sorte que quand il N'est plus nécessaire de faire défiler il n'y a pas de psy. En effet, ce que je veux c':
| - - - unknown width - - -|
+--------------------------+
| content |*|
| might |*|
| scroll |*|
+--------------------------+
Je veux que le contenu qui pourrait faire défiler jusqu'à être aussi large qu'il le peut MOINS le potentiel de la barre de défilement largeur (|*| région).
Ce que j'ai maintenant est quelque chose comme ceci:
<div id="content" style="position: absolute; overflow-y: auto; width: 100%">
<div id="scrollContent" style="???">
</div>
</div>
J'ai essayé les marges, rembourrage, même %-largeur d'à l'intérieur de la plupart des div et de tous les "faire la maj' chose. J'ai aussi besoin de ce travailler dans FF3, IE7/8 et (fantasme?) IE6.
- Quelqu'un aurait-il une idée de comment mettre en œuvre cette? Semble être un problème commun.
- Regardez cette. il peut être utile. stackoverflow.com/questions/13028584/...
Vous devez vous connecter pour publier un commentaire.
Utilisation
overflow: scroll
au lieu deoverflow: auto
- qui forcent une barre de défilement pour apparaître toujours.overflow: scroll;
etwidth: 100%;
et l'élément est encore trop large (il y a une barre de défilement horizontale).Ajouter un autre wrapper à l'intérieur de l'élément qui aura le overflow:auto style et fixé à environ 18px plus étroit. La barre de défilement doit apparaître dans cette 18px écart.
width: -moz-calc(100% - 16px);
Pourquoi ne pas afficher toujours les barres de défilement, même quand il n'est pas nécessaire de faire défiler?
Vous pouvez atteindre cet objectif par la mise en
overflow:scroll;
pour le conteneur.J'ai eu un problème similaire que j'ai utilisé ci-dessous la solution, je ne suis pas sûr si cela peut être une solution à ce que vous voulez faire, mais il pourrait l'être.
J'ai eu un div qui redimensionnée automatiquement le contenu, puis le parchemin a été ajouté, la diminution de l'intérieur, de sorte que la table dans l'enveloppa de texte, au lieu de faire le conteneur d'autant plus large. L'effet indésirable est considéré dans le dessous de Vieux exemple, si le textarea est redimensionnée à la baisse et le défilement s'affiche.
Mon laid solution était d'ajouter une div à l'intérieur de l'overflow-y:auto-div, qui avait display:inline-block, et pour ajouter encore un autre petit inline-block div après elle, qui était de 19 pixels de large (réservé pour la barre de défilement) et un pixel de haut. Que peu div apparaît à côté du véritable div lorsque le navigateur redimensionné la div du contenu, et lorsque la barre de défilement apparaissent, la petite div est poussé vers le bas sous le réel de la div, et le réel div garde sa avec. Il va provoquer un pixel en bas "de la marge", mais j'espère ne pas un problème. Lorsque aucune barre de défilement ppears, il y a 19 pixel de l'espace inutilisé à côté de la vraie div, comme décrit dans la Question.
(Ultrapériphériques div est juste là pour reproduire mon setup/problème).
Vieux:
Nouveau:
Le problème est qu'une fois que vous passez la souris sur le conteneur et la barre de défilement s'affiche, puis le contenu de la largeur se rétrécit. Donc, même si vous utilisez un conteneur imbriqué, dont la largeur est égale à la contenant moins de son barre de défilement, la largeur du conteneur imbriqué permettra également de réduire.
Une solution consiste à augmenter la taille du contenu par la largeur de la barre de défilement sur le vol stationnaire. Voici une solution qui n'a pas besoin d'utiliser toutes les emballages extérieurs (
categoryCont
est le défilement du conteneur et chaquemenuBlock
est l'un des éléments à faire défiler):Un problème avec le ci-dessus est que la largeur de la barre de défilement est un peu différente dans les différents navigateurs. L'un des points suivants devraient vous aider:
Mettre le contenu en valeur absolue, avec un retrait à gauche comme une valeur absolue
changements à
Vous avez besoin de CSS et de jQuery(Première étape est la même)
changements à