2010-11-13 8 views
2

Très bien, donc c'est fondamentalement la question habituelle "comment centrer verticalement avec CSS", mais avec quelques captures.Centrage vertical, hauteur inconnue, autre contenu sur la page

  1. Pas de Javascript. HTML et CSS seulement. CSS3 est correct tant qu'il est raisonnablement bien supporté par les navigateurs d'aujourd'hui.

  2. Le contenu de l'élément, et donc sa hauteur, n'est pas connu. Cela peut aller de quelques dizaines à quelques centaines de pixels. À l'avenir, je pourrais même avoir un script ajoutant et supprimant des éléments à l'intérieur, de sorte qu'il peut changer de hauteur lorsque l'utilisateur interagit avec lui.

  3. Il y a un autre contenu sur la page - une barre de navigation à gauche et un menu en haut. Ceux-ci doivent être accessibles.

L'approche que je l'ai utilisé est la méthode des trois conteneurs div en utilisant l'affichage: table-cell, comme indiqué à: http://www.jakpsatweb.cz/css/css-vertical-center-solution.html cela résout les problèmes 1 et 2, mais pas 3.

http://imgh.us/vcenter.jpg montre le design et le problème. La boîte jaune est le conteneur le plus à l'intérieur. Les boîtes pointillées rouges et vertes autour de la page entière (qui sont devenues quelque peu floues en raison de l'encodage JPEG) sont respectivement les conteneurs les plus à l'extérieur et au milieu. (Le pied de page déplacé est une question distincte ...)

Le problème avec cette mise en page est que les conteneurs externes couvrent toute la page, ce qui rend impossible de cliquer sur la barre de navigation, car elle est maintenant "sous "ces conteneurs. Z-index peut les déplacer vers le bas, mais il devient alors impossible de cliquer sur quoi que ce soit à l'intérieur de la boîte rouge, car il est maintenant "sous" la boîte de contenu principale de la page. (XHTML ne permet qu'un seul élément dans le corps < >, donc je l'ai juste enveloppé dans un <div>.) Même si les deux conteneurs externes ont un index z: -100 et le conteneur interne a z-index: 200, il finit toujours sous la boîte de contenu principal pour une raison quelconque. (J'ai essayé différents attributs de position.) La seule solution que j'ai vue est une nouvelle propriété CSS3, pointer-events, qui me permettrait en théorie de faire passer les événements à travers les conteneurs transparents comme je m'y attendais; Cependant, cela semble assez récent et pas encore supporté par la plupart des navigateurs en dehors de SVG, et j'imagine que j'aurais les mêmes problèmes qu'avec Z-index. Je souhaite que l'élément se trouve au centre de la page et non au centre de la zone de contenu (ignorant les barres de navigation dans le calcul de la position). Le placement du conteneur dans la zone de contenu n'est donc pas une solution idéale. (J'utilise aussi ce style sur la page de connexion, qui n'a pas de navbars, et il semblerait étrange que les éléments centrés soient centrés par rapport à une barre de navigation qui n'est pas toujours visible.)

En résumé, ce dont j'ai besoin est de centrer, sans utiliser Javascript, un élément de hauteur inconnue sur une page avec d'autres contenus sur ses bords, sans couvrir le contenu avec un calque invisible (et donc le rendre non cliquable).

+0

Ces « prises » sont presque identiques au dilemme d'habitude. – Ben

Répondre

-1

Allez sur ce lien. Très bien documenté et facile css façon de le faire.

http://www.wpdfd.com/editorial/thebox/deadcentre4.html

+0

J'ai juste joué avec ça pendant un moment et je n'arrive toujours pas à trouver un moyen de le faire fonctionner. Cet exemple utilise un élément à hauteur fixe et un positionnement de pixel. Je ne peux pas faire ça; mes éléments sont de hauteur variable. Le meilleur que j'ai réussi est celui-ci: http://imgh.us/vcenter2.png – Rena

+0

Juste donc apparemment nous ne pouvons pas avoir de sauts de ligne dans les commentaires. Quoi qu'il en soit, dans cette image, le conteneur externe est positionné en haut: 50%, à gauche: 50%; puis le conteneur du milieu utilise margin-top: -50% et margin-left: -50% pour, en théorie, le pousser à gauche et à la hausse d'exactement la moitié de la taille du parent (et donc au milieu de la page). Au lieu de cela, pour une raison quelconque, il finit là-haut. – Rena

+0

L'exemple lié concerne un élément de hauteur connue. La question était pour un de hauteur inconnue. –

2

Bien que ce soit évidemment une question ancienne et l'OP a sans doute résolu ce problème, je pensais que je voudrais ajouter un lien vers write-up merveilleux de Chris Coyier sur la façon de traiter cette question pour les futurs wayfarers besoin d'une solution similaire.

http://css-tricks.com/centering-in-the-unknown/

+0

Brillant! Merci d'avoir partagé. Semble fonctionner correctement dans Chrome 27 et IE 10 ... assez bon pour ce que je travaille en ce moment! –

Questions connexes