CSS Radiobuttons positionieren

Joe-B

Cadet 4th Year
Registriert
Aug. 2006
Beiträge
78
Hi,
erstelle im moment ein Benutzerprofil für eine Website, bin aber leider nicht so fit was html/css angeht :/ Die Radiobuttons tanzen immer aus der Reihe. Hab jetzt schon alles mögliche probiert aber es will einfach nicht -.-
Kann mir wer sagen, wie ich die Radiobuttons bündig bekomme und die labels "männlich" "weiblich" daneben?

Thx & Gruß

2rhqxdl.jpg


HTML:
<?php

/* unwichtig */

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1250">
  <meta name="generator" content="PSPad editor, www.pspad.com">
  <link href="design.css" type="text/css" rel="stylesheet" />
  <title>Profil</title>
  </head>
  <body>
    <?php echo $errmsg; ?>
    <?php echo $msg; ?>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method=post name="profileform">
      <label for="vorname">Vorname:&nbsp;*</label> <input type=text name="vorname" value="<?php echo $vorname; ?>">
      <label for="nachname">Nachname:&nbsp;*</label> <input type=text name="nachname" value="<?php echo $nachname; ?>">
      <label for="geburtsdatum">Geburtsdatum:&nbsp;*</label> <input type=text name="geburtsdatum" size=30 value="<?php echo $geburtsdatum; ?>"> <!-- Format: Tag.Monat.Jahr z.B.: 07.03.1978<br>-->  
      <label for="geschlecht">Geschlecht:&nbsp;*</label>
                   <input type="radio" name="geschlecht" value="w" id="w" <?php if($geschlecht == "w"){echo checked;}?>> <!-- <label for="w">Weiblich</label>-->
                   <input type="radio" name="geschlecht" value="m" id="m" <?php if($geschlecht == "m"){echo checked;}?>> <!-- <label for="m">  M&auml;nnlich</label>-->
      <label for="adresse">Adresse:</label> <textarea type=text name="adresse"><?php echo $adresse; ?></textarea>    
      <label for="plz">Postleitzahl:</label> <input type=text name="plz" value="<?php echo $plz; ?>">
      <label for="wohnort">Wohnort:</label> <input type=text name="wohnort" value="<?php echo $wohnort; ?>">
      <label for="telefon">Telefon:&nbsp;*</label> <input type=text name="telefon" value="<?php echo $telefon; ?>">
      <label for="mobile">Mobiltelefon:&nbsp;*</label> <input type=text name="mobile" value="<?php echo $mobile; ?>">
      <label for="branche">T&auml;tigkeit/Branche:</label> <input type=text name="branche" value="<?php echo $branche; ?>">
      <label for="abschluss">Letzter Schulabschluss:</label>  
      <select name="abschluss"> 
      <option value="haupt" <?php if($abschluss == "haupt"){echo selected;}?> >Hauptschule</option>
      <option value="real" <?php if($abschluss == "real"){echo selected;}?> >Realschule, mittlere Reife</option>
      <option value="abitur" <?php if($abschluss == "abitur"){echo selected;}?> >Fachoberschule, Abitur</option> 
      <option value="uni" <?php if($abschluss == "uni"){echo selected;}?> >Hochschule, Universit&aumlt</option>
      </select> 
      <label for="krankheiten">Krankheiten und Allergien:</label> <textarea type=text name="krankheiten"><?php echo $krankheiten; ?></textarea>
      <input type=submit name="speichern" value="Speichern">
      * = Pflichtfeld      
    </form>
  </body>
</html>

HTML:
select {
position: relative;
top: -1.4em;
left: 8em;
display: block;
width: 19em;
border: 1px solid #a5acb2;
}
label {
float: left;
display: block;
width: 10em;
clear: left; /* Umbruch */
margin-top: -1em;
font-weight: bold;
}
label.erstes {
	margin-top: 3em;  /* Abstand */
}

input {
position: relative;
top: -1.4em;
width: 19em;
left: 8em;
display: block;
border: 1px solid #a5acb2;
padding: 2px;
background: #fff;
}
input.senden {
	top: -1em;
	left: 0;
	clear: left; /*wichtig */
	width: 19em;
}
textarea {
	position: relative;
	top: -1.4em;
	left: 8em;
	display: block;
	border:	1px solid #a5acb2;
	padding: 2px;
	width: 19em;
	height: 5em;
}
form{
	margin: 2em 0;
	display: block;
}
 
Ich würde dir die Verwendung einer Tabelle empfehlen:

HTML:
<table>
	 <tr><td>Vorname</td><td><input type=text name="vorname" value="<?php echo $vorname; ?>" /></td></tr>
	 <tr><td>Nachname</td><td><input type=text name="nachname" value="<?php echo $nachname; ?>"/></td></tr>
	 <tr><td>Geschlecht</td><td> <input type="radio" name="geschlecht" value="w" id="w" />Männlich</td></tr>
...

Und bei den Input-Tags das Schließen der Tags "/>" nicht vergessen

Edit:
Tipp: Versuch das Ganze mit der Tabelle mal komplett ohne das Einbinden deiner CSS zu erstellen
 
Zuletzt bearbeitet:
Denke ohne css mit Tables wäre es einfacher, aber eigentlich wollte ich auf Tables verzichten.
Das muss doch auch per css gehen :/
 
abcb12 schrieb:
Ich würde dir die Verwendung einer Tabelle empfehlen
[...]
Tipp: Versuche das Ganze mit der Tabelle mal komplett ohne CSS
Wie bitte? Wir leben in Zeiten des Web 2.0. - Tabellen benutzt man nicht zum Layouten!

Blitzmerker schrieb:
Nur weil es XHTML gibt, muss man es nicht gleich nutzen.
Sondern?


B2T: was ist wenn du die breite rausnimmst? hast du das mal iwo hochgeladen? (wills mir nicht per hand kopieren, speichern, usw)
 
Es ist schon richtig, dass man je nach Anwendung auf Tables verzichten sollte. Normalerweise aber ist für Formulare eine Tabelle IMHO das einfachste und effizienteste, gerade wenn es ich um Standard-Formulare mit dem Format:
Label|Input
Label|Input
etc.
handelt.
 
fel1x. schrieb:
Wie bitte? Wir leben in Zeiten des Web 2.0. - Tabellen benutzt man nicht zum Layouten!


Sondern?


B2T: was ist wenn du die breite rausnimmst? hast du das mal iwo hochgeladen? (wills mir nicht per hand kopieren, speichern, usw)

pmd :)
 
abcb12 schrieb:
Es ist schon richtig, dass man je nach Anwendung auf Tables verzichten sollte. Normalerweise aber ist für Formulare eine Tabelle IMHO das einfachste und effizienteste [...]
einfach != Barriefrei, gut

Wozu gibts Definitonslisten? :)
 
@feli1x.
Warum ist HTML auch noch in HTML5 drin, wenn dein XHTML so schön ist...
Warum schreibt man noch in C wenns C++ gibt? (Z.B. wegen Kernel-Code oder wegen der Geschwindigkeit)
"Sondern?" ist eine sehr knappe und sehr unvollständige Antwort...
Ich hab mich mit meinem Kommentar nur auf deine unvollständige Äußerung bezogen, die bei der Anwendung invaliden Code ergeben hätte.
 
Was würdest Du den vorschlagen, wenn kein HTML5 und kein xHTML?

Tabellen oder was?
 
Da hast du natürlich recht. Schau dir aber mal den HTML-Quelltext der Registrierungsformulare von Google, Facebook, Twitter oder auch ComputerBase an... Durch die Bank werden tables verwendet.
Deswegen, unabhängig davon, dass tables nicht die Musterlösung sind, würde ich die Verwendung letzterer nicht von vornherein komplett ausschließen. Wobei es auch ein Unterschied ist, ob eine komplette Website in eine Tabelle eingepflanzt wird oder eben nur ein statisches Formular.
 
Habs gelöst mit überarbeitetem css und divs im html. Thx für die Tipps.

Tables find ich persönlich nicht so schön, aber denke das ist Geschmacksache.
Hab früher alles mit tables gemacht aber wird Zeit zumindest zu verstehen wie es auch anders geht.
 
Es gibt oft gute Gründe Tabellen zu verwenden:

Immer dann, wenn man die Breite von Elementen nicht 100% vorher weiß (z.b. bei einem Layout, welches viele Sprachen unterstützen soll) wird es ganz ohne Tabellen sehr schwierig oder wenn das Layout datengetrieben dynamisch sein muss bzgl. Anzahl und Größe von Elementen.

Da passiert es dann, dass bei Formularen Labeltexte zu lang sind und somit sind dann die Formularfelder nicht mehr bündig. Mit einer Tabelle würde sich dies von selbst neu ausrichten.

Natürlich gibt es auch hierfür immer eine Lösung, aber die stoßen meistens relative schnell an ihre Grenzen wenn der nächste Sonderfall eintritt oder man ist gezwungen mit Javascript das Layout selber auszurechnen. Also ziemlich suboptimal und wenn man ein Projekt mit Zeitdruck hat, dann bezahlt einem keiner den Extra-Aufwand.


Wogegen man grundsätzlich sein sollte ist das gesamte Layout einer Seite mit Tabellen zu gestalten. Das ist wirklich nicht mehr notwendig.
 
Banthor schrieb:
Immer dann, wenn man die Breite von Elementen nicht 100% vorher weiß (z.b. bei einem Layout, welches viele Sprachen unterstützen soll) wird es ganz ohne Tabellen sehr schwierig oder wenn das Layout datengetrieben dynamisch sein muss bzgl. Anzahl und Größe von Elementen.
Ich denke, für alles gibts auch eine Lösung mit CSS oder ähnlichem

ich bin schon seit ein paar Jahren gegen Tabellen und konnte damit bisher jedes Problem lösen :)

Interssant zu lesen sind die Kriterien des Biene Awards - Barriefreiheit pur :)
Und ich möchte nie einem eingeschränkten Gast (Screenreader, ...) ein Layout in Tabellen zumuten ;)

LG Felix
 
fel1x. schrieb:
Ich denke, für alles gibts auch eine Lösung mit CSS oder ähnlichem

ich bin schon seit ein paar Jahren gegen Tabellen und konnte damit bisher jedes Problem lösen :)

Dann löse mal folgendes ohne Javascript oder Tabellen:

Du hast mehere Spalten deren Inhalte unterschiedlich groß sind. Du weißt vorher nicht welche Inhalte wie groß sein werden. Du willst jetzt, dass alle Spalten genauso hoch sind wie die größte.


Oder diese:

Du hast eine horizontale Navigationsleiste und weißt vorher nicht wieviele Buttons enthalten sein werden. Das Layout schreibt vor, dass alle Buttons immer gleich breit sein müssen. Bei zwei Buttons is die Breite also 50%, bei drei 33,3% usw.


Das sind noch relativ einfache Beispiel, die man in zwei Sätzen schreiben kann. Das Ganze muss natürlich auch in allen gängigen Browsern funktionieren und jetzt noch das Horrorszenario: Der Kunde möchte gegen entsprechend viel Geld, dass IE6 unterstützt wird.
 
Wenn mir ein Kunde sagt, dass er etwas für IE6 haben will, dann ist er ein Ex-Kunde. Irgendwo muss man Grenzen ziehen. IE6 wird von MS nicht mehr unterstützt und sie raten ihn auch nicht mehr zu benutzen.

@Banthor:

Zu deinem 1. Beispiel:

Wie soll erkennbar sein, dass alle Spalten gleich groß sind? Durch eine Hintergrundfarbe?
 
Zuletzt bearbeitet:
Soylent schrieb:
Wenn mir ein Kunde sagt, dass er etwas für IE6 haben will, dann ist er ein Ex-Kunde. Irgendwo muss man Grenzen ziehen. IE6 wird von MS nicht mehr unterstützt und sie raten ihn auch nicht mehr zu benutzen.

So verdient man kein Geld, aber man verliert Kunden.

Wir sagen dem Kunden in dem Fall ganz klar, an welchen Stellen für den IE6 keine trotz Extraaufwand keine pixelgenaue Umsetzung möglich ist. Weiterhin sagen wir dem Kunden ganz klar welchen Aufpreis das bedeuet und der ist i.d.R. erheblich.


Soylent schrieb:
@Banthor:

Zu deinem 1. Beispiel:

Wie soll erkennbar sein, dass alle Spalten gleich groß sind? Durch eine Hintergrundfarbe?

Richtig, die Spalten sollen optisch hervorgehoben werden, meinetwegen durch eine Hintergrundfarbe oder durch eine grafische Umrandung (da wird es dann echt unheimlich).
 
Also ich habe früher auch alles mit Tabellen gemacht und ich mein wirklich alles! Mittlerweile mache ich CSS und bin gerade dabei meine erste CSS only Site zu bauen und es ist gut^^ Also ich glaube man kann mit CSS wirklich alles machen was man will es ist evtl. ein umweg nötig aber man kann alles machen. Allerspätestens wenn CSS3 kommt wird man alles können.
 
Mag sein, dass man dann Kunden verliert. Aber aus Erfahrung weiß ich, dass gerade die Kunden, die solche bescheuerten Extrawünsche haben, diejenigen sind mit denen man nie glücklich wird. Bisher konnte ich allerdings noch alle davon überzeugen, dass für IE6 kein Platz im Internet mehr ist ;)

Zu den Spalten:

Theoretisch geht das mit ein paar Tricks sehr wohl:

HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//DE"
		"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
	<head>
	<link rel="stylesheet" type="text/css" href="style.css" />
	</head>
	<body>
	<div id="container">

<div class="spalte1">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.</div>
<div class="spalte2">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</div>
<div class="spalte3">Lorem ipsum dolor sit amet.</div>
</div>
	</body>
</html>

CSS:

Code:
#container {
height:100%;
color:#ffffff;
background-color:#000000;
float:left;
}

#container div{
display:inline-block;
}

.spalte1, .spalte2, .spalte3 {
width: 200px;
float:left;
padding:1em;
text-align:justify;
}

.spalte3 {
clear:after;}


Wenn du nicht alles in einer Farbe haben willst, dann kannst du der container div auch ein Bild zuweisen, (HxB: 1px x 660px) das entsprechende vertikale Linien drin hat. Das kannst du noch mit einer abschließenden Div inkl. Bild kombinieren, so dass die Tabellen nach unten abschließen.

Mag sein, dass es ein wenig umständlich ist, aber es is Tabellenlos und dynamisch. Zudem könnte man mit der Bildertaktik auch wunderbar barrierefrei abgerundete Ecken einbauen ;)
 
Cool Master schrieb:
Also ich habe früher auch alles mit Tabellen gemacht und ich mein wirklich alles! Mittlerweile mache ich CSS und bin gerade dabei meine erste CSS only Site zu bauen und es ist gut^^ Also ich glaube man kann mit CSS wirklich alles machen was man will es ist evtl. ein umweg nötig aber man kann alles machen. Allerspätestens wenn CSS3 kommt wird man alles können.

Es ist im moment in der Praxis leider eben nicht möglich alles mit CSS zu machen. Mit CSS3 wird noch viel mehr gehen - vllt. sogar alles.

Mit dem derzeit breit verfügbarem CSS geht zwar schon sehr viel, vor allem wenn man keine dynamischen Breiten/Höhen hat, aber eben nicht alles.

Du kannst Dich ja gerne an meinem obigen Beispielaufgaben versuchen :)
 
Zurück
Oben