[HTML / CSS] Wie dieses Formular erstellen?

Cyperfriend

Der ohne Avatar
Registriert
14 Juli 2013
Beiträge
1.123
Edit: Da noch keine Antwort kam editiere ich den Beitrag und den dazugehörigen Quellcode. Das Problem der Ausrichtung habe ich behoben.
Ich habe folgendes Formular mit klassischen Tabellen-Elementen erstellt. Sieht soweit ganz gut aus:
Anhang anzeigen 25511

Nun will ich diese Tabelle aber erstellen OHNE das ich dabei das klassische HTML-Tabellenelement verwende. Wie kann ich das erreichen?
Bislang sieht das Ergebnis so aus:
Anhang anzeigen 25512
Man sieht jetzt, was fehlt:
1) Tabelle hat zwischen den Zeilen einen doppelt so dicken Strich wie Außen.
2) Kein Strich zwischen den Zellen
3) Anordnung nebeneinander funktioniert nicht. (Hier kann keine allgemeine Regel vorgegeben werden, da ich später auch Zeilen habe, wo wirklich nur ein <label> und ein <inpput>-Feld rein kommen, da das <input>-, bzw. <select>Feld zu viel Platz benötigen wird.)
4) Ich will einen automatischen Farbwechsel zwischen den Zeilen (zwei Farben). Es folgen noch weitere <fieldset>-Elemente und ich will, dass immer mit der gleichen Farbe begonnen wird.

HTML:
[src=html4strict]
<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Formulare</title>
<link rel="stylesheet" type="text/css" href="formulare.css">
</head>

<body>

<!-- Anfang Formular -->
<div>
<form action="" name="">
<!-- Anfang Hardware -->
<fieldset>
<legend>Hardware</legend>
<p>
<label for="ComputerHersteller">Hersteller</label>
<input type="text" name="ComputerHersteller" id="ComputerHersteller" style="float:left;">

<label for="ComputerModell">Modell</label>
<input type="text" name="ComputerModell" id="ComputerModell">
</p>

<p>
<label for="Grafikkarte">Grafikkarte</label>
<input type="text" name="Grafikkarte" id="Grafikkarte" style="float:left;">

<label for="Soundkarte">Soundkarte</label>
<input type="text" name="Soundkarte" id="Soundkarte">
</p>
</fieldset>
<!-- Ende Hardware -->

<!-- Anfang Speichern -->
<fieldset>
<p>
<input type="submit" name="speichern" value="Speichern">
</p>
</fieldset>
<!-- Ende Speichern -->
</form>
</div>
<!-- Ende Formular -->

</body>
</html>
[/src]

CSS:
[src=css]
@charset "utf-8";
/* CSS Document */

/* Grundeinstellungen */
* {
margin:0;
padding:0;
background-color:e9e9e9;
font-family:Arial;
font-size:12px;
color:#000;
}

/* Formulareinstellungen */
form {
background-color:#e9e9e9;
width:550px;
margin-left:auto;
margin-right:auto;
}

/* Fieldset-Überschrift */
legend {
font-weight:bold;
}

/* Absatz */
p {
border:1px solid #000;
border-collapse:collapse;
}

/* */
label {
margin-left:15px;
width:110px;
display:block;
float:left;
}
[/src]

Wäre super, wenn ihr mir weiterhelfen könntet.
 
Zuletzt bearbeitet:
Wie weit soll deine Browserünterstützung denn reichen? Der Internet Explorer ab Version 8 unterstützt z.B. die -Eigenschaft table – Damit wäre die meisten deiner Probleme sicher lösbar. Ein anderer Ansatz könnte auch eine Kombination aus floats und negativen margin-Werten sein.
 
Zuletzt bearbeitet:
<p> sind nicht für solche Zwecke gedacht. p kennzeichnet einen Paragraphen/ Textabschnitt, verwende stattdessen <div>

Zu deinem Problem: Du musst die Weite (width) auf etwas weniger als die halbe zur Verfügung stehende Länge (width) setzen und float left bzw right hinzufügen. (So kannst du Spalten erstellen.)

Den automatischen Farbwechsel bekommst du über das Pseudoattribut nth-child(2n+1) hin. Such dazu einfach mal bei google nach einer ausführlichen Erklärung.
 
  • Thread Starter Thread Starter
  • #4
<p> sind nicht für solche Zwecke gedacht. p kennzeichnet einen Paragraphen/ Textabschnitt, verwende stattdessen <div>
Geändert

Zu deinem Problem: Du musst die Weite (width) auf etwas weniger als die halbe zur Verfügung stehende Länge (width) setzen und float left bzw right hinzufügen. (So kannst du Spalten erstellen.)
Habe ich nicht kapiert, aber ich habe ja eine Lösung gefunden, Siehe mein editierter Beitrag oben.

Den automatischen Farbwechsel bekommst du über das Pseudoattribut nth-child(2n+1) hin. Such dazu einfach mal bei google nach einer ausführlichen Erklärung.
Danke, hat bestens funktioniert.

Übrig bleibt jetzt nur noch der doppelte Tabellenrahmen, den ich einfach nicht weg bekomme. Das mit den Linien zwischen den Zellen muss nicht mehr sein. Das Formular sieht auch so gut aus. Bestenfalls zwischen dem Eingabefeld von Hersteller und dem Label Modell, bzw. entsprechend dem Eingabefeld von Grafikkarte und dem Label Soundkarte könnte eine optische Trennung gut passen, wobei ich mir da auch nicht so sicher bin.

Ich poste den bislang angepassten Code nicht, da es im Prinzip nur eine CSS-Ergänzung ist, die mit der übrig gebliebenen Problematik nichts zu tun hat. Ich poste aber am Ende das gesamte Formular als Tutorial, da sich genau solche Formulare als Beispiel nur schwer / nicht im Internet finden.
 
Das mit dem doppelt so dicken Rahmen kommt dadurch zustande, dass du 2 div hast, die beide je oben und unten einen Rahmen haben.
Das heißt, der untere Rahmen des ersten div und der obere Rahmen des zweiten div liegen unmittelbar übereinander und es erscheint, als wäre es ein dicker Rahmen.
Das Problem kannst du lösen indem du mit den Pseudoattributen not und last arbeitest:

[src=css]div.bordered {
border: 1px solid #000;
}

div.bordered:not(last-child){
border-bottom: none!important;
}[/src]


[src=html5]<div class="bordered">Zeile 1</div>
<div class="bordered">Zeile 2</div>
<div class="bordered">Zeile 3</div>
<div class="bordered">Zeile 4</div>[/src]


Zeile 1 hat überall außer bottom einen Rahmen (oben, links, rechts)
Zeile 2 hat überall außer bottom einen Rahmen (oben, links, rechts)
Zeile 3 hat überall außer bottom einen Rahmen (oben, links, rechts)
Zeile 4 hat einen Rahmen (oben, unten, links, rechts)

Dadurch liegt überall nur ein Rahmen.
 
  • Thread Starter Thread Starter
  • #6
Geht das auch ohne Klassen / IDs zu verwenden? Würde das HTML-Grundgerüst gerne so sauber wie möglich halten.
 
Das mit dem doppelt so breiten Strich lässt sich entweder über ein negatives margin mit derselben Größe wie der Außenlinie oder durch das Weglassen der Außenlinie unten und einem last-child { border-bottom }.

EDIT:
Geht das auch ohne Klassen / IDs zu verwenden? Würde das HTML-Grundgerüst gerne so sauber wie möglich halten.
Ja, einfach weglassen. Dann musst du aber irgendwo außenrum einen eindeutigen Selektor finden. Also z.B. header > fieldset > div
 
Ja, es geht auch ohne. Ich wollte es hier nur eindeutig machen. ;)
 
Zurück
Oben