PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fragen zu CSS


Gast
2007-10-06, 10:49:24
Hallo :)

Also ich habe da ein paar Anfänger fragen zu CSS. Ich hab mich nämlich mal etwas damit beschäftigt und ganz simpel angefangen:



<html>
<head>

<style type="text/css">

div#container
{
width:500px;
height:250px;
margin-left: auto;
margin-right: auto;
background-color: #0099CC;
border: 1px solid #000000;
}

</style>
</head>
<body>

<div id="container">
hallo
</div>

</body>
</html>





1.) Soweit so gut, es wird also eine zentrierte blaue Box mit den Textinhalt "hallo" erzeugt. Jetzt würde ich gerne zwischen "hallo" und Boxenrand einen kleinen Abstand einfügen.
Also dachte ich, ein "padding: 20px;" in die Containerdefinition müsste reichen. Das Ergebnis: der Abstand von 20px existiert zwar, aber nicht weil der Text weiter nach innen Richtung Boxenmitte geschoben wurde, sondern weil die Box außenrum größer wurde, obwohl ihre Höhe und Breite doch eindeutig vorgegeben ist...
Wenn ich den Text in ein <span>-Tag packe und span dann mit margin: 20px; definiere, funktioniert alles (also praktisch genau der umgekehrte Weg, "von innen heraus"). Warum verhält sich das so?

2.) Wir erweitern das ganze etwas:



<html>
<head>

<style type="text/css">

div#container
{
width:360px;
margin-left: auto;
margin-right: auto;
background-color: #0099CC;
border: 1px solid #000000;

}

div#links
{
float: left;
width:150px;
height:200px;
margin: 20px 0px 20px 20px;
background-color: #000000;

}


div#rechts
{
float: right;
width:150px;
height:200px;
background-color: #000000;
margin:20px;


}

</style>

</head>
<body>


<div id="container">

<div id="links">
bla
</div>

<div id="rechts">
blub
</div>


</div>
</body>
</html>





Was gezeichnet werden soll: 2 schwarze Rechtecke, die von einem großen Rechteck umschlossen werden und jeweils den Abstand 20px haben (untereinander und zum großen).

Die 2 schwarzen Rechtecke werden auch gezeichnet, mit dem Abstand 20px...
Nur das große Rechteck hat die Höhe von ca. 2 Pixel und umschließt somit garnichts, nur die Ränder sind eben sichtbar.
Klar, ich habe für das Große Rechteck auch keine Höhe angegeben, aber dann müsste es doch normalerweise mindestens so hoch sein wie sein Inhalt verlangt? Wenn ich eine Box ohne Höhenangabe mache und etwas Text hineinschreibe ist die Box ja auch automatisch so hoch, dass der Text darin Platz hat...


Vielen Dank schonmal

Tiamat
2007-10-06, 13:09:10
Hi,
zum Padding: Du musst die Paddingangabe zur Breite dazuzählen. Sowohl links, rechts , als auch oben und unten.
Kannst du ja auch verschiedene Arten einschränken z.b
padding: 10px 20px 10px 20px;
oder padding-left: padding-right
Bei fast allen Browsern ist die resultierende Breite = Breitenangabe + padding links , padding rechts.
außer beim Explorer ist die resultierende Breite die Breitenangabe.
Er zieht dann das Padding von deiner Breitenangabe ab!

Desweiteren fehlt deiner Darstellung nur noch die Höhenangabe des #Containers, dann funktioniert das so wie du möchtest.

Ich hätte da auch mal ne Frage..
Gibt es eigentlich eine Möglichkeit, dem Parser klarzumachen, dass wie in dem Beispiel hier die Divs #links und #rechts ein Unterelement im Div# Container ist, so dass überflüssige Angaben zur Positionierung wegfallen.
Gruß
Tiamat

DanMan
2007-10-06, 13:11:46
1. Ist eben so. http://de.selfhtml.org/css/formate/box_modell.htm

2. Das kommt durch das "float". Dadurch "schweben" die 2 Boxen quasi über der Seite, und nehmen keinen Platz mehr im #container ein. Wenn du nach der rechten Box z.B. noch ein div reinpackst, das dann "clear:both" als CSS Regel hat, dann wird es so sein, wie du es erwartet hattest.
Ich hätte da auch mal ne Frage..
Gibt es eigentlich eine Möglichkeit, dem Parser klarzumachen, dass wie in dem Beispiel hier die Divs #links und #rechts ein Unterelement im Div# Container ist, so dass überflüssige Angaben zur Positionierung wegfallen.
Gruß
Tiamat
Versteh die Frage zwar nicht ganz, aber du kannst natürlich das machen:
#container #links {}
#container #rechts {}
So gesehen lönntest du auch das schreiben:
html body #container #links {}
html body #container #rechts {}

Tiamat
2007-10-06, 13:20:41
Danke,
das würde also bedeuten, dass sich sämtliche Angaben auf #links innerhalb #container beziehen ?
Und im Html Part geb ich dann <div id="links"> ein ?

DanMan
2007-10-06, 20:37:40
Danke,
das würde also bedeuten, dass sich sämtliche Angaben auf #links innerhalb #container beziehen ?
Und im Html Part geb ich dann <div id="links"> ein ?
Ja. Du könntest sogar das hier machen:
<html>
<head>
<style type="text/css">
div#container {...}
div#container div.spalte {...}
div#container div.links {...}
div#container div.rechts {...}
</style>
</head>

<body>
<div id="container">
<div class="spalte links">bla</div>
<div class="spalte rechts">blub</div>
</div>
</body>
</html>

PatkIllA
2007-10-07, 08:14:04
Bei der CSS Interpretation auch an die beiden Modi der aktuellen Browser denken.
http://www.heise.de/ix/artikel/2004/03/136/