[CSS] rechter border om content altijd beeldvullend*

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Svennetjee
  • Registratie: December 2007
  • Laatst online: 21-09 18:13
Ik zie jullie al denken, oh nee, toch niet wéér een vraag over die div die 100% hoog moet worden? Nee, gelukkig niet maar het heeft er wel mee te maken.

Ik ben net begonnen met een site, en ik wil die graag een achtergrondplaatje geven. In dit geval een beetje een door photoshop bewerkte muur. A.u.b. geen vragen over het onderwerp van de website, dat komt t.z.t wel. In ieder geval, ik zit met een probleem.

Ik wil die achtergrond op vrijwel elke resolutie goed op het scherm weergeven. In photoshop heb ik even het design er uit gesloopt zodat we alleen de situatie over houden die ik dmv de hulp uit dit topic wil maken:

Plaatje op imageshack (Popups!)

Nu wordt het maken van die achtergrond vrij lastig. Ik wil in ieder geval dat de achtergrond zich over de hele viewport uitstrekt, en fixed is. De vraag is: hoe ga ik dat doen zodat het mooi blijft op meerdere resoluties? Min conclusie na tientalle minuten zorgvuldig nadenken: snij de achtergrond in tweeën, plak het linkse deel als background in de HTML en lijn die uit op de bottom, en doe hetzelfde met het rechtse deel maar dan op de body en rechts uitgelijnd. Op zich niks mis mee, maar nu gaan de problemen komen.

Ik wil van het zwarte vlak waar de inhoud straks in gaat komen een wrapper div maken die in het midden wordt uitgelijnd, heel simpel met margin:auto en een vaste breedte. De wrapper moet óf 100% van de viewport zijn, of mee stretchen met de inhoud als die groter is dan de viewport. Nu blijkt dit praktisch onmogelijk op te lossen in mijn situatie. Want de achtergrond van de HTML blijft altijd de hele hoogte beslaan, en die van de body en de wrapper niet. Nu is het wel op te lossen dat de achtergrond van de body, én van de wrapper de hele viewport te laten beslaan, maar dan gaat het weer mis als de inhoud groter is dan de viewport: de wrapper gaat wel mee, maar de achtergrond van de body niet.

Het is misschien een beetje onduidelijk, maar ik was net zo gefrustreerd dat ik mn hele HTML en CSS heb weggeknikkerd en opnieuw ben begonnen, dus ik heb geen echte actievoorbeelden. En ik zou het erg waarderen als er niemand met een linkje naar Google zou willen komen, want daar heb ik de afgelopen dagen namelijk al wat uurtjes gespendeerd op zoek naar de oplossing voor dit probleem. Wat ik graag zou willen is een inzicht van iemand die kan aangeven hoe ik dit het beste kan oplossen.

En oh ja, ik hecht op deze site ook veel waarde aan SEO en laadtijd, dus gelieve die te respecteren ;) Misschien ben ik niet echt in de positie om eisen te stellen, maar toch ;)

Edit: Even vergeten te vermelden dat het zwarte gedeelte met de glow geen deel uitmaken van de achtergrond.

[ Voor 3% gewijzigd door Svennetjee op 14-04-2009 21:43 ]


Acties:
  • 0 Henk 'm!

  • Gersomvg
  • Registratie: December 2005
  • Laatst online: 21-09 16:07
Kijk eens naar dit: ;)
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" style="height:100%;">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body style="height:100%; margin:0px;">
    <div style="background:#ff0000; height:100%; float:left;" id="links"></div>
    <div style="width:500px; background:#063; height:100%; float:left;"></div>
    <div style="background:#00ff00; height:100%; float:left;" id="rechts"></div>
    <script type="text/javascript">
    function doeAchtergrondGoed(){
        document.getElementById('links').style.width = Math.floor((document.getElementsByTagName('body')[0].clientWidth - 500) / 2) + "px";
        document.getElementById('rechts').style.width = Math.ceil((document.getElementsByTagName('body')[0].clientWidth - 500) / 2) + "px";
    }
    doeAchtergrondGoed();
    window.onresize = doeAchtergrondGoed;
    </script>
</body>
</html>

Even speciaal voor je gebouwd :P Tis helaas wel met javascript maar ja.. Is iig gewoon nog compatible wanneer ze JS uit hebben staan (dan zie je de achtergrond gewoon niet).

Plaatje trouwens moet je gewoon seamless doen. Anders wordt het zo'n gepruts.. Dan maak je gewoon een hele grote seamless pic ;) (kost alleen wel weer laadtijd)

[ Voor 17% gewijzigd door Gersomvg op 15-04-2009 08:03 ]


Acties:
  • 0 Henk 'm!

  • Geert.H
  • Registratie: Maart 2001
  • Laatst online: 21-09 20:14
Ik heb je verhaal twee keer doorgelezen maar ik weet nog niet zeker of ik je goed begrijp, maar laat ik eerst het probleem eens in mijn eigen woorden vertalen.

1. Je hebt een achtergrond afbeelding
2. Je wit dat die achtergrond afbeelding altijd er is, ongeacht de breedte of de hoogte van de scherm (incl. als de wrapper langer wordt).

't Eerste wat bij mij opkomt is een structuur ongeveer als volgt:
code:
1
2
3
4
5
<html> (niks mee doen)
<body> (niks mee doen)
<div id="holder"> 
(hier zet je een rete grote afbeelding in, of een kleine die herhaalt, tevens krijgt deze div een min-height:100%; mee)
De rest van de content gooi je in deze div


Dit is volgens mij de oplossing

Acties:
  • 0 Henk 'm!

  • Gersomvg
  • Registratie: December 2005
  • Laatst online: 21-09 16:07
@Geert.H; Ik raadt toch mijn eigen oplossing aan aangezien je de body geloof ik perse op height 100% moet zetten aangezien de div anders geeneens zo hoog kan worden. Bovendien moet je dan ivm. Chrome compatibility de html ook een height van 100% meegeven (leert mijn ervaring).

Test maar.. mijn scriptje werkt

Acties:
  • 0 Henk 'm!

  • Svennetjee
  • Registratie: December 2007
  • Laatst online: 21-09 18:13
gersompie, superbedankt. Ik kan het op het moment even niet zelf testen, omdat ik op school zit, maar thuis ga ik er meteen mee aan de slag. Zo op het eerste gezicht lijkt het op een goede oplossing. En voor de non-js gebruikers kan ik altijd nog op een andere manier het effect zo veel mogelijk na proberen te bootsen met CSS.

Bedankt voor de moeite in ieder geval ;)

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ga je nou serieus pogen om je content uit te laten strekken naar de volledige breedte van de browser? Je weet toch dat de leesbaarheid een stuk minder wordt boven 800 - 1000 pixels?

Daarnaast is er ook wel een CSS only mogelijkheid mits je er bijvoorbeeld voor kiest om de linker achtergrond fixed te laten en die rechter eventueel groter maakt dan je viewport. Dan krijg je niet dat de website aan de rechterkant ineens wordt afgekapt als de browser een stuk groter is dan wat je voor ogen hebt :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Svennetjee
  • Registratie: December 2007
  • Laatst online: 21-09 18:13
BtM909 schreef op woensdag 15 april 2009 @ 11:33:
Ga je nou serieus pogen om je content uit te laten strekken naar de volledige breedte van de browser?
[...]
Nee, de content juist niet, maar de achtergrond moet schermvullend worden. Achter het zwarte vlak mag best een gap zitten, zolang de gebruiker er zelf maar niks van ziet..

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Maak eens een nieuwe printscreen met een browserbreedte van 2x zo groot als wat je nu hebt gepost?

en upload je pic up http://tinypic.com. Die zorgt niet voor popups ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • Svennetjee
  • Registratie: December 2007
  • Laatst online: 21-09 18:13
Gersompie, bedankt, maar jouw oplossing werkte toch niet helemaal zoals ik wilde. En het gebruik van javascript voor de layout wil ik eigenlijk niet doen, tenzij het niet zo veel uitmaakt, maar aan de achtergrond hecht ik toch wel wat waarde.

Wat heb ik toen gedaan? Zelf nagedacht! Alweer, maar nu beter. Ik heb de afgelopen dagen heel wat gelezen over oplossingen die hier mee te maken hebben, en toen heb ik ze allemaal een beetje gecombineerd. Uitkomt: een manier die in ieder geval werkt in FF3 en IE8 én IE7 (IE8 compatibility mode). Hoe ik het gedaan heb is misschien wel interessant voor mensen die dit probleem later tegen gaan komen, dus bij deze:


Cascading Stylesheet:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
html {
background-image:url('../images/bg_left.jpg');
background-repeat:no-repeat;
background-attachment:fixed;
background-position:bottom left;
height:100%;
}

body {
height:auto !important;
height:100%;
min-height:100%;
margin:0;
background-image:url('../images/bg_right.jpg');
background-repeat:no-repeat;
background-attachment:fixed;
background-position:bottom right;
}

#wrapper {
width:960px;
background-color:black;
margin:auto;
}


HTML:
1
2
3
4
5
6
7
8
9
10
11
12
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="nl" lang="nl">
<head>
    <title></title>
    <link rel="stylesheet" type="text/css" href="css/style.css" media="screen" />
</head>
<body>
    <div id="wrapper">
        <br /> (x100 om te testen natuurlijk)
    </div>
</body>
</html>


En dan nog een plaatje van het resultaat (let op de scrollbars):
FF3 @ 1280x1024 http://i40.tinypic.com/10ruya9.jpg
IE8 @ 1280x1024 http://i41.tinypic.com/e8amgo.jpg
IE8 Compatibility Mode @ 1280x1024 http://i39.tinypic.com/kqoee.jpg

[ Voor 3% gewijzigd door Svennetjee op 15-04-2009 16:44 ]


Acties:
  • 0 Henk 'm!

  • Svennetjee
  • Registratie: December 2007
  • Laatst online: 21-09 18:13
Jeuj, te vroeg gejuicht weer. De wrapper wil niet als er geen <br /> in staan. Wat stom om daar geen rekening mee te houden.. In ieder geval, ik zoek nog even verder..

EDIT:
heb besloten om het bijltje er bij neer te gooien. Dit gaat te veel tijd kosten voor niks. Ik maak denk ik een andere idd seamless achtergrond.. Eigenlijk toch te gek voor woorden, dat je dit niet gewoon met CSS kunt oplossen..

[ Voor 41% gewijzigd door Svennetjee op 15-04-2009 17:22 ]


Acties:
  • 0 Henk 'm!

  • Gersomvg
  • Registratie: December 2005
  • Laatst online: 21-09 16:07
Sowieso ben ik benieuwd hoe je het nou eigenlijk heb opgelost (bij je laatste code post). Als iemand nou een resolutie heeft die groter is dat de backgroundimage?
Svennetjee schreef op woensdag 15 april 2009 @ 16:44:
Jeuj, te vroeg gejuicht weer. De wrapper wil niet als er geen <br /> in staan. Wat stom om daar geen rekening mee te houden.. In ieder geval, ik zoek nog even verder..

EDIT:
heb besloten om het bijltje er bij neer te gooien. Dit gaat te veel tijd kosten voor niks. Ik maak denk ik een andere idd seamless achtergrond.. Eigenlijk toch te gek voor woorden, dat je dit niet gewoon met CSS kunt oplossen..
CSS 3 is onderweg ;) (waarom duurt dat eigenlijk zo lang :? )

Acties:
  • 0 Henk 'm!

  • brtk
  • Registratie: November 2006
  • Laatst online: 18:12
mocht je er toch nog mee door willen; misschien heb je hier wat aan :

http://www.webdesignerwal...-to-css-large-background/

Acties:
  • 0 Henk 'm!

  • tonyisgaaf
  • Registratie: November 2000
  • Niet online
@Svennetjee: voordat je het bijltje erbij neergooit, is het misschien handig wat duidelijker te zijn in wat je wilt. Je uitgebreide, maar ietwat onduidelijke startpost maakt dat er niet veel mensen reageren.

Dus begin bij het begin: geen imageshack "zo wil ik dat het eruit ziet", maar uitgeklede LIVE testpagina's.
Specificeer per onderdeel hoe je wilt dat het wél werkt, niet hoe je niet wil dat het werkt.

Wil je dat een achtergrond _altijd_ beeldvullend is? Dan blijven eigenlijk maar twee opties over, waarvan één praktisch:
  • Een achtergrond zo groot als de huidige grootste consumentenmonitoren resolutie: 2560x1600 (0.06%) of op z'n minst 1920x1200 (1.11%) [percentages even uit de Analytics van een beheerde site (~300.000 pageviews/maand) geplukt]. Groooooote bestanden => bad practice.
  • Een herhalende achtergrond, voldoende groot om niet "lelijk" te herhalen. "Good practice".
Verder, voor de content background: het hoeft natuurlijk niet daadwerkelijk de wrapper te zijn van de content waar je de background in plaatst. Je kunt ook een background div met 100% hoogte achter de wrapper met dezelfde background plaatsen. Dan is die dus background dus altijd visueel minimaal 100% hoog. Of je stopt met ondersteunen van IE6 :P, dan kun je "gewoon" de min-height CSS property gebruiken.
Dus ook hier, net als met de "faux-columns" een "faux-column".

NL Weerradar widget Euro Stocks widget Brandstofprijzen widget voor 's Dashboard

Pagina: 1