[html/css] verticaal centreren, zonder buiten beeld vallen

Pagina: 1
Acties:
  • 221 views sinds 30-01-2008
  • Reageer

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Ik wil een divje verticaal (en horizontaal) centeren en kreeg daar problemen mee. Heb uiteraard gezocht en ben zo'n beetje iedere website van elke (wanabe) guru afgestruind en bijna allemaal gaven ze de oplossing die ik zelf ook al had: de bovenkant op 50% zetten en dan met een negatieve margin (die de helft is van de totale hoogte) de boel goed zetten. De code:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
 <title>centreer test</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <style type="text/css">
 body {
    width: 100%;
    height: 100%;
    margin: 0%;
    padding: 0%;
 }
#container {
    position: absolute;
    width: 400px;
    height: 300px;
    top: 50%;
    left: 50%;
    margin: -200px -150px;
    background-color: pink;
    border: 1px solid red;
 }
 </style>
</head>

<body>

<div id="container">
    ik sta gecentreerd
</div>

</body>
</html>

voorbeeld

Dat werkt in princiepe ook wel, maar heeft 1 hele vervelende eigenschap: als het scherm te klein wordt (zie voorbeeld, en maak je scherm dan maar eens kleiner), dan valt ie buiten je beeldscherm, zonder dat je kunt scrollen (wat opzich ook logisch is).

Dat wil ik dus niet... na veel gezoek en niets kunnen vinden heb ik deze oplossing bedacht:
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
 <title>centreer test</title>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <style type="text/css">
 body {
    width: 100%;
    height: 100%;
    margin: 0%;
    padding: 0%;
 }
#centeren {
    border-collapse: collapse;
    width: 100%;
    height: 100%;
    }
#container {
    width: 400px;
    height: 300px;
    background-color: pink;
    border: 1px solid red;
 }
 </style>
</head>

<body>

<table id="centeren">
<tr>
 <td align="center" valign="middle">
    <div id="container">
        ik sta gecentreerd
    </div>
 </td>
</tr>
</table>

</body>
</html>

voorbeeld

Maar daar ben ik om twee redenen ook niet blij mee:
1. Nou moet ik alsnog een tabel voor opmaak gebruiken en vind ik dus niet zo mooi staan
2. Dit werkt niet in Mozilla Firefox (en Safari geloof ik ook niet). Opzich valt dat op te lossen door er HTML 4.01 Transitional van te maken, maar ja.. zo dwalen we steeds verder af.

Mijn vraag:
Hoe kun je XHTML valide en cross-browser horizontaal centeren, zonder dat je tegen het probleem van het eerste voorbeeld aanloopt?
Wie het weet mag het zeggen :-) Ik heb dus echt m'n best gedaan om het te vinden - want het lijkt me zo'n triviaal probleem - maar zonder succes dus

[ Voor 10% gewijzigd door marty op 03-03-2006 17:36 ]


Verwijderd

min-height op je block er omheen lost het op voor de meeste browsers, maar voor ie blijft het prutsen
http://www.student.oulu.fi/~laurirai/www/css/middle/

overigens is er niets mis met een HTML doctype natuurlijk, je gebruikt immers nu ook html (door xhtml als html te serveren)

  • Sappie
  • Registratie: September 2000
  • Laatst online: 08-04 10:58

Sappie

De Parasitaire Capaciteit!

Er is laatst nog een topic over geweest, wellicht dat je daar nog wat nuttigs uithaalt: Verticaal centreren DIV lukt niet

Specs | Audioscrobbler


  • Rowanov
  • Registratie: Februari 2004
  • Niet online

Rowanov

Kop eens wat anders...

Je blok staat trouwens horizontaal niet in het midden; het is makkelijker om het zo te doen:
Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
body {
  text-align: center;
  }

#container {
  margin: 0 auto;
  width: 400px;
  text-align: left;
  }

HTML:
1
2
3
4
5
<body>
  <div id="container">
    Datgene wat je horizontaal wil centreren.
  </div>
</body>

  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Verwijderd schreef op vrijdag 03 maart 2006 @ 17:43:
min-height op je block er omheen lost het op voor de meeste browsers,
maar ik wil het dus in alle browsers werkend hebben :)
maar voor ie blijft het prutsen
Ik moet de body dus een min-height geven in IE? Of ik doe iets niet goed, of dat werkt gewoon niet, want ik blijf hiermee problemen houden.
Tja, daar staan een hele verzameling oplossing, waarvan ik de meeste al geprobeerd had, maar niets helpt. Het is geen text, dus daarvoor vallen heel veel oplossingen al af. De display-property op table zetten was ik met de search ook al tegengekomen, maar die is niet cross-browser compatibel en de negative margin is zoals bekend dus ook geen goede oplossing.
overigens is er niets mis met een HTML doctype natuurlijk, je gebruikt immers nu ook html (door xhtml als html te serveren)
maar ik wil het graag werkend krijgen in xhtml. zo'n relatief simpel concept moet toch mogelijk zijn in xhtml :?
Sappie schreef op vrijdag 03 maart 2006 @ 17:55:
Er is laatst nog een topic over geweest, wellicht dat je daar nog wat nuttigs uithaalt: Verticaal centreren DIV lukt niet
Die was ik al tegengekomen en daar komen ze met de negative margin oplossing (mijn eerste voorbeeld) die dus niet de oplossing is.

Verwijderd

zolang je als html serveert is heel die xhtml verkleedpartij toch niet nodig (want het wordt toch als html behandeld)

als je wel als xhtml serveert dan waarom drukmaken om IE (want die kan er dan niks mee)

en soms is een table oplossing gewoon het makkelijkste, ik zou er in dit geval iig niet heel erg om malen

  • Sappie
  • Registratie: September 2000
  • Laatst online: 08-04 10:58

Sappie

De Parasitaire Capaciteit!

marty schreef op vrijdag 03 maart 2006 @ 18:26:
maar ik wil het graag werkend krijgen in xhtml. zo'n relatief simpel concept moet toch mogelijk zijn in xhtml :?
Wat Mophor hiermee wil zeggen is dat XHTML niet de opvolger is van HTML. De voordelen van het gebruik van XHTML boven HTML wegen bovendien niet op tegen de nadelen. Verder als je het dan toch verstuurd als zijnde text/html kun je net zo goed gebruik maken van een HTML(4.01 strict zo je wil) DTD. beetje dubbelop nu.. waren tegelijkertijd aant posten :)
Die was ik al tegengekomen en daar komen ze met de negative margin oplossing (mijn eerste voorbeeld) die dus niet de oplossing is.
Om mezelf even te quoten uit dat topic.
Sappie schreef op maandag 20 februari 2006 @ 15:11:
Er is met de huidige CSS implementatie helaas geen nette en eenduidige manier om verticaal te centreren. Er zijn wel wat workarounds voor, zoals het gebruik van negatieve margins icm position: absolute, het gebruik van display: table-cell of het gebruik van een tabel.
Ben bang dat er dus geen eenduidige oplossing voor is en dat je dus een afweging moet maken.

[ Voor 6% gewijzigd door Sappie op 03-03-2006 18:47 ]

Specs | Audioscrobbler


  • marty
  • Registratie: Augustus 2002
  • Laatst online: 27-03-2023
Sappie schreef op vrijdag 03 maart 2006 @ 18:46:
Om mezelf even te quoten uit dat topic.

[...]

Ben bang dat er dus geen eenduidige oplossing voor is en dat je dus een afweging moet maken.
Met geen eenduidige oplossing bedoel je dus eigenlijk gewoon geen :(
Oké, dan laat ik het varen.
Wat Mophor hiermee wil zeggen is dat XHTML niet de opvolger is van HTML. De voordelen van het gebruik van XHTML boven HTML wegen bovendien niet op tegen de nadelen. Verder als je het dan toch verstuurd als zijnde text/html kun je net zo goed gebruik maken van een HTML(4.01 strict zo je wil) DTD. beetje dubbelop nu.. waren tegelijkertijd aant posten :)
Verwijderd schreef op vrijdag 03 maart 2006 @ 18:42:
zolang je als html serveert is heel die xhtml verkleedpartij toch niet nodig (want het wordt toch als html behandeld)

als je wel als xhtml serveert dan waarom drukmaken om IE (want die kan er dan niks mee)
Nou, ik sta zelf opzich wel achter XHTML. Ik merk dat het in bijv. Firefox een stuk sneller rendert en alleen dat al kan ik een reden vinden het te gebruiken. Dat IE er niets mee doet, dat moet IE weten, maar dat vind ik nog geen reden om te laten bepalen wel of geen XHTML te gebruiken. Op die manier komt er nooit vooruitgang. Het is een goeie manier jezelf te dwingen nette HTML te maken vind ik. En daarnaast - ik weet dat dit een beetje slap argument is, maar toch - staat het voor klanten natuurlijk interessant als je kunt zeggen dat jouw code XHTML valide is.
en soms is een table oplossing gewoon het makkelijkste, ik zou er in dit geval iig niet heel erg om malen
Ik ben het met je eens dat als er echt geen andere oplossing is dan een tabel, dat je die dan moet gebruiken. Maar dat was ik dus met dit topic aan het onderzoeken.
Maar vind het wel bizar te moeten constateren dat het voor zoiets simpels toch nog nodig is.

Verwijderd

- in xhtml als text/html kan/mag je dezelfde "niet nette HTML" maken als in html, simpelweg omdat het html is
- xhtml != semantiek (structurele semantiek, voordat iemand weer over relationele semantiek gaat praten :P. want dat heeft html sowieso niet echt)
- ik ben erg benieuwd naar je tijdmetingen in fx, want het maakt geen bal uit of je een xhtml doctype of een html doctype boven je code zet, de code is in beide gevallen even lang (op een paar bytes na vd doctype dus), wordt door dezelfde (html) parser geparsed en bevat ook niet meer of minder fouten wat eventueel zou kunnen schelen
- klanten die aankomen met "ik wil een xhtml" site moeten eerst een les krijgen in wat xhtml nu is en dat het niet werkt in IE, de klant is wel koning, maar niet de coder, dus die beslissing ligt niet bij hun (vind ik)

verder zijn er dus wel oplossingen voor je probleem, vereist alleen een wijziging waar jij niet echt wat in ziet (html maken), maar wat er dus eigenlijk echt geen klap toe doet voor je performance of wat dan ook

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 12:22

crisp

Devver

Pixelated

XHTML als XHTML heeft bovendien in de meeste browsers het nadeel dat het niet meer incrementeel gerendered kan worden (het moet immers eerst in z'n geheel door de XML-parser heenkomen om te kijken of het wel well-formed is).
En over valid XHTML: de meeste XHTML sites zijn niet eens well-formed en degene die het wel zijn zullen vaak met een XHTML-mimetype niet meer correct werken omdat het verder gaat dan alleen syntax: namespaces en andere effecten op de DOM, effecten op CSS (canvas), de manier waarop met HTML-comments wordt omgegaan, document.write en innerHTML wat niet meer werkt etcetera.
Als je al XHTML als text/html serveert let dan ook op of je wel voldoet aan de aanbevelingen in appendix C

Over XHTML als 'opvolger' van HTML; dat is pertinent niet waar; XHTML(1) is eigenlijk gewoon een XML-serialization van HTML zodat je HTML als XML-application kan toepassen (ipv een SGML-application). Een XML-application stel echter nog meer eisen hence de andere verschillen (wat eigenlijk meer nadelen zijn dan voordelen).
HTML5 zal bijvoorbeeld ook de mogelijkheid krijgen tot XML-serialization (dat zal dan waarschijnlijk XHTML5 gaan heten ;))

[ Voor 25% gewijzigd door crisp op 04-03-2006 11:13 ]

Intentionally left blank

Pagina: 1