flexible content

Status
Niet open voor verdere reacties.

willem008

Gebruiker
Lid geworden
28 sep 2007
Berichten
792
Goede dag
Ik heb op een site een zoek venster waar uit gegevens uit een database gehaalt worden.
als ik op zoek druk zonder iets in te typen geeft hij alle data uit de database dat is goed.

Maar waar ik nu mee zit de data wordt getoont in div infozoek die staat in het content en die weer in de hoofdcontainer
nu rekt de div infozoek wel mee met de data maar het content en de hoofdcontainer niet,
Ik het al de hoogte in de style weggehaalt maar dan gaat het ook niet goed.

Heeft dit mischien met de positie relatief te maken.

http://kortebaandatabase.nl/joep/werkmap/zoek.php
 
Laatst bewerkt:
Hoi Willem,
Met het volgende recept werkt het bij mij goed in FF:


  • #hoofdcontainer geen hoogte
  • #hoofdcontainer {overflow: hidden;} /* pakt dan de inwendige float van de grijze #content mee */
  • #content geen hoogte (een min-height kan wel)
  • #content {padding: 45px 0 25px 25px;} /* dan iets padding-bottom (grijs) onder het geel */
  • #infozoek geen absolute positie, anders ontsnapt hij uit z'n container
 
ok
Ik denk dat ik hem nu aardig voor elkaar heb ,ik kan zo gauw geen fouten vinden maar die zullen
er ongetwijfeld zijn.
ik hoor ze graag

wel wat fouten via wc3 ga ze proberen op te lossen maar kan nog steeds niet hellemaal omgaan met
dat programa soms zitten de fouten heel ergens anders dat hoe het wordt aangegeven.


http://kortebaandatabase.nl/joep/index.php
 
Hoi Willem,
... w3c html-validator ... soms zitten de fouten heel ergens anders dat hoe het wordt aangegeven
Ja dat klopt, ze zij niet altijd even duidelijk. Wat ook vaak meespeelt, zijn vervolg-fouten. Als er ergens iets niet goed is gegaan (bv. een </head> vergeten), kan er kritiek komen op heel andere plekken (bv. "<body> mag niet beginnen", en/of "</body> is fout)".


  • Tip: daarom bij correctie van html-errors altijd van boven naar beneden werken, dan zijn er regelmatig bij herstel van één fout vanzelf een heleboel meer verdwenen: dat waren dan vervolg-fouten. :)

Vaak geeft "HTML-Tidy" prettiger leesbare opmerkingen (en aanwijzingen) bij eenzelfde error.


  • Deze "HTML-Tidy" is een add-on voor Firefox, en valt hier te downloaden: users.skynet.be/mgueury/mozilla/.
  • Dit gereedschapje voegt een html-controle toe aan de broncode: als je dan de broncode in FF bekijkt, worden meteen de html-fouten gesignaleerd (en mogelijke oorzaken en oplossingen aangedragen).
  • HTML-Tidy is niet helemaal identiek aan de w3c-validator: je kunt ze het beste naast elkaar gebruiken.

=====
We pakken even een paar fouten uit de huidige error-lijst van de html-validator.


  • regel 75: 'required attribute "alt" not specified'
    = een <img> hoort altijd een alt="..." eigenschap te hebben, dat is voor de toegankelijkheid. Als het alleen om een versiersel gaat, hoeft er geen omschrijving in de alt te komen, dan kan je er een lege alt in zetten: alt="", dat is ook goed.

  • regel 76: 'character "&" is the first character of a delimiter but occurred as data'
    = het &-teken in de html-code betekent het begin van een speciale letterteken-aanduiding, bv. &copy; is het copyright-teken. Als je een & in de tekst hebt staan (zoals J & J Handel), dan moet in de html staan: <p>J &amp; J Handel</p>. De &amp; betekent dan: & = hier volgt een speciaal letterteken, amp = het letterteken is een "amp" (= "ampersand" = Engels voor het en-teken) en ; = hier eindigt het speciale letterteken.

  • regel 76: 'there is no attribute "ALT"'
    = de eigenschap ALT bestaat niet. Nu heb je keurig opgegeven bij het img: ALT="orc" en nu is het weer niet goed! Oorzaak: het Doctype is xhtml, en in xhtml moeten alle namen van tags en attributen in kleine letters geschreven worden.

  • Ook op regel 76: 'there is no attribute "SRC"' en 'element "IMG" undefined'
    = hiervoor geldt hetzelfde: met kleine letters ipv hoofdletters is er niets aan de hand.

  • En ook op regel 76: 'end tag for "IMG" omitted, but OMITTAG NO was specified'
    = deze raadselachtige verklaring betekent dat bij xhtml een img als leeg element (een img heeft niet <img ...>iets erbinnen </img>) altijd op het eind de afsluiting met /> moet hebben, dus: <img src="..." width="..." height="..." alt="" />.

  • regel 85: 'there is no attribute "width"' en 'there is no attribute "height"'
    = in xhtml-strict mogen in de html-code geen opmaak-eigenschappen zitten voor div's, deze horen in de css te staan. In dit geval staan ze via #fotoproef div {width: 150px; height: 117px; ... enz.} al in de css, en kunnen ze zonder meer geschrapt worden uit de html-code.

  • regel 105: 'there is no attribute "onClick"'
    = hier zit weer een hoofdletter in, moet zijn: onclick="this.value=''"

Enz.!
Met vriendelijke groet,
CSShunter

<edit>
logo'tje voor joep? (114x114px)
</edit>
 
Laatst bewerkt:
ok bedankt voor de uitleg ga op het gemak proberen het aantal fouten naar 0 te brengen.

nog heel even terug te komen op het posite's van de div's

jij schrijft
•#infozoek geen absolute positie, anders ontsnapt hij uit z'n container

infozoek wordt gepositioneerd ten opzichte van zijn ouder dus het content die relatief is,
maar nu haal ik de absolute positie van infozoek weg.

blijft infozoek nu het child van het content of legd het nu weer anders.
 
... blijft #infozoek nu het child van het content?
Ja dat is het geval: alles wat binnen een ander element zit, is daarvan een afstammeling (kind, kleinkind, enz.).
Hier ziet de structuur er zo uit (de #infozoek heet inmiddels #infostart):
HTML:
<div id="content">                <!-- {position: relative} -->
    <div id="fotoproef">          <!-- geen positie opgegeven -->
        <div id="fotoeen"></div>  <!-- {position: absolute} -->
    </div>
    <div id="datum">...</div>     <!-- {position: absolute} -->
    <div id="zoek">...</div>      <!-- {position: absolute} -->
    <div id="menu">...</div>      <!-- {position: absolute} -->
    <div id="infostart">...</div> <!-- geen positie opgegeven -->
</div>
D.w.z. de #fotoproef, #datum, #zoek, #menu en #infostart zijn alle 5 children van de #content.
En #fotoeen is een child van #fotoproef = een kleinkind van de #content.

Bij een element met absolute positie gaat de browser op zoek naar het eerste element erboven dat een relatieve positie heeft.
Dat is dan het ophangpunt voor de positie van het absolute ding.
  • Bij #datum, #zoek en #menu is het eerstbovenliggende element met een relatieve positie: de #content. Dat wordt dus het ophangpunt voor de plaatsbepaling.
  • Bij #fotoeen heeft de parent #fotoproef géén positie opgekregen, die wordt overgeslagen. De parent van #fotoproef is de #content, met wel een relatieve positie. Dus #fotoeen heeft ook als ophangpunt de linkerbovenhoek van de #content.

Maar wat ik bedoelde: tegelijkertijd ontsnapt het oppervlak van het absoluut geplaatste element aan de normal flow (de gewone opbouw-richting van de html-elementen, en de plaats die ze innemen).

In de normal flow (van boven naar beneden, en van links naar rechts) komen block-elementen als een <div> of een <p> altijd onder elkaar, en inline-elementen als een <img> altijd naast elkaar (voor zover er ruimte is, anders weer naar beneden).

Elementen met absolute positie trekken zich hier niets van aan, en kunnen bv. over een ander element heen geplakt worden.
  • Dat gebeurt er bv. als je doet: div#fotoeen {margin: 0;}.. Probeer maar, dan komt het plaatje van het grijpertje zowel over het menu als over de Welkom-regel heen.
  • Het eerstvolgende element in de normal flow (zonder abs. positie) is de #infostart. Die houdt geen enkele rekening met de breedte en hoogte van de ontsnapte #fotoeen, maar wordt automatisch ook opgehangen aan de #content.
  • Met #infostart {...; margin: 0 0 0 70px;} erbij kan je dat zien: de teksten verdwijnen nu achter het plaatje, in plaats van op een regel er onder te komen.

Vanwege dit soort verschijnselen is het meestal gevaarlijk om alles een absolute positie te geven. Het model wordt er helemaal star van, en elementen kunnen zich niet vanzelf anders gaan rangschikken of meerekken als dat nodig is (bv. bij meer inhoud er in).
Tips:
  • Probeer het gebruik van {position: absolute} zo veel mogelijk te vermijden.
  • Elementen onder elkaar zetten gebeurt meestal vanzelf: daarvoor hoeft geen position-eigenschap opgenomen te worden. Met margins en paddings kunnen de afstanden geregeld worden.
  • Elementen naast elkaar zetten kan met de {float:left;} of {float:right} eigenschap.
  • Nu onttrekken gefloate elementen zich óók aan de normal flow; maar door erna een {clear: left;}, {clear: right;} of {clear: both;} te zetten wordt er wel rekening gehouden met de hoogte van een gefloat element. Dan komt het volgende element er netjes onder, ipv ernaast (als daar nog ruimte zit).
  • Bij een element met abs. positie is dat niet het geval. Dan heb je geen grip meer op de hoogte, en kan je dus ook niet de achtergrond eronder tot beneden aan laten doorlopen, als die achtergrond in een parent-element of hoger zit.
    - Dat was wat er gebeurde toen er nog een {position: absolute;} in de #infostart zat. :)

Met vriendelijke groet,
CSShunter
___________
PS: Zonder absolute posities loop je ook minder het risico dat één of meer van de in omloop zijnde IE-versies op eigen houtje de positionering verkeerd gaan zetten.
De huidige testpagina ziet er bv. in IE7 zo uit (IE8 en IE9 doen het goed):

joep-ie7.png
 
Laatst bewerkt:
Ok bedank voor de goede uitleg ik ga hier eens rustig mee stoeien.

Dat dat menu buiten het vak valt ie7 en ook ie6 is dat nog te verhelpen met Condition Comment,ie6 maakt me niet zo veel uit maar ie7 vindt ik jammer.
 
Hoi Willem,
Een CC voor IE7 zou misschien kunnen, maar beter lijkt me om de absolute posities te vermijden en er floats van te maken. Daar kan IE7 wel goed mee omgaan.
HTML:
<div id="header">
    <img id="logo" src="image/bol2.png" width="114" height="114" alt="" />
    <img id="orc" src="image/orc.jpg" width="75" height="20" alt="" />
    <h1>J &amp; J Handel B.V.</h1>
    <div class="clearB"><!-- ! --></div>
</div>
Voor de #header hoeft alleen het onderlijntje opgegeven worden (het geel zit al in de #hoofdcontainer). De css kan verder erg eenvoudig worden:
Code:
#header {border-bottom: 1px solid #000000;}
#logo   {float: left; margin-top: 10px; margin-left: 10px;}
#orc    {float: right; margin-top: 25px; margin-right: 10px;}
h1      {margin: 0 100px; padding: 30px 0 0 0; text-align: center; font-size: 2.5em;}
.clearB { clear: both;}
  • Door in de <h1> de linker- en rechter-margin gelijk te maken (en iets groter dan de orc-afbeelding) wordt de gecentreerde tekst ook echt in het midden van de pagina-breedte gezet (en niet in het midden van wat er aan breedte tussen de bol en het occasion-bordje overblijft).
  • De clear-div zorgt dat weer onder de twee floats wordt doorgegaan met het volgende element.
  • Ook het menu hoeft geen abs. positie te krijgen: dan gaat dit in IE7 ook goed.

Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
Ik heb het nu even op mijn eigen manier veranderd
ik heb het menu float left gegeven
en de afbeelding in de header float right maar daar gaat het fout ,
heb nu de header smaller gemaakt dan komt de afbeelding wel meer naar links maar nog steeds over de rand

bij ie6 komt hij wel rechts in de header

bij ie7 8 en 9 gaat hij over de rand van de header

http://kortebaandatabase.nl/joep/werkmap/index.php
 
Laatst bewerkt:
De <div id="orc"> heeft als maten: {width: 75px; height: 20px;}

Daar past het bordje van 200px bij 50px nooit in. :)


  • Het bordje begint aan de linkerkant van de <div> tot de 75px op is, en gaat buiten de <div> nog vrolijk de resterende 125px verder naar rechts.
  • Tot de rand van de gele #hoofdcontainer bereikt is, want die heeft een {overflow:hidden;} en daar wordt het bordje afgesneden *) waar het geel ophoudt.
  • (Met de hoogte gaat het wel goed, omdat de <div id="orc"> geen {overflow:hidden;} heeft.)

____
*) Dwz in FF, Chrome, Opera, Safari en IE8 en IE9.
In IE7 floept het toch over het geel, maar dat is een IE7-bug.
En IE6 doet het helemaal fout, die kan nauwelijks met de position-eigenschap overweg.
 
Laatst bewerkt:
Ja logisch van dat plaatje doet het nu goed.
Nogmaals bedankt voor de uitleg.
Ik ga vande week eerst
eens een paar test lay out's maken om wat te oefenen met
float in combinate met clear.
Ik moet dit even onder de knie krijgen
 
goede dag
Ik ben mijn site eens aan het maken zonder absolute postitie's heb nu alles gefloat,
Als ik te veel float elementen op een pagina heb kan dat ook nadelige gevolgen hebben.
als ik bijv een div ga toevoegen met bijv een foto erin kan ik die dat ook gewoon bijv rechts laten floaten

Ik moet nog even doorkrijgen waarneer wel absoluut en waarneer float.


http://kortebaandatabase.nl/test/index.html
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan