Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[xhtml / css] Twee-kollomig scherm verspringt bij resize

Pagina: 1
Acties:
  • 261 views sinds 30-01-2008
  • Reageer

  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Voordat ik begin: Webdesign is niet mijn ding :@. Ik heb de benodigde kennis van xhtml en css, maar het maken van een layout en het ook nog goed laten lijken is niet mijn ding.

In ieder geval. Ik ben bezig met een webapplicatie waarvan de layout grotendeels gebaseerd is op een bestaande layout (standaardlayout van een framework-achtig iets), en daar heb ik het een en ander aan toegevoegd. De globale structuur van de pagina is een menubalk aan de bovenkant die de hele breedte van het scherm inneemt, met daaronder twee 'kolommen' met gegevens. De kolom aan de linkerkant moet een soort van menu voorstellen, de kolom aan de rechterkant de gegevens daaruit (werkt allemaal strak met ajax e.d.). De menubalk neemt ongeveer 1/3e van de breedte van het scherm in.

Het probleem wat ik daar nu mee heb is dat, zodra je de browser resized naar een grootte net onder de 1024 pixels, het centrale gedeelte verspringt naar onder het menu aan de linkerkant. Ikzelf heb al tijden gezocht (in de afgelopen maanden) naar de oorzaak daarvan, maar ik kan het niet vinden. Op het moment is het menu aan de linkerkant ingesteld op 360 pixels breed en het centrale gedeelte op 65%, zodat het niet verspringt bij gewoon gebruik. Echter, ik zou graag dat het menu aan de linkerkant zich aanpast aan de inhoud (de menutitels kunnen namelijk groter worden dan dat ze op het moment zijn, afhankelijk van hetgeen waar de webapp op van toepassing is).

Maar in ieder geval, het probleem is dat het centrale gedeelte verspringt wanneer de menubalk breder wordt of het scherm geresized wordt. Voor zover ik na kan komen is het centrale gedeelte, alsmede de informatie die daarin komt (hoofdzakelijk tekst en tabellen) allemaal ingesteld op percentages voor de breedte.

De structuur is (ruwweg, er zit template code tussen die ikzelf niet gemaakt heb) ongeveer als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    <div id="page">
        <div id="header" class="clearfix">
           <!-- titel e.d. -->
        </div>

        <div id="content" class="clearfix">

              <div id="nav">
                <div class="wrapper">
                    <h2 class="accessibility">Navigation</h2>
                    <!-- navigatiemenu komt hier -->
                </div>
                <hr/>
            </div><!-- end nav -->     

             <div id="spacer" style="float:left; width:2%;">&nbsp;</div>
             <div id="left">
                <!-- menu komt hier -->
             </div>

             <div id="main">
                  <!-- centrale gedeelte komt hier -->
            </div>

         </div> <!-- einde content-div -->

        <div id="footer" class="clearfix">
           <!-- footer hier -->
        </div>
    </div> <!-- einde page div -->


(de tabs e.d. zullen wel niet helemaal kloppen, maar vooruit). De CSS die van toepassing is op de verschillende elementen die (volgens mij) van toepassing zijn:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
    div#page {
        width: 100%;
        margin: 0 auto;
        padding: 0;
        text-align: center;
    }

        div#header {
            margin: 0 0 5em 0;
            padding: 6px 0 2px 10px;
            text-align: left;
            height: 79px; /* needed by IE 7 */
        }

    div#content {
        position: relative;
        width: 100%;
        margin: 0 auto 20px auto;
        padding: 0;
        text-align: left;
    }

    div#main {
        float: left;
        width: 65%;
        display: inline;
        margin-left: 10px;
    }

    div#left {
        float: left;
        width: 360px;
        display: inline;
        margin-right:10px;
    }
        
    div#nav {
        position: absolute;
        top: -25px;
        left: 0px;
        width: 100%;

        text-align: left;
    }


Tot zover. Ikzelf kan de eventuele fout hierin niet vinden, en na enkele weken zo niet maanden van uitproberen en op goegel en GoT zoeken kom ik er nog niet uit. De fout is niet afhankelijk van een browser, dus waarschijnlijk is het iets waar ik overheen zie. De fout doet zich ook voor bij alleen een kleine hoeveelheid tekst in het centrale gedeelte met verder geen opmaak (muv een strong-tag), dus ik ben er vrij zeker van dat het ergens in de bovenstaande CSS moet zitten. Heeft iemand enig idee waar dit probleem hem aan kan liggen?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:37

TeeDee

CQB 241

Het mooiste zou een online testcase zijn.

Heart..pumps blood.Has nothing to do with emotion! Bored


  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Ik zal eens kijken wat ik kan doen.

  • disjfa
  • Registratie: April 2001
  • Laatst online: 04-11 11:05

disjfa

be

Procentuele breedtes en vaste pixel marges en paddings werken niet samen :)

En een 100% brede website is neem ik aan ook niet echt de bedoeling. Lijkt me erg naar lezen op een 25xx pixel brede resolutie bijvoorbeeld.

disjfa - disj·fa (meneer)
disjfa.nl


  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
disjfa schreef op donderdag 17 januari 2008 @ 11:43:
Procentuele breedtes en vaste pixel marges en paddings werken niet samen :)

En een 100% brede website is neem ik aan ook niet echt de bedoeling. Lijkt me erg naar lezen op een 25xx pixel brede resolutie bijvoorbeeld.
Het alternatief (en de standaard) was een layout die alleen een centrale balk van het scherm gebruikte, en dat was ook niet echt bepaald bruikbaar (aangezien de relatief grote hoeveelheid gegevens die erop moesten). De webapp wordt gebruikt in een omgeving waar de meesten twee beeldschermen hebben, volgens mij zullen de meesten de pagina op hun tweede scherm zetten, die een max breedte van 1280 (oid) hebben. Ik heb m'n hoofdscherm zelf op 1600 breedte, en het is voor mij nog goed leesbaar tot zover. Volgens mij zijn er niet veel hier die het breder hebben (of kunnen instellen).

Ik zit meer in over diegenen die het programma op een 800*600 scherm willen draaien (indien die hier nog zijn), of die de browser niet fullscreen draaien. (Het is een intern gebruikte webapp, fyi dus).

Ik heb een .html van een van de pagina's gemaakt, inclusef de (eigenlijk veel te grote hoeveelheid) CSS inlilne neergeplakt. Ik kon zo vlot geen goeie host vinden, dus heb ik hem op zo'n gratis site met een wachttijd van 15 seconden geplakt. Niet ideaal, maar het werkt volgens mij wel. Te vinden op

http://www.fileshost.com/en/file/27931/plugin-html.html

(Indien er iemand een eenvoudiger iets kan vinden, laat het me weten - kan van pas komen bij dit soort situaties)

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 23:37

TeeDee

CQB 241

YopY schreef op donderdag 17 januari 2008 @ 12:21:
[...]
Het alternatief (en de standaard) was een layout die alleen een centrale balk van het scherm gebruikte, en dat was ook niet echt bepaald bruikbaar (aangezien de relatief grote hoeveelheid gegevens die erop moesten).
Kijk of je het e.e.a. kan groeperen (als het om een menu gaat) of kijk eens naar een Accordion Panel oid.
De webapp wordt gebruikt in een omgeving waar de meesten twee beeldschermen hebben, volgens mij zullen de meesten de pagina op hun tweede scherm zetten, die een max breedte van 1280 (oid) hebben. Ik heb m'n hoofdscherm zelf op 1600 breedte, en het is voor mij nog goed leesbaar tot zover. Volgens mij zijn er niet veel hier die het breder hebben (of kunnen instellen).

Ik zit meer in over diegenen die het programma op een 800*600 scherm willen draaien (indien die hier nog zijn), of die de browser niet fullscreen draaien. (Het is een intern gebruikte webapp, fyi dus).
Browser schermen / groottes kan je, zeker voor een interne app, prima onderzoeken.
Ik heb een .html van een van de pagina's gemaakt, inclusef de (eigenlijk veel te grote hoeveelheid) CSS inlilne neergeplakt. Ik kon zo vlot geen goeie host vinden, dus heb ik hem op zo'n gratis site met een wachttijd van 15 seconden geplakt. Niet ideaal, maar het werkt volgens mij wel. Te vinden op

http://www.fileshost.com/en/file/27931/plugin-html.html

(Indien er iemand een eenvoudiger iets kan vinden, laat het me weten - kan van pas komen bij dit soort situaties)
Webspace van je ISP?

Edit: sorry, maar probeer echt relevante code te geven. Ik heb geen zin (en tijd ;)) om +/- 790 regels CSS te gaan debuggen.

[ Voor 3% gewijzigd door TeeDee op 17-01-2008 13:09 ]

Heart..pumps blood.Has nothing to do with emotion! Bored


  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Kijk of je het e.e.a. kan groeperen (als het om een menu gaat) of kijk eens naar een Accordion Panel oid.
Check, menu aan de rechterkant is accordion.
Edit: sorry, maar probeer echt relevante code te geven. Ik heb geen zin (en tijd ) om +/- 790 regels CSS te gaan debuggen.
Check, zie fipo :Y)

  • f.v.b
  • Registratie: Januari 2008
  • Laatst online: 17-11 09:06
Zodra je elementen float: left maakt, dan gaan ze in principe naast elkaar staan. Tenzij de ruimte niet meer voldoende is. Dan springt de eerste die niet meer past naar beneden, naar een plek waar wel voldoende ruimte is.

Zorg er dus voor dat de kolommen altijd voldoende de ruimte hebben. Dit gaat fout:

HTML:
1
2
3
4
<div style="width: 300px;">
  <div style="float: left; width: 100px;">&nbsp;</div>
  <div style="float: left; width: 250px;">&nbsp;</div>
</div>


Het volgende gaat ook verkeerd, omdat de linker kolom door de content toch breder dan 100 pixels wordt:

HTML:
1
2
3
4
<div style="width: 300px;">
  <div style="float: left; width: 100px;">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
  <div style="float: left; width: 190px;">&nbsp;</div>
</div>


In dat geval moet je de breedte van de linker kolom weer hard naar 100px terugbrengen:

HTML:
1
2
3
4
<div style="width: 300px;">
  <div style="float: left; width: 100px; overflow: hidden;">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</div>
  <div style="float: left; width: 190px;">&nbsp;</div>
</div>

[ Voor 4% gewijzigd door f.v.b op 17-01-2008 21:58 . Reden: Duh! float: left in de inline styles vergeten... ]

Don't erase all files?
       [Yes]   [No]


  • YopY
  • Registratie: September 2003
  • Laatst online: 06-11 13:47
Dat geeft al een veel beter inzicht in het probleem. Ik heb het gebruik van vaste breedtes zoveel mogelijk verminderd, waardoor het verspringen pas later een probleem wordt. Het verspringt nu nog net boven de 800 pixels (breedte), waarschijnlijk nog door het gebruik van vaste marges (in pixels gedefinieerd). Is hier ook een alternatief voor (het gebruik van vaste marges)?

Het volgende stukje html geeft de huidige structuur weer. Wanneer de margin-left uit de main en de left verwijderd worden, verspringt de inhoud niet meer.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<html>
    <head>
        <style type="text/css" media="all">
            div#content {
                position: relative;
                width: 100%;
                padding: 0;
                text-align: left;
            }
            div#main {
                float: left;
                width: 65%;
                display: inline;
                margin-left:10px;
            }

            div#left {
                float: left;
                width: 30%;
                display: inline;
                margin-left: 20px;
            }
        </style>
    </head>

    <body>
        <div id="content" class="clearfix">            
            <div id="left">
                asdf
            </div>
            <div id="main">
                sdfa
            </div>
        </div>
    </body>
</html>

  • f.v.b
  • Registratie: Januari 2008
  • Laatst online: 17-11 09:06
Weet je zeker dat dat niet al bij 600 pixels gebeurt? Want (65 % + 30 %) x 600 pixels = 570 pixels. Je houdt dan nog net 30 pixels over voor de (10 + 20 pixels) marges. Zit je onder de 600 pixels dan heb je minder dan 30 pixels over en springt main onder left. Erboven gaat alles goed.

Het makkelijkste is om de layout net iets anders op te zetten. Je houdt deze basis structuur, maar verwijdert de marges op left en main. Vervolgens zet je in left een div met een margin-left (of misschien is padding-left beter) van 20 pixels en daarin zet je dan de elementen in left. Hetzelfde doe je bij main.

Don't erase all files?
       [Yes]   [No]

Pagina: 1