Avatar billede nicolailissau Nybegynder
10. september 2009 - 16:30 Der er 13 kommentarer og
1 løsning

CSS: Border problem

Hej Hej.

Jeg har et lille problem jeg håber i kan hjælpe mig med.

Jeg kan simpelhen ikke forstå hvorfor <p> taggene ikke bliver indkapslet af div-tagget?

Style:

<style type="text/css">
#border {
border:#333333 5px solid;
}
.text_rigth {
float:right;
}
.text_left {
float:left;
}

Koden:

<div id="border">
Noget tekst
<p class="text_left">Billede x af x</p>
<p class="text_rigth"><a href="#">Forrige</a> | <a href="#">Næste</a></p>
</div>

På forhånd tak,
Nicolai Lissau
Avatar billede kgkg Nybegynder
10. september 2009 - 16:54 #1
Hvad med:

.text_rigth {text-align:right;}
.text_left {text-align:left;}
Avatar billede _cyberdude_ Nybegynder
10. september 2009 - 19:04 #2
kgkg har det korrekte svar.
Grunden er at p og div begge er det man kalder block elementer. De har en "naturlig" placering når de plantes på siden, efter hinanden og inden i hinanden, men denne "placering"/struktur bliver ødelagt ved brug af float. Derfor skal float bruges med varsomhed. Den korrekte style du vil bruge i dit eksempel vil være text-align:right.
I dit lille eksempel vil du dog opleve at den udvendige div fylder hele dit vindue, da "text-align: right;" får div'en til at flyde ud. Derfor skal du begrænse div'ens størrelsen via "width", enten i hele px, eller %.
Avatar billede olebole Juniormester
10. september 2009 - 21:28 #3
<ole>

_cyberdude_ >> Du skal nok lige tjekke op på din grundviden og lære lidt mere om CSS, før du prøver at afgøre, hvad det korrekte svar er  ;o)

nicolailissau >> Det korrekte svar er, at når du float'er elementer, tager du dem ud af sidens almindelige flow. De bliver lagt 'ovenpå' flow'et og tager derfor ikke plads op i dette - således som det også er tilfældet ved position:absolute, uden virkemåden for de to properties dog er identisk.

Du kan dog få elementerne til at fylde i flow'et, hvis du clear'er dem:


#border {
    border:#333333 5px solid;
}
.text_rigth {
    float:right;
}
.text_left {
    float:left;
}
.clear {
    width: 0;
    height: 0;
    clear: both;
    overflow: hidden;
}

- og:

<div id="border">
Noget tekst
<p class="text_left">Billede x af x</p>
<p class="text_rigth"><a href="#">Forrige</a> | <a href="#">Næste</a></p>
<div class="clear"></div>
</div>



http://www.w3.org/TR/CSS2/visuren.html#float-position
http://www.w3.org/TR/CSS2/visuren.html#flow-control

/mvh
</bole>
Avatar billede olebole Juniormester
10. september 2009 - 21:31 #4
=)
Avatar billede _cyberdude_ Nybegynder
10. september 2009 - 21:39 #5
Øh... Olebole.. Ikke for at starte en diskution men hvad er lige forskellen på det jeg skriver og det du skriver????? Du skriver det med nogle andre ord, men vi siger sgu da begge to det samme, dog anbefaler du en clear both hvorimod jeg mente en text-align ville være fint...


Grunden er at p og div begge er det man kalder block elementer. De har en "naturlig" placering når de plantes på siden, efter hinanden og inden i hinanden, men denne "placering"/struktur bliver ødelagt ved brug af float.

mod

at når du float'er elementer, tager du dem ud af sidens almindelige flow. De bliver lagt 'ovenpå' flow'et og tager derfor ikke plads op i dette


Jeg bruger ordet placering/struktur hvor du bruger ordet flow?
Avatar billede olebole Juniormester
10. september 2009 - 21:52 #6
Teksterne skal stå i samme højde. Det gør de jo ikke, hvis du bruger text-align. Det kan kun gøres med float.

Du skriver:
    "men denne "placering"/struktur bliver ødelagt ved brug af float. Derfor skal float bruges med varsomhed."

Nej, der intet, der bliver 'ødelagt' - og der er ingen grund til at være særlig varsom med brugen. Spørgeren ønsker jo netop at ændre sidens naturlige flow, hvilket er helt almindeligt i moderne webdesign. Man skal bare vide, hvordan man kontrollerer flow - og dermed vide, at float og clear hænger uløseligt sammen og udgør et umådelig stærkt værktøj.

Dette er det rene vrøvl:
    "I dit lille eksempel vil du dog opleve at den udvendige div fylder hele dit vindue, da "text-align: right;" får div'en til at flyde ud. Derfor skal du begrænse div'ens størrelsen via "width", enten i hele px, eller %."

Et div er et block element og fylder som sådan altid hele den tilgængelige bredde - med mindre denne eksplicit er sat. Dets bredde har intet med justeringen af teksten at gøre.
Avatar billede _cyberdude_ Nybegynder
10. september 2009 - 22:02 #7
Edit:
Jeg vil gerne pointerer at olebole's svar giver umiddelbart det bedste resultat. Men dette afhænger jo af hvad der ønskes. Spørgsmålet gik ud på hvorfor p taggene ikke bliver i div'en, og den del af spørgsmålet svarede vi i hvertfald begge to det samme på?

En clear both lader begge p blive på samme "linje", hvorimod en textalign vil lade dem være på hver sin "linje" og fylde hele linjen ud. Prøv en solid border på text_right og text_left og du vil se resultatet og forskellene.
Avatar billede _cyberdude_ Nybegynder
10. september 2009 - 22:10 #8
Ok, men der står ingen steder at de skal stå i samme højde.
Du siger da selv man skal vide hvordan man kontrollerer flow, derfor kan man ikke bare uden viderer smide floats ind hvor det passe en, hvis man ikke ved hvordan man bruger dem korrekt. Er det ikke det samme som at man skal være varsom med floats hvis man ikke ved hvordan man bruger dem korrekt?... Ikke varsom som at jorden går under, men forkert brug af floats giver jo netop nogle resultater i en browser og andre resultater i andre browsere.

Jeg skrev det med at han skulle begrænse div'en, da jeg ikke går ud fra at det færdige resultat skal være at noget står helt til venstre og forrige og næste linksene står ca. 1600pixels længere henne. Jeg giver dig ret i at det ikke skyldtes text-align: left som jeg skrev, det er noget sludder.
Avatar billede olebole Juniormester
10. september 2009 - 22:33 #9
Din kamp virker lettere desparat! Du skriver:
    "Er det ikke det samme som at man skal være varsom med floats hvis man ikke ved hvordan man bruger dem korrekt?... Ikke varsom som at jorden går under, men forkert brug af floats giver jo netop nogle resultater i en browser og andre resultater i andre browsere."

Jo, du skal passe på, for du ved ikke, hvordan float virker - men det implicerer ikke, man skal passe på. Man skal - som med alt andet - bare vide, hvordan man bruger værktøjet ... og at clear uundgåeligt hører med til brugen af float.

Forkert brug af en CSS property giver altid en anden virkning, end intentionen, men float giver netop ikke forskelligt resultat i forskellige browsere uden efterfølgende clearing

Spørgeren har skrevet to P elementer og floated dem henholdsvis left og right. Derudover har han lagt et div med border udenom.

Spørgeren synes tydeligt tilfreds med resultatet af hans anstrengelser med én undtagelse: Border'en lægger sig ikke udenom de to elementer.

Havde det været spørgerens mening, at de to tekster skulle stå på hver sin linje, går jeg ud fra, han besidder begavelse nok til at spørge, hvordan han kan få teksterne til at stå på to linjer.

Man skal anstrenge sig for at misforstå spørgeren  =)
Avatar billede nicolailissau Nybegynder
10. september 2009 - 23:15 #10
Tak for svar.

Jeg ved ikke om jeg har været for uklar i min beskrivelse af det jeg ønsker, men meningen er at de to tekster skal stå på samme linje.

Jeg har selv prøvet med text-align, men kom også frem til resultatet at teksterne bliver separeret i to linjer. Derfor er dette ikke en løsning.

Jeg siger tak for deltagelse _cyperdude_ men tildeler olebole point da han kom med den løsning jeg kunne bruge.

Mvh
Avatar billede nicolailissau Nybegynder
10. september 2009 - 23:49 #11
Jeg har lige et kort tilføjelses spørgsmål.

Hvordan kan jeg placere noget tekst i midten, stadig på samme linje?
- er ikke ligefrem nogen css haj :)
Avatar billede olebole Juniormester
10. september 2009 - 23:58 #12
Du har ikke mulighed for at float'e et element i center. Så skal du give dine elementer faste bredder
Avatar billede nicolailissau Nybegynder
11. september 2009 - 00:15 #13
Ok. Takker for det hurtige svar.
Avatar billede olebole Juniormester
11. september 2009 - 00:20 #14
Selvtak - og tak for points  =)
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
Kurser inden for grundlæggende programmering

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