probleem met achtergrondkleuren

Status
Niet open voor verdere reacties.

Elsnorry

Gebruiker
Lid geworden
12 okt 2012
Berichten
42
Als ik mn browserscherm kleiner maak en dan naar rechts scroll dan scaled de achtergrond kleur van de balk boven de header verkeerd, bij de footer is dit ook het geval.

Ik krijg het probleem niet opgelost, iemand die me kan helpen aub?
 
Laatst bewerkt:
Hoi Elsnorry,


  1. Het is meestal wel zo vriendelijk (en ook antwoord-bevorderend) om een testpagina online te zetten, zodat willige helperts niet eerst de pagina hoeven te gaan construeren. Kleine moeite, toch? Kan er meteen gekeken worden naar wat er aan de hand is. :)

  2. De pagina heeft 11 html-fouten, zegt de html-validator.
  3. In welke browser(versie)s doet het probleem zich voor?

Met vriendelijke groet,
CSShunter
___________
PS: Ben benieuwd Wie van de Drie (aangeschreven forums) het gaat worden. ;)
 
Hoi Elsnorry,
Wat je op de jsfiddle kunt zien in het html-gedeelte, is vreemde rode kleurtjes onderaan de code (ook in verschillende html-editors, bv. Notepad++, zie je kleurafwijkingen in de code). Daar klopt iets niet!

En dat klopt: als je de kale html-code in een echte html-pagina zet (nog-niet-snorry.htm), geeft de html-validator (die ken je toch wel?) nog steeds 12 Errors als resultaat.
  • De code is vrij slordig ingetikt. :rolleyes:

Zoals ik al in reactie nr. #2 zei (en in m'n handtekening; en ook aanbevolen in 1 van de andere fora; intussen 4): éérst de html-fouten wegwerken, want daardoor kunnen browsers behoorlijk van slag raken.
  • Dan gaan ze elk op hun eigen manier hun foutafhandeling inschakelen, en behalve niet kloppende pagina's geeft dat vaak ook browserverschillen te zien.

Ook de css-code even in de css-validator plakken: die geeft een fout aan waardoor misschien een {position: relative;} meteen na de fout niet goed doorkomt. - Ook even weghalen!

Wat gebeurt er met correcte html en css?

Met vriendelijke groet,
CSShunter
 
PHP:
#tlc {

}

#tlc #tlc-wrapper {
  margin: 0 auto;
  width: 980px;
  background-color: #556469;
  height: 27px;
}

en


PHP:
#footer #info{
 margin: 0 auto; 
 width: 980px;
 background: red; 
 min-height: 150px;
 border-top: 1px solid #B3B3B3;
 border-bottom: 1px solid #B3B3B3;
 display: block;
}
#footer {
 clear: both;
 overflow: auto;

}


Je zet de achtergrond/grootte van de verkeerde elements daardoor zal het scalen een probleem geven. Ik ga er natuurlijk wel vanuit dat ik de juiste fout gezien heb? screenshots met aanwijzingen zijn altijd handig.
 
Hoi,

Alvast bedankt met de hulp, maar ik denk dat ik het hier verkeerd heb aangepakt. Ik ben namelijk met Wamp een webshop aan het inrichten en botste op het probleem dat ik hier en op nog 3 andere fora zoals Csshunter al aangaf heb neergezet. Ik heb gewoon mn paginabron en de css gekopieerd en voor ik het hierheen heb gepaste heb ik beide wat aangepast zodat er niet te veel irrelevante dingen instonden en heb hierdoor hier en daar misschien ook wel een tag etc. per ongeluk gewist.

@ Csshunter: van de html en css validator's had ik geen weet dat die bestonden, ik zal ze vanaf nu altijd gebruiken om mn fouten op te sporen, kheb weer wat bijgeleerd, bedankt hiervoor.
Veel tijd heb ik nu niet om alles na te kijken, maar ik heb vluchtig alles bekeken en ik denk dat de meeste html fouten tags zijn die ik dus per ongeluk gewist heb. Die ; in de css ook.

Wat er gebeurt met correcte html en css? Dat werkt zeker? Of niet?

@ Bzub: Bedankt voor de hulp, maar dat is het toch ook niet.

De tlc balk en de footer moeten altijd horizontaal over heel het scherm lopen, ook als ik het browserscherm verklein.
 
Laatst bewerkt:
Hoi Elsnorry,
Kijk, zo'n online testpagina doet wonderen! :)
Er zitten geen html-errors in, en de css-validator moppert wel wat over IE-foefjes, maar raakt geen essentiële dingen.
Nu kunnen we ter zake komen, want de probleem-verschijnselen doen zich jammer genoeg nog steeds voor...
M'n stille hoop dat het met valid html en css opgelost zou kunnen zijn is weggesmolten als een ijspegel op een blakerende barbecue. ;)


  • Tip 1 voor diagnose: Haal voor Firefox de Webdeveloper Toolbar add-on (gratis) binnen, deze maakt het leven aanzienlijk makkelijker.

  • Tip 2 voor diagnose: Haal voor Firefox verder de Firebug add-on (gratis) binnen: ook deze spaart uren zoekwerk.

  • Tip 3 voor diagnose: Isoleer het probleem! (door de rest buiten werking te zetten)

  • Tip 4 voor bouw & diagnose: Een rijtje verdere tips in de "Golden Rules Of CSS".

=======
De topstrook (1)
De koe bij de horens gevat: eerst kijken wat er met de bovenstrook <div id="tlc"> aan de hand is.
Dwz. deze isoleren door de #container en de #footer in de html tijdelijk een style="display:none" te geven.



Dan even kijken of een of ander javascript soms dwars zit: nee, javascript uitschakelen helpt niet; dus verder.
Als je nu het browser-window gaat verkleinen tot smaller dan de pagina-breedte van 980px, dan valt op dat er helemaal geen link-rechts scrollbar tevoorschijn komt: de tekst "Welcome, visitor ..." wordt domweg afgekapt. Dat moet niet mogen!

=======
De topstrook (2)
Veel css zit er nog niet voor de <div id="tlc">: alleen de html- en de body-styles; en de dader is gauw gevonden.
Het is de html {overflow-x: hidden} die de L/R scrollbar vernietigt.
Teruggehaald met html {overflow-x: auto}


  • Dat geeft deze testpagina: elsnorry-nw2.htm
  • NB: bij deze en de andere testpagina's staan alle css-aanpassingen in de <head>.

Scrollbar onderaan terug, maar het probleem ook! Bij smal venster en naar rechts scrollen zit er geen background achter het rechterdeel van de topstrook.

=======
De topstrook (3)
En die onbrekende achtergrond rechts klopt eigenlijk wel: het background-image zit in de <div id="tlc"> die geen opgegeven breedte heeft. Dan wordt de #tlc dus 100% breed > dwz. 100% van de schermbreedte van dat moment.
Maar als de schermbreedte te krap is voor de inhoud (die in de #tlc-wrapper zit), dan komt er bij naar rechts scrollen na de 100% niets bij in de #tlc.
Dat is op te lossen door ook de #tlc-wrapper hetzelfde background-image te geven, en ook dezelfde hoogte, en ook dezelfde box-shadow; want alles moet doorlopen.
Hierbij moet de box-shadow links en rechts er uit, om bij een breed window geen schaduwrandje te krijgen op de linker- en rechtergrens van de tlc-wrapper (de inhoud-breedte).
Tegelijk maken we nog even van de gelegenheid gebruik om links en rechts in de #tlc-wrapper een kleine padding van 5px te zetten, dan zit de tekst bij smalle schermen niet pal tegen de schermrand aan; gevolg: de breedte van 980px moet teruggebracht worden tot 970px, want de uiteindelijke breedte van een element is de opgegeven width +de padding-L + de padding-R.



Hiermee is de topstrook zoals ie zijn moet.

=======
De footer (1)
Tijd om de display:none uit de footer te halen, en te kijken wat er dan gebeurt.



Hm, nu komt er opeens een extra scrollbar L/R onderin de footer, terwijl bij smalle schermen onderaan het browserscherm als zo'n mooie scrollbar zit! En zelfs bij 1024*768px is die footer-scrollbar er...

=======
De footer (2)
Wat is hier aan de hand? De #footer had een {overflow: auto}, dwz. een automatische scrollbar als de 100% schermbreedte van de #footer kleiner is dan z'n inhoud. Maar in dat geval komt er al een normale scrollbar onderaan: dubbelop. En als de footer bij brede schermen breder is dan z'n inhoud, moet footer (resp. footer-background) links en rechts ervan gewoon zichtbaar zijn. Ergo: #footer {overflow: visible}



Extra scrollbar onderaan footer weg, maar het probleem nog steeds aanwezig! Bij smal venster en naar rechts scrollen zit er geen background achter het rechterdeel van de footer.
Tegelijk zien we nog een ander probleem: bij een smal scherm zit de linkerkant van de eerste kolom niet helemaal links, maar een stuk opgeschoven naar rechts; en de rest van de kolommen staan ook teveel naar rechts.

=======
De footer (3)
Eerst de linkerkant aanpakken. De linker zijkant van de footer valt bij een smal scherm altijd samen met de linker-browserrand. De #info met de kolommen zit binnen de #footer en begint aan de linkerkant gelijk met de linkerkant van de #footer: als de #info geen margin-left heeft, en ... als de #footer geen padding-left heeft. Maar de #footer heeft een padding-left van 40px!
Hetzelfde gebeurt met de padding-right van de #footer: die zit ook om de #info heen gedrapeerd. - Dat zie je met Firebug prachtig tevoorschijn komen:

es-footer-padding.png

Dus de paddings L/R van de footer moeten op nul gezet worden.



Maar hiermee is het probleem van de ontbrekende rechter-background nog niet verholpen:

es-footer-gat.png

=======
De footer (4)
Bij het gapende gat rechts speelt iets dergelijks als bij de topstrook. Als de #footer moet ophouden wegens het bereiken van 100% schermbreedte, en de #info moet bij smalle schermen wegens zijn 980px breedte nog doorlopen, dan gaat het mis. Dus ook hier moet transplantatie plaatsvinden: ook de #info moet het background-image krijgen.
Plus: ook de border-top, de border-bottom en de box-shadow van de #footer.
Maar: de #info-background aan de rechterkant moet over de volle hoogte van de #footer lopen, en dat gaat niet als de footer een padding-top en padding-bottom heeft. Die paddings moeten dus uit de #footer verdwijnen, en overgeheveld worden naar de #info.

Verder zit een border van een ingesloten element altijd binnen de border van het omvattende element. Daarmee komen de border-top en border-bottom lijntjes van de #info te laag te staan (net onder de borders van de #footer). Die kunnen omhoog getrokken worden met een negatieve margin-top en margin-bottom van de #info.
En tenslotte zetten we ook hier de linkerkant van de kolommen niet pal tegen de venster-zijkant aan (bij smalle schermen), maar iets er van af. Wederom 5px links en rechts padding erbij voor de #info, met bijbehorend terugschroeven van de breedte van 980px naar 970px.



Footer-problemen opgelost.

=======
Het totaal
Voordat de fanfare kan losbarsten, willen we nog wel even de complete pagina zien: misschien gebeuren er alsnog vreemde dingen.
De display:none van de #container afgehaald.



Oeps! Nu komt er bij 1024*768px een horizontale scrollbar die er niet hoort te zijn, en bij 1024*768px en smaller komt er bij de topstrook en de footer toch weer een stukje blanco achtergrond tevoorschijn.
Iets in de inhoud van de #container is te breed.

=======
Door het lint (1)
De boosdoener valt gauw door de mand: het is het ribbon, waarvan de uitsteeksels links en rechts buiten de 980px zijn gekomen.
Gelukkig heeft het menu nog voldoende speling om het lint met de uiteinden en het menu iets smaller te maken.
Eerst L en R 30px van het menu afsnoepen met #menu {margin: 0 30px 10px 30px}.



Nu hangen de flapjes nog buiten boord.

=======
Door het lint (2)
De zijkantjes zijn buiten de 980px getrokken met een .ribbon:before {left: -23px} en een .ribbon:after{right: -23px}.
Die moeten dus ook 30px opschuiven en gaan van negatief naar positief: 30px-23px=7px.



Nu alleen de schaduw-driehoekjes nog verplaatsen.

=======
Door het lint (3)
De schaduw-driehoekjes kunnen ook 30px verderop door: .ribbon .ribbon-content:before {left: 0} en .ribbon .ribbon-content:after{right: 0} beiden op 30px te zetten.



Door het lint van de eindstreep! :)

Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
Hey Csshunter,

Honderdduizend maal bedankt voor al de moeite en tijd die je hier in hebt gestoken en dan nog tot de juiste oplossing bent gekomen ook!
Helaas heb ik op mijn site rechts bovenaan in de tlc balk een div met een Facebook button in gezet en werkt het niet zoals het zou moeten werken bij mij.
Misschien dat ik die button nog wel verzet maar liever niet want daar staat ze eigenlijk perfect.

Van die diagnose dingen van Firefox ken ik niks, ik gebruik element inspecteren/hulpprogramma voor ontwikkelaars in Chrome. Is dit niet wat hetzelfde?

Ik heb nog 1 error die ik niet opgelost krijg en jij misschien wel?
Als ik mn homepage in internet explorer 7 bekijk dan komt de dropdown achter de image slider te liggen en is dus niet meer helemaal zichtbaar, dit kan je op de bij"components" zien.
Ik heb de z-index van de dropdown al op 1000 gezet maar dit werkt niet.
 
Laatst bewerkt:
Hoi Elsnorry,
In je huidige demo zie ik geen Facebook-button bovenin, daar kan ik zo niets over zeggen. - Maar het zou wel op te lossen moeten zijn.

Ja, het Chrome-ontwikkelhulppogramma komt ongeveer op hetzelfde neer; zelf ben ik gewend aan Firebug (die was er al voor de geboorte van Chrome).

De dropdown achter de image slider in IE7.
Daarvoor moet zowel het ribbon (met het uitklap-menu) als de slideshow-container een z-index krijgen: die van het ribbon hoger. Dan kunnen ze in het laagjes-systeem een hoogte ten opzichte van elkaar krijgen.
  • Bij het z-indexen moet je altijd eerst omhoog naar de twee oer-elementen waar de boosdoeners in zitten: die krijgen eerst een z-index. De rest is stapelwerk, en vaak gaat het dan vanzelf wel goed; of je geeft het te lage element telkens een z-index met 1 omhoog, net zolang tot het goed gaat.
En ze moeten alle twee een expliciet benoemde position-waarde krijgen, anders werkt een z-index niet, ook al zet je 'm op 1000 of 5 miljoen. Hier kan het met voor beiden een {position:relative} zonder dat de opmaak in elkaar valt.
Aldus:
Code:
.ribbon {
	position: relative;
	z-index: 2;
	}
.slideshow {
	position: relative;
	z-index: 1;
	}


Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
Hallo Csshunter,

Wederom duizendmaal bedankt! Het dropdown werkt nu ook in IE7, danku!

Die demo die ik hier neergezet heb is wel niet mijn site hoor, dat is een demo van een theme dat ik gebruik. Die theme heb ik wel helemaal aangepast.
Ik heb die link van die demo hier gezet omdat ik van mijn site nog niets online heb staan.

Zo ziet de code eruit van de facebook button, ik heb ze in de in de tlc-wrapper gezet:
HTML:
<div id="tlc-wrapper">
<div id="facebook"><a href="http://www.facebook.com/" target="_blank"><img src="http://localhost/upload/image/data/facebook.png" alt="vind ons leuk op facebook" title="vind ons leuk op Facebook!!"></a></div>
		<div class="lks"><img src="catalog/view/theme/palioxis/image/home.png" alt="Home"><a href="http://localhost/upload/index.php?route=common/home">Home</a><a href="http://localhost/upload/index.php?route=account/wishlist" id="wishlist-total">Wish List (0)</a><a href="http://localhost/upload/index.php?route=account/account">My Account</a><a href="http://localhost/upload/index.php?route=checkout/cart">Shopping Cart</a><a href="http://localhost/upload/index.php?route=checkout/checkout">Checkout</a></div>
		<div id="welcome">
						Welcome visitor you can <a href="http://localhost/upload/index.php?route=account/login">login</a> or <a href="http://localhost/upload/index.php?route=account/register">create an account</a>.	</div>
	</div>

css:
Code:
#facebook {
position: absolute;
margin-left: 1010px;
}

Ik zal anders als mn site binnenkort online staat hem hier is neerzetten voor dat probleem.;)
 
Ook zonder complete online-versie is 't probleem al te zien. :)

Wat gebeurt? Het FB-image wordt op een vaste plek van 1010px vanaf de linkerkant gezet. De pagina-breedte is echter maar 980px (zoals bv. de #container voorschrijft) om vlekkeloos op een scherm van 1024*768px te passen zonder te hoeven scrollen.
Zet je FB nu op 1010px vanaf links, dan komt ie rechts naast de top-balk. Dat gaat goed bij beeldschermen die minstens (1010 + FBimg-breedte + rechterscrollbar-breedte van ca. 20px) breed zijn > en anders gaat het mis.
Dan komt het oude verschijnsel weer terug: scrollbar onderin, en onder de FB-button loopt de bovenbalk niet door.
De enige manier om het op te lossen, is om de FB-button niet buiten de pagina-breedte te zetten. Hij kan bv. opgenomen worden in het rijtje links in de linkerhelft van de bovenbalk:
HTML:
<div id="tlc">
	<div id="tlc-wrapper">
		<div class="lks">
			<img src="catalog/view/theme/palioxis/image/home.png" alt="Home">
			<a href="http://localhost/upload/index.php?route=common/home">Home</a>
			<a href="http://localhost/upload/index.php?route=account/wishlist" id="wishlist-total">Wish List (0)</a>
			<a href="http://localhost/upload/index.php?route=account/account">My Account</a>
			<a href="http://localhost/upload/index.php?route=checkout/cart">Shopping Cart</a>
			<a href="http://localhost/upload/index.php?route=checkout/checkout">Checkout</a>
			<a href="http://www.facebook.com/" target="_blank">
				<img id="facebook" src="http://bliksekaters.nl/tests/images/fb-transp.logo65x23.png" 
				alt="vind ons leuk op facebook" title="vind ons leuk op Facebook!!">
			</a>
		</div>
		... enz.
Met in de css:
Code:
#facebook {
	position: absolute;
	top: -6px;
	}
Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan