2017-06-28 2 views
0

Je veux que ma page pour avoir une mise en page de FlexBox, où l'en-tête et le séjour de pied au même endroit, mais le contenu remplit le reste de l'écran. Cependant, en raison de la façon dont ma page est mis en place, je dois utiliser un conteneur dans la zone de contenu principal de mon code. Cela me donne le problème d'une barre de défilement qui ne sont pas du côté de la page où il devrait être, il est plutôt au bord du récipient. Est-ce que quelqu'un peut m'aider soit à placer la barre de défilement là où elle est censée être, soit à me dire pourquoi je ne peux pas le faire comme je le fais et à me donner une solution de rechange viable?L'utilisation d'un FlexBox dans un conteneur d'amorçage me donne des barres de défilement dans les mauvais endroits

Voici l'exemple de travail d'origine sans amorçage:

https://jsfiddle.net/SuperMelons/n2s9xrt0/

HTML:

<div class="mybox"> 
    <div class="myrow myheader"> 
    <p><b>header</b> 
     <br /> 
     <br />(sized to content)</p> 
    </div> 
    <div class="myrow mycontent"> 
    <p> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
    </p> 
    </div> 
    <div class="myrow myfooter"> 
    <p><b>footer</b> (fixed height)</p> 
    </div> 
</div> 

CSS:

html, 
body { 
    height: 100%; 
    margin: 0 
} 

.mybox { 
    display: flex; 
    flex-flow: column; 
    height: 100%; 
} 

.mybox .myrow { 
    border: 1px dotted grey; 
} 

.mybox .myrow.myheader { 
    flex: 0 1 auto; 
} 

.mybox .myrow.mycontent { 
    display: flex; 
    flex-flow: column; 
    flex: 1 1 auto; 
    overflow-y: auto; 
} 

.mybox .myrow.myfooter { 
    flex: 0 1 40px; 
} 

Voici l'exemple qui ne fonctionne pas à cause de le conteneur d'amorçage:

https://jsfiddle.net/SuperMelons/2L5cbt8m/2/

HTML avec Bootstrap:

<div class="mybox"> 
    <div class="myrow myheader"> 
    <p><b>header</b> 
     <br /> 
     <br />(sized to content)</p> 
    </div> 
    <div class="myrow mycontent container"> 
    <p> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
     content<br> 
    </p> 
    </div> 
    <div class="myrow myfooter"> 
    <p><b>footer</b> (fixed height)</p> 
    </div> 
</div> 
+0

assez sûr ceci est impossible avec CSS. Le broswer ajoute des barres de défilement lorsqu'il y a un débordement. Puisque la page ne déborde pas, vous n'avez pas de barres de défilement sur la page. JS pourrait faire quelque chose. –

+0

Une solution simple consiste à définir 'largeur: 100%' 'dans votre règle de mybox', ce qui évite également la requête des médias _bootstraps_ de la largeur fixe applique à certaines tailles d'écran https://jsfiddle.net/2L5cbt8m/6/ – LGSon

Répondre

1

Voulez-vous somethink comme ça?

https://jsfiddle.net/uykf3Lp8/2/

<div class="myrow mycontent"> 
    <div class="container"> 
     content 
    </div> 
</div> 
+0

Oui, ça fonctionne vraiment bien, merci. –

+0

Pour seule réponse avec un code et aucune explication de ce que vous avez fait et pourquoi cela fonctionne, n'est pas une bonne réponse. ... et pas besoin de l'emballage supplémentaire que vous avez ajouté comme vous pouvez le voir dans ma réponse – LGSon