Avatar billede BTEngineer Novice
25. november 2011 - 13:51 Der er 32 kommentarer og
1 løsning

Problem med top-formular

Hej.

Jeg sidder med noget CSS som driller mig afsindig meget. Jeg er ved at lave en "top bar", som skal fungere som loginformular. Dvs. alle inputs, en submit og to buttons skal stå på linje.

HTML:
<div id="slideDiv">
<center>
<?php
    if(isset($_SESSION['brugernavn']) AND isset($_SESSION['kodeord'])) {
            include("brugere/accessbar.php");
    } else {
?>

<div id="barlogin">
<form action="?side=brugere/login&ac=ok" method="POST">
<label>Email:</label>
<input type="text" class="logininput" name="brugernavn" value="Brugernavn" onclick="this.value=''">

<label>Kodeord:</label>
<input type="password" class="logininput" name="kodeord" value="Kodeord" onclick="this.value=''">

    <button type="submit" name="logon" class="logpa"></button>

    <button type="button" class="glemtkode" onclick="location.href='?side=glemtkode'"></button>
    <button type="button" class="opretbruger" onclick="location.href='?side=brugere/opret_bruger'"></button>
</form>   
</div>
</center>
</div>

CSS koden er:
#slideDiv {
    background-image: url('../images/topbarbg.png');
    background-repeat: repeat-x;
    width: 100%;
    height: 36px;
    position: absolute;
    display: inline;
   
}

#barlogin {
    color:#202020;
    font-size:11px;
    height: 36px;
    width: 100%;
}

.logininput {
    background-color:#fff !important;
    border:1px solid #d5e3e9;
    color:#202020;
    width:140px;
    font-size:11px;
    height: auto;
}

.logpa {
background-image: url('../images/logpa.gif');
width: 61px;
height: 23px;
border: 0px;
}

.logpa:hover {
background-image: url('../images/logpa_aktiv.gif');
width: 61px;
height: 23px;
border: 0px;
}

.glemtkode {
background-image: url('../images/glemtkode.gif');
width: 75px;
height: 23px;
border: 0px;
}

.glemtkode:hover {
background-image: url('../images/glemtkode_aktiv.gif');
width: 75px;
height: 23px;
border: 0px;
}

.opretbruger {
background-image: url('../images/opretbruger.gif');
width: 90px;
height: 23px;
border: 0px;
}

.opretbruger:hover {
background-image: url('../images/opretbruger_aktiv.gif');
width: 90px;
height: 23px;
border: 0px;
}

Problemet er at det ikke står på linje. Knapperne skal være button for at de står på linje. Hvis jeg ændre submit knappen til <input type="submit">... så står de ikke længere på linje. Jeg har fået det til at se godt ud i Safari og Chrome, men det ser skidt ud i IE og heller ikke for godt i Firefox. Hvordan får jeg dog det til at fungere?

Se evt. på http://tinyurl.com/bu5gbbs

// Henrik
Avatar billede claes57 Ekspert
25. november 2011 - 14:08 #1
style="display:inline;"
på det ting, hvor den skifter linje
Avatar billede BTEngineer Novice
25. november 2011 - 14:11 #2
Det forstår jeg ikke helt? :)
Avatar billede claes57 Ekspert
25. november 2011 - 14:39 #3
<input type="submit" style="display:inline;">
Avatar billede BTEngineer Novice
25. november 2011 - 15:01 #4
Det lader ikke til at det virker.

Tekstfelterne ser heller ikke ud til at vil stå på linje.
Avatar billede claes57 Ekspert
25. november 2011 - 15:07 #5
du skal nok have den style på alle felter...
Avatar billede BTEngineer Novice
25. november 2011 - 15:11 #6
Det har jeg lige forsøgt. Det står den til nu - desværre ingen effekt. Jeg kan ikke se hvad problemet er..
Avatar billede claes57 Ekspert
25. november 2011 - 15:29 #7
i style.css
#barlogin {

tilføj
    vertical-align:middle;

det ser ud til, af der er en topmargin på 3px på nogle elementer, men ikke overalt.
Avatar billede BTEngineer Novice
25. november 2011 - 15:33 #8
#barlogin {
    color:#202020;
    font-size:11px;
    height: 36px;
    width: 100%;
    vertical-align:middle;
    margin-top: 5px;
}

Således ser den ud nu. Desværre stadig ikke rigtig nogen forskel. Hvis jeg gør margin-top større, så vil mine tekstbokse kommer længere ned, men automatisk følger min input/buttons med.
Avatar billede claes57 Ekspert
25. november 2011 - 15:55 #9
der skulle ikke være margin-top i #barlogin (det var ikke det, jeg mente i hvert fald)
se på
.logininput {
    background-color:#fff !important;
    border:1px solid #d5e3e9;
    color:#202020;
    width:140px;
    font-size:11px;
    height: auto;

drop
    height: auto;
den kan måske genere, og laver jo intet.
Avatar billede BTEngineer Novice
25. november 2011 - 16:04 #10
Det er rigtigt.

Men der sker stadig ingen ændringer.

CSS-koden ser således ud nu:

#slideDiv {
    background-image: url('../images/topbarbg.png');
    background-repeat: repeat-x;
    width: 100%;
    height: 36px;
    position: absolute;
    display: inline;
}

#barlogin {
    color:#202020;
    font-size:11px;
    height: 36px;
    width: 100%;
    vertical-align:middle;
}

.logininput {
    background-color:#fff !important;
    border:1px solid #d5e3e9;
    color:#202020;
    width:140px;
    font-size:11px;
    height: 20px;
    margin-top: 5px;
}

.logpa {
background-image: url('../images/logpa.gif');
width: 61px;
height: 23px;
border: 0px;
display: inline;
}

.logpa:hover {
background-image: url('../images/logpa_aktiv.gif');
width: 61px;
height: 23px;
border: 0px;
}

.glemtkode {
background-image: url('../images/glemtkode.gif');
width: 75px;
height: 23px;
border: 0px;
}

.glemtkode:hover {
background-image: url('../images/glemtkode_aktiv.gif');
width: 75px;
height: 23px;
border: 0px;
}

.opretbruger {
background-image: url('../images/opretbruger.gif');
width: 90px;
height: 23px;
border: 0px;
}

.opretbruger:hover {
background-image: url('../images/opretbruger_aktiv.gif');
width: 90px;
height: 23px;
border: 0px;
}
Avatar billede claes57 Ekspert
25. november 2011 - 16:52 #11
jeg er løbet ud for idéer...
Avatar billede BTEngineer Novice
25. november 2011 - 16:55 #12
Det er i orden. Tak fordi du prøvede :)
Avatar billede NielsErikP Mester
25. november 2011 - 22:31 #13
Hej...
Er det dine input felter "logininput" og Dine buttons "logpa", "glemtkode" og "opretbruger"... Du vil have til at stå på samme linje inden for den aktuelle div "barlogin"..???
Så kan du evt. prøve at give dem en "float:left".. og mon så ikke du kan styre mellemrummet mellem dem med "margin-left/right"...
Bare et forslag!!
Avatar billede olebole Juniormester
26. november 2011 - 00:48 #14
<ole>

Hvilken DTD bruger du? Din kode validerer kun mod noget Transitional-snask. Transitional flavours er kun beregnet til at øve sig med en kort overgang, indtil man har lært at kode Strict - og da det er over 10 år siden, den seneste Transitional flavour udkom, giver det ikke rigtig mening at bruge i dag  =)

Input felter skal ligge i et block element. De må ikke ligge 'løst' i formen

/mvh
</bole>
Avatar billede BTEngineer Novice
26. november 2011 - 16:11 #15
Tak for jeres svar.

NielsErikP-> Jeg prøvede med float: left, og det virkede! Fantastisk. Det står nu meget pænt. Jeg vil bare gerne have det centreret.

Olebole-> Jep, jeg havde ikke tænkt over min doctype. Jeg har ændret den til følgende nu:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" http://www.w3.org/TR/html4/strict.dtd">

I et block element? For at tage et eksempel, så er min opret lavet således:
<div id="opret">
<h1>Opret gratis en bruger</h1>
    <form method="POST" action="?side=brugere/opret_bruger">
   
    <label for="email">Email:</label>
    <input type="text" name="email"><br />
   
    <label for="kodeord">Vælg kodeord:</label>
    <input type="password" name="passworda"><br>

    <label for="gentagkode">Gentag kodeord:</label>
    <input type="password" name="passwordb"><br><br>
       
    <input type="submit" name="opret" class="submit-button" value=" ">
      </form>
</div>

De ligger godt nok løst inde i "<div id='opret'>", men gør det noget? Hvilket element skal jeg ligge dem i? Noget du kan vise? :-)
Avatar billede olebole Juniormester
26. november 2011 - 21:18 #16
Den er stadig proppet med fejl! Du skal lægge dine formfelter ind i block elementer, som f.eks. DIV:

<div><input type="text" name="email"></div>

Desuden er alle dine for attributter forkerte. De skal referere til en ID på en formkontrol - og <br /> er ikke lovlig syntaks i HTML. Det hedder <br>.

Valider altid dine dokumenter hos W3C
Avatar billede olebole Juniormester
26. november 2011 - 21:32 #17
Med float:left får du ikke centreret elementerne vertikalt. Det gør du derimod med vertical-align:middle - f.eks:

#barlogin * {
    vertical-align: middle;
}

- med din oprindelige kode. Med koden fra indlæg #15 er det naturligvis #opret  =)

Indsætter man white space mellem inline elementer vil det altid resultere i horisontalt mellemrum mellem dem - f.eks:

<input type="text">
<input type="text">

Midlet hedder som altid:

<input type="text"><input type="text">

- eller bare:

<input type="text"><input
type="text">

Hvis du lærer, hvordan elementer opfører sig i det almindelige dokument flow, vil du ikke have problemer med at styre dem. Du kan tidsnok blive tvunget til at ændre det naturlige flow - f.eks. med float eller positionering - men undgå det, sålænge opgaven uden problemer kan løses med opstilling i naturligt flow. Så undgår du at bakse med følgevirkningerne af at ændre flow'et  *o)
Avatar billede NielsErikP Mester
26. november 2011 - 23:49 #18
Hej...
NielsErikP-> Jeg prøvede med float: left, og det virkede! Fantastisk. Det står nu meget pænt. Jeg vil bare gerne have det centreret.

Du vil gerne have det centreret... Tror det er oldschool at bruge <center></center>...
Tror istedet for du skulle prøve at lægge en div omkring de ting du gerne vil have centreret og så give dine div's en width...
Altså læg en div omkring dine input felter og buttons... Så giv den en width og en margin:auto... og så skal din div .barlogin[b] selvfølgelig også have en [b]width..

Håber du kan bruge det :-)
Avatar billede olebole Juniormester
26. november 2011 - 23:59 #19
Begrund også dine label elementer for dig selv. Hvad er det, de skal gøre for din kode?
Avatar billede BTEngineer Novice
28. november 2011 - 15:00 #20
Hej igen.

Tak for jeres fyldestgørende svar!

Jeg glemmer ofte at validerer mine dokumenter. Jeg skal ændre mine vaner. Er det også forbudt at lave /> på meta-tags osv? Jeg gør det, fordi jeg har læst, at man også skal afslutte enkeltstående elementer ligesom <br>, da man ikke skriver <br></br>, skriver man <br />. Men det er måske forkert antaget?

Jeg har netop prøvet vertical-align:middle; Men den sørger vel egentlig blot for at elementerne står midt på min topbar (altså lodret)? Margin:auto; reagerede mine elementer heller ikke på, men så lavede jeg en margin-left: 330px; og nu står de i midten - er det okay at gøre det på denne måde?

Står det fornuftigt i jeres browsere?

Olebole -> Ja, jeg ved faktisk ikke hvorfor jeg har skrevet <label>. Hvad er bedst at benytte til den tekst der står ved felterne? Man kan vel bruge <p>, <label> osv. Det er selvfølgelig til at styre teksten.

Jeg sætter stor pris på jeres hjælp! Tak!

// Henrik
Avatar billede olebole Juniormester
28. november 2011 - 16:13 #21
W3C havde omkring årtusindeskiftet den opfattelse, at markup kode til web skulle være XML-kompatibelt, og de udfærdigede derfor standarden for XHTML. Først kom XHTML 1.0, som i virkeligheden blot var en ganske lille udvidelse af HTML 4.01 - og ikke 'ægte' XHTML. Dernæst kom XHTML 1.1, som i langt højere grad lignede 'ægte' X(HT)ML.

Der var dog meget store problemer med at få brugbar XHTML implementeret på WWW. Et forsvindende lille fåtal udviklere gad sætte sig ind i, hvad standarden gik ud på - og krævede af koderen. Derfor var det i XHTML'ens storhedstid langt under 1% af samtlige XHTML dokumenter på nettet, der faktisk overholdt standarden - og derfor blev parsed af browserens XML-parser. Over 99% blev parsed af HTML parsere som mere eller mindre tilfældig tag-soup.

Derudover stod det klart, at teknologien meget vanskeligt kunne hænge sammen med kravet om bagudkompatibilitet i forhold til allerede bestående HTML dokumenter på WWW. Dette, sammen med det faktum at XHTML stod i vejen for den udvikling branchen generelt ønskede, gjorde, at der blev oprettet et alternativ til W3C: WHATWG (Web Hypertext Applications Technology Working Group), som arbejdede med et projekt, de kaldte HTML 5.

I sommeren 2009 besluttede W3C derfor at nedlægge gruppen, der arbejdede med udviklingen af XHTML 2 - og nøjes med at færdiggøre de sidste stumper af XHTML 1.0 og 1.1. I stedet oprettede W3C HTML 5 gruppen, som inddrog en del af de mest centrale og fremtrædende WHATWG-folk.

I XML skal alle tags lukkes, hvilket gør det væsentligt lettere for en parser at finde rundt i dokumentets struktur. Til tags/elementer uden indhold må man dog bruge lukningen <TAG_NAME /> - hvilket modsvarer formen <TAG_NAME></TAG_NAME>.

HTML bygger på SGML (Standard Generalized Markup Language) - en markup standard fra midten af 80'erne med rod tilbage i 60'erne. Her betyder <TAG_NAME /> dog noget helt andet. Det kaldes i SGML et NET-enabling start tag. Her betyder f.eks. <TAG_NAME/noget/ nemlig det samme som <TAG_NAME>noget</TAG_NAME>.

I HTML bør <br /> derfor tolkes som <br>> - altså et break efterfulgt af '>'. Det er der ingen browsere, der overholder - men dette er ikke desto mindre den korrekte tolkning af en 'XML-lukning' i HTML. I HTML hedder det blot <br>. For sjov kan du jo prøve at validere <p/noget/ i et HTML 4.01 dokument. Den glider helt glat igennem  *o)

Puha ... jeg håber, du stadig hænger på, for det her bliver da en laaaang omgang. Jeg tager lige horisontal/vertikal centrering og labels i et nyt indlæg  :D
Avatar billede olebole Juniormester
28. november 2011 - 16:33 #22
vertical-align:middle betyder én ting på TD-elementer - men noget helt andet på alle andre elementer. Sættes den på en TD, centreres cellens indhold vertikalt. Sættes den derimod på et hvilket somhelst andet element, centreres dette vertikalt i forhold til sine omgivelser. Prøv f.eks. denne kode:

<img src="http://www.eksperten.dk/images/eksperten_logo.gif" alt="" style="vertical-align:middle">
<span style="vertical-align:middle">noget</span>

På den måde kan du altså få dine elementer i topbaren til at ligge vertikalt centreret i forhold til hinanden ... ikke verticalt centreret i topbaren!

margin-left:320px er ikke en god måde at centrere noget på. Det kræver, browseren altid har samme bredde. Brug i stedet:

<div style="width:400px;margin:0 auto">noget</div>

- ret selv de 400px til et realistisk tal. Fidusen er at sætte top- og bundmargin til et eller andet tal (her 0px) - og 'auto' i siderne. Herved fordeles den overskydende 'luft' ligeligt i begge sider (= elementet centreres horisontalt).

Tekst, som hænger sammen med en formkontrol, kan lægges i et label element. Korrekt brugt vil det resultere i, at feltet får fokus, når brugeren klikker på teksten (input type=text). Er der tale om en checkbox eller radio, vil det pågældende element blive checked.

Er label elementet og det tilhørende input hjemmehørende i to forskellige elementer (f.eks. to tabelceller), knyttes de sammen med en ID:

<td><label for="foo">noget:</label></td>
<td><input id="foo" type="checkbox"></td>

Ligger de derimod i samme element, kan du nøjes med at neste dem:

<label>noget: <input type="checkbox"></label>
Avatar billede olebole Juniormester
28. november 2011 - 16:36 #23
Du får lige vertical-align eksemplet en gang til  =)

<img src="http://www.eksperten.dk/images/eksperten_logo.gif" alt="" style="vertical-align:middle">
<span style="vertical-align:middle">noget</span>
Avatar billede olebole Juniormester
28. november 2011 - 16:40 #24
- og husk, du selv udtrykte tilfredshed med fyldestgørende svar. Så må du også tage de essays, det medfører *LoL*
Avatar billede NielsErikP Mester
28. november 2011 - 21:59 #25
Hej..
#20:
"Margin:auto; reagerede mine elementer heller ikke på.."

Er det sådan noget lignende, du gerne vil have :
  http://www.nielsgjern.dk/epson/Centrer.html

Så skal du bare gøre som følgende :


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
<head>
    <title>
        Centrering af elementer
    </title>

<style type="text/css">
.div1 {
    background: red;
        width: 990px;
    height: 600px;
}
.div2 {
    background: yellow;
    width: 500px;
    height: 50px;
    margin: auto;   
}
</style>   
</head>

<body>

    <div class="div1">
        <div class="div2">

        <form action="" method="POST">
            Email:
            <input type="text" class="logininput" name="" value="" onclick="">
            Kodeord:
            <input type="password" class="logininput" name="" value="" onclick="">
            <button type="submit" name="logon" class="logpa"></button>
            <button type="button" class="glemtkode" onclick=""></button>
            <button type="button" class="opretbruger" onclick=""></button>
        </form>   

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




Bare et eksempel, håber du kan bruge det.
Avatar billede olebole Juniormester
28. november 2011 - 22:33 #26
@NielsErikP: Koden skal formodentlig skrives i 4.01 Strict - og validere mod denne. Se #16
Avatar billede NielsErikP Mester
28. november 2011 - 22:55 #27
@olebole.. jaaaah... men det var da også bare for at give et eksempel på hvad jeg skrev i #18.. For folk kan jo ikke se , hvad jeg tænker.. vel ole ?? :-)
Om manden staver sit remoulade remulade er vel ik mit problem.. men jeg prøver da at hjælpe med de 2.720 point jeg har... Jeg siger jo ik glem det fordi folks tanke gang ikke lige passer mig.
Avatar billede olebole Juniormester
29. november 2011 - 02:20 #28
Det er der ingen af os, der gør - men det troede jeg egentlig var uddebatteret
Avatar billede NielsErikP Mester
29. november 2011 - 21:50 #29
Hej..
Fint nok olebole..Afsluttet!!
Prøvede lige at finde en strict doctype og validere mit eksempel i #25... Men så var det pludseligt ikke lovligt/validt at have input og buttons tags i form elementer...
Men eller viste eksemplet sig i #25 ens i browseren både i strict og loose.
Avatar billede olebole Juniormester
29. november 2011 - 23:32 #30
Det, der er HTML 4.01 standarden, er HTML 4.01 Strict. Transitional flavours af de forskellige standarder er ment som overgansfænomener ("Transitional"), som er beregnet på en kort overgangsfase, til den egentlige standard er blevet lært og indarbejdet.

Med HTML 4.01 fra omkring 1997/98 ændredes BODY elementets "magiske" status, hvilket bl.a. betød, at inline elementer skulle indlejres i block elementer, når de skulle ligge i BODY elementet.

Her kan du se, hvad BODY måtte indeholde i HTML 3.2 fra 1996/97 - og her kan du se, hvad det må indeholde i HTML 4.01.

HTML 3.2:
<!ENTITY % body.content "(%heading | %text | %block | ADDRESS)*">
... ...
<!ELEMENT BODY O O  %body.content>

HTML 4.01:
<!ELEMENT BODY O O (%block;|SCRIPT)+ +(INS|DEL) -- document body -->

Læg mærke til, at 3.2 tillader "løs" text, block elementer, H og ADDRESS elementer.

4.01 tillader kun block elementer, SCRIPT, INS og DEL elementer (de to sidste er dog lidt specielle, da de både kan optræde som inline og block elementer).
Avatar billede NielsErikP Mester
30. november 2011 - 00:09 #31
Hej..
Jamen så må jeg jo nok også prøve at begive mig over i Html 4.01 strict ... Man kan vel lige så godt få det in med modermælken, men så kan det godt være der er en vis hjemmeside der skal bygges lidt om.. :-)
Avatar billede BTEngineer Novice
10. februar 2012 - 12:28 #32
Undskyld den sene tilbagemelding!

Tak for de gode svar!

Så vidt jeg husker, ønsker OleBole ikke point, er der en anden der ønsker at smide et svar i så fald? ;-)

// Henrik
Avatar billede NielsErikP Mester
11. februar 2012 - 01:20 #33
Svar :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester