webForumDet fria alternativet

Centrering av DIV i förhållande till yttre

HTML & CSSur HTML, XHTML & CSS

8 svar · 1 121 visningar · startad av Trankan

Medlem sedan okt. 2006129 inlägg
Frågan#1

Hej!

Har utan problem fått de tre inre DIV:arna att lägga sig bredvid varandra, men att få den mellersta att centreras i förhållande till den yttre DIV:en verkar klurigt. Det kan tilläggas att de inre DIV:arnas sammanlagda bredd är mindre än den yttres. Har någon här ett förslag kanske?

<div>
<div>vänster</div>
<div>centrerad</div>
<div>höger</div>
</div>
Medlem sedan juni 2003772 inlägg
#2

Nu vet jag varke bredd eller höjd på dina divar, men jag har i vart fall gjort ett exempel.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<style type="text/css"> 
div.yttre
{width:950px; height:600px;background-color:black;
position:absolute; left:50%;top:50%;margin-left:-475px;margin-top:-300px;}

.left {width:200px; height:500px; border:1px solid black;
background-color:red;position:absolute;left:2px;top:50px}

.center {width:540px; height:500px; border:1px solid black;
background-color:green;position:absolute;left:205px;top:50px}

.right {width:200px; height:500px; border:1px solid black;
background-color:red;position:absolute;right:2px;top:50px}
</style> 
</head>
<body>
<div class=yttre>
<div class=left>vänster</div>
<div class=center>centrerad <br>Alltid centrerad oberoende av upplösning eller fönsterstorlek</div>
<div class=right>höger</div>
</div>
</body>
</html>
Medlem sedan okt. 2006129 inlägg
#3

Ingen av de inre DIV:arna har fast bredd, så att använda absolut positionering är nog inte så bra i det här fallet. Den DIV som sitter i mitten ska inte påverkas utav varken den vänstra eller den högra, utan ska alltid vara horisontellt centrerad i förhållande till den yttre DIV:en oavsett om de andra två har samma bredd eller inte. Med andra ord vill jag att alla de inre DIV:arna ska positioneras i förhållande till den yttre DIV:en trots att de ligger bredvid varandra. Frågan är bara om det går att göra så. :l

Medlem sedan juli 20013 378 inlägg
#4

Trankan skrev:

Ingen av de inre DIV:arna har fast bredd

Hmm... Okej...

Hur tänker du dig bredderna?
Tänker du dig t.ex. den att vänstras bredd skall kunna vara X% av containerbredden och den högras Y% samtidigt som den centrerade i mitten tar upp "max resten" ?

Medlem sedan okt. 2006129 inlägg
#5

jarvklo skrev:

Hmm... Okej...

Hur tänker du dig bredderna?
Tänker du dig t.ex. den att vänstras bredd skall kunna vara X% av containerbredden och den högras Y% samtidigt som den centrerade i mitten tar upp "max resten" ?

Ja, det kan man nog säga. Men DIV:arna kommer inte att ta upp hela containerbredden då de inte är bredare än vad deras innehåll kräver. Därför kommer den centrerade DIV:en att ha en del fritt utrymme till vänster och höger om sig.

Medlem sedan juli 20013 378 inlägg
#6

Hmm...

... och det skall bara vara exakt de fyra divvar du har med i exemplet?
... och ingen av den har någon bredd som relaterar till något annat än sitt innehåll?

Medlem sedan okt. 2006129 inlägg
#7

jarvklo skrev:

Hmm...

... och det skall bara vara exakt de fyra divvar du har med i exemplet?
... och ingen av den har någon bredd som relaterar till något annat än sitt innehåll?

Ja, fyra DIV:ar är i alla fall vad jag tänkt. Jag var nog lite otydlig tidigare, men containern har en fast bredd.

Medlem sedan juli 20013 378 inlägg
#8

OK - då kör vi utefter det jag tror mig förstå av det du beskriver att du vill ha :).

<doctype html>
<meta charset="UTF-8">
<html>
<head>
<title>Ett av jarvklos exempel</title>
</head>

<body>
<h1>Variant 1 - Tabellmetoden</h1>
<div>En tabell har den egenskapen att den ges "auto"-bredd efter sitt innehåll</div>
<div>Kombinera det med centrering av tabellen på sidan med &lt;table align="center"%gt;</div>
<div>(dvs använd den tabell-egenskap för centrering av hela klabbet som inte har motsvarighet i CSS såvitt jag vet)</div>
<div>med absolutpositionering av vänster- och höger-tabeller  och problemet är löst (dock inte som du vill ha det kodmässigt)</div>
<div style="position: relative; width: 800px; border: 1px solid black;">
<table border="1" style="position: absolute; left:0; top:0;"><tr><td><div>vänster</div></td></tr></table>
<table align="center" border="1"><tr><td><div>centrerad</div></td></tr></table>
<table border="1" style="position: absolute; top: 0; right: 0;"><tr><td><div>höger</div></td></tr></table>
</div>

<hr>
<h1>Variant 2 - CSS metoden</h1>
<div> Som du vill ha det, men tyvärr ej fungerande i MSIE&lt;8</div>
<div style="position: relative; width: 800px; border: 1px solid black;">
<div style="position: absolute; left:0; top:0; width: auto; border: 1px solid blue">vänster</div>
<div style="display: table; width: auto; margin: auto; border: 1px solid blue">centrerad</div>
<div style="position: absolute; right:0; top:0; width: auto; border: 1px solid blue">höger</div>
</div>
<hr>
<h1>Hybridvariant</h1>
<div>Hopslagnng av de tu...</div>
<div style="position: relative; width: 800px; border: 1px solid black;">
<div style="position: absolute; left:0; top:0; width: auto; border: 1px solid blue">vänster</div>
<table align="center" border="1"><tr><td><div>centrerad</div></td></tr></table>
<div style="position: absolute; right:0; top:0; width: auto; border: 1px solid blue">höger</div>

</body>
</html>

Testa om jag förstod dig rätt :bire

Medlem sedan okt. 2006129 inlägg
#9

Stort tack för det suveräna exemplet, det var precis så jag ville ha det! :)

245 ms totalt · 3 externa anrop · v20260731065814-full.25f56b17
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
242 ms — hämta tråd, inlägg och bilagor (db)