div resize

Status
Niet open voor verdere reacties.

Flamedog

Gebruiker
Lid geworden
14 jan 2007
Berichten
163
http://flameception.com/logoquiz/

zie bovenstaande site; bij het klikken wordt de div 2x zo groot, echter dit wil ik zonder dat de rest opschuift. Opzich werkt het zo wel aardig alleen bij de meest rechtse image springt hij dan naar de volgende rij.

Het is dus de bedoeling dat de div waar je op klikt tijdelijk de andere div's overlapt en dat die andere dus blijven staan waar ze al staan.

Iemand ideeën?

mvg,
Flamedog
 
Hoi Flamedog,
Eerst even een paar algemene kanttekeningen:
  • Je weet dat er 301 html-fouten in zitten? Het zijn wel vaak dezelfde, dus met zoek&vervang in je editor kan je een heel eind komen. Maar bv. ID's mogen niet beginnen met een getal (eerst een letter en dan een getal mag wel; zie hier bovenaan de regels in de html-specificatie).
  • Je weet dat Internet Explorer 7 de layout niet aankan (screenshotje IE7)?
  • Je weet dat IE7 en IE8 (momenteel samen goed voor ruim 40% van de IE-surfers) de css3 voor de box-shadow niet ondersteunen, en gewone vierkantjes laten zien? (zie resultaten bij even URL intikken bij netrenderer.com).

Dan gaan we nu verder met de vraag. ;)
  • Behalve het ertussen springen en het vergroten van de regelhoogte valt ook op dat de logo's aan blijven staan als je ze niet handmatig uit zet.
Of beide verschijnselen via een aangepaste instructie voor jQuery op te heffen zijn, weet ik niet (geen jQ-deskundige).
Met ingrijpen in de css alleen lukte het me i.i.g. niet.

Alternatief?
Ja, dat is er ook!
Daarbij kunnen tegelijkertijd ook alle IE's bediend worden.
  • In plaats van een box-shadow wordt een image ingevoegd, gecombineerd tot één css-sprite van < 2kB, voor de gewone kleine logo-background, voor een hover-variant daarvan, en voor het grotere geschaduwde vierkant voor het inzoomen van de logo's.
  • In plaats van de jQuery-handel (33kB) kan je zelf in je schuurtje gaan knutselen, en ambachtelijk via je kladblok een precies-wat-ik-wil script (logo-zoom.js) van 2kB maken.
  • Daar komen wel een rekenlineaal, wat schaafwerk en een paar velletjes fijn schuurpapier bij kijken! :)
  • Want behalve het inzoomen van het logo moet ook de background inzoomen, plus de groei moet alle kanten tegelijk op gaan (= steeds naar verhouding de positie van de box wijzigen), en het logo moet wel steeds in het midden blijven staan (= naar verhouding aanpassing van de paddings van het logo).
  • In wezen is het eenvoudige versie van een lightbox, waar meer toeters en bellen in zitten.
  • En uiteraard wordt dit vergezeld van een stylesheetje (logo-zoom.css) van ook zo'n 2kB, waarin alles op een rijtje wordt gezet. Door het zoom-logo een absolute positie te geven (t.o.v. het kleine logo waar het bij hoort) kan alles op z'n plaats blijven staan. Rondom het logo-blok zit de nodige ruimte om de inzoomers boven/onder en aan de zijkanten volledig te kunnen tonen zonder schade aan de rest van de pagina.
  • Samen ben je uit en thuis voor nog geen 6kB.

Voor de html blijft er dan alleen over:
HTML:
<noscript><p>(Attentie: voor deze quiz is nodig dat Javascript in de browser is aangezet!)</p></noscript>
<div id="logobox">
	<ul>
		<li><a href="#niks" onclick="zoomIn(1); return false"><img src="images/logo_1.png" alt="" /></a></li>
		<li><a href="#niks" onclick="zoomIn(2); return false"><img src="images/logo_2.png" alt="" /></a></li>
		<li><a href="#niks" onclick="zoomIn(3); return false"><img src="images/logo_3.png" alt="" /></a></li>
		... enz. enz.
	</ul>
</div>
<div id="overlay" onclick="hideOlay()"></div>
De #overlay is de zoom-div die er overheen geplakt gaat worden, en via het javascript gevuld wordt.

Aldus:
  • Test: qz-zoomer.htm.

  • Getest en o.k. in Firefox, Chrome, Opera, Safari en IE7.
  • Deze keer enig vertrouwen in IE8 en IE9.
  • Bij nogmaals klikken op een groot logo klapt dit in 1 keer terug naar z'n normale stand; er zou met enig geduld ook nog een uitzoomer bij gemaakt kunnen worden.
  • Bij klikken op een ander logo dooft een eerdere grote automatisch uit, waar deze ook zit.
  • Is verder bestand tegen klikken als een logo nog bezig is met zoomen, en er tussentijds op een andere wordt geklikt.
  • In de css en het script zit toelichting bij de aanpak.
  • NB: script moet helemaal op het eind staan, vlak voor de </body>.

PS: Inmiddels heb je wat dingen veranderd/aangevuld in de originele pagina, zie ik nu - daar is nog geen rekening mee gehouden (dat kon ik eerder niet zien omdat ik in m'n schuurtje zat).
Ik heb 7 stuks naast elkaar aangehouden, omdat de pagina dan ook nog mooi op een scherm van 1024*768px past.

Met vriendelijke groet,
CSShunter
 
Laatst bewerkt:
alweer een paar dagen de tijd gehad om van je reactie gebruik te maken :)

  • ik heb de indeling omgegooid naar een list, dit blijkt toch een veel handiger element te zijn om te stylen :)
  • Tevens ga ik toch jQuery behouden ook omdat ik dadelijk met $.post() een hoop tijd bespaar. Volgens mij komt de styling nu een heel eind overeen, ook in IE7 (weliswaar zonder jQuery. jammer dan; moet je maar je browser updaten :P)
  • De script-tag laat ik momenteel nog even bovenaan staan, iets handiger coderen naar mijn mening :). Later ga ik hem includen in de head net als de css
  • De shadow laat ik ook zoals hij is; ik kan gaan zitten plaren met die background image maar omdat de styling wellicht gaat veranderen verander ik liever .CSS dan .PSD :)

hoe dan ook hardstikke bedankt voor je (meer dan uitgebreide) reactie! Ik heb hier en daar wat snippets eruit gehaald en natuurlijk de validator eroverheen laten fietsen.

Volgende doelen:
  • MySQL database setup maken, met hierin informatie over de logo's waaronder de
  • -- Naam
  • -- Datum
  • -- Hoofdkleur
  • -- Oorspronkelijk land van het bedrijf
  • -- Specialisatie
  • Specialisaties in andere tabel met foreign key verwijzingen (nog even een schema uitwerken hiervoor)
  • jQuery-post() en het checken van de invoer e.d.

Ik weet het forum wel te vinden als ik weer tegen problemen aanloop, maar het lastigste heb ik hoop ik gehad nu :)

gegroet,
Flame
 
Laatst bewerkt:
Hoi Flame,
indeling omgegooid naar een list
Ja, lijstjes werken erg handig met css! :)

De samenwerking van IE7 met jQuery is idd niet optimaal: na een hover over een item komt de default-border niet meer terug, en schuiven de items een stukje op, met soms een regel-drop tot gevolg. Zie screenshot. En bij een daarop volgende hover (als het hover-randje er weer wel komt) springt alles heen en weer.
:confused:
Het blijkt te verhelpen door in de jQuery-settings expliciet de terugkeer naar de oude border (vanaf hover en vanaf de vergroting) te vermelden:
[JS]$(".logo").on("mouseout", function() {
$(this).css({
"cursor" : "",
"background-color" : "",
"border" : "1px solid #999999"
});
});

function makeSmaller(selector) {
selector.css({
...
"border" : "1px solid #999999",
...
});
...[/JS]

=======
IE7 staat ook op gespannen voet met de css voor het annuleer-kruisje in de vergroting. Daarvan wordt maar de helft getoond.

qz-screenshot-ie7-c.png

Of dit ook in IE8 en/of IE9 speelt kan ik niet checken.
Uit medelijden met in ieder geval de arme IE7-surfers;) kan dit hersteld worden door wat css-aanpassingen. Van de .logoclose {...} kunnen de width, height en de line-height verwijderd worden (met maten in relatie tot de font-size heeft IE altijd geworsteld).
De positie van het kruisje kan vervolgens via de margins ingesteld worden:
Code:
.logoclose {
    ...
    margin: -7px 3px 0 0;
}
De andere browsers (Firefox, Chrome, Opera en Safari) hebben hier geen bezwaar tegen.

=======
IE7 heeft ook het onderste randje van de input-vakjes verdonkeremaand.

qz-screenshot-ie7-d.png

Hier is de oplossing om de border niet aan de .logo form {...} op te hangen, maar aan de .logo form div input {...}.
En ook hier hebben de andere browsers geen last van, dus er hoeven geen Conditional Comments aan te pas het komen. :)

=======
Tenslotte heeft IE de onhebbelijkheid om de alt="..." bij een image altijd als tooltip te tonen. Bij (in ieder geval) IE7 komt ook het verschijnsel dat IE niet goed met de stapeling van de z-indexen overweg kan, en bij een hover over een input-veld vrolijk de alt toont van het image dat daar onder zit: altijd 7 volgnummers verder, en goed om de bezoekers in prettige verwarring te jagen!

qz-screenshot-ie7-e.png

Hier zou m'n suggestie zijn: aan alle images een lege title="" toevoegen, waardoor het tonen van de alt-tooltip bij IE verhinderd wordt.

=======
Testpagina met de IE-aanpassingen: bliksekaters.nl/tests/qz-nw.htm

Zo! Als Microsoft boekenbonnen ging uitdelen voor alle workarounds om hun IE-bugs te pareren, zouden ze tragisch failliet zijn. :d

Met vriendelijke groet,
CSShunter
 
O, deze nog:
De script-tag laat ik momenteel nog even bovenaan staan, iets handiger coderen naar mijn mening. Later ga ik hem includen in de head net als de css.
Externe scripts = prima.
Maar niet linken in de head, maar op het eind: "Put css in the head, javascript at the bottom".



En zeker gezien het grote aantal te downloaden logo'tjes (ruim 100 allemaal afzonderlijke http-requests!): een beetje snelle pagina kan je best gebruiken! :)

Met vriendelijke groet,
CSShunter
 
Allereerst nog een handigheidje gevonden: in IE9 als je op F12 drukt (developer tools/ontwikkelhulpprogramma's) krijg je een venstertje onderaan, hierin kun je switchen tussen de engines :) (zie afbeelding, het is de originele engine zover ik weet)
ie7inie9.png


Verder:
  • IE7 Kruisje gefixt: inderdaad een domme aanpak van mij, line-height half zo hoog als de div :p
  • Scripts toch maar onderaan geplant :)
  • De laadtijd van de site ga ik nog beperken door wat paging toe te voegen aan de logo's. Niet alles hoeft in 1x bekeken te worden namelijk :) puntje voor later
  • IE7 Border nog niet gefixt, even kijken wat ik daarmee ga doen. Als jouw oplossing de enige is dan zal ik die gebruiken. vindt een lege style="" toch mooier en logischer dan eentje met een border-code erin die ook al in de css zelf staat
  • IE7 title gefixt, toch raar dat je door iets leegs toe te voegen iets vols kan verstoppen :p (er werd dus blijkbaar title gebruik ipv alt. er was geen title dus pakken ze maar alt :))

thanks again :)
Flamedog
 
handigheidje gevonden: in IE9 ...
Ja, best handig voor de IE-bezitters...
... maar ik ben een uiterst tevreden XP-gebruiker, en ik kan niet op IE9 overstappen zonder Win7 te kopen. M'n neus uit! Ik ga toch geen nieuw OS aanschaffen om de laatste browserversie te kunnen laten draaien?!
Dat heet koppelverkoop (eigenlijk: "koop-eerst-voor-gratis-browser")! :mad:
Firefox, Chrome, Opera en Safari doen het uitstekend op XP, met ook nog css3 en html5 waar IE9 nog niet aan toe is. :d

=======
vind een lege style="" toch mooier en logischer dan eentje met een border-code erin die ook al in de css zelf staat
Dat is te zeggen; in normaal javascript is het vervangen van een css style-eigenschap door een lege string het vernietigen ervan (= terug naar browser-default), en niet het terugkeren naar de zelf opgegeven css-style. Wil je die weer terug, dan moet dat expliciet aangegeven worden. *)
Via jQuery loopt dat kennelijk anders (behalve dan voor IE; maar waarom het dan in IE wel weer goed gaat met de lege background-color, snap ik niet).

Groetjes,
en succes met de verdere besognes!
CSShunter
__________
*) Geheel analoog aan het vervangen van bv. een inner.HTML. Stel je hebt:
HTML:
<div id="vuldiv">te vullen met javascript</div>
met:
[JS]var nwTxt = 'mijn nieuwe tekst';
document.getElementById('vuldiv').innerHTML=nwTxt;[/JS]
en je klikt dat later met javascript weer weg met:
[JS]document.getElementById('vuldiv').innerHTML="";[/JS]
dan wordt de vuldiv helemaal leeg, en komt niet de oude tekst "te vullen met javascript" in de div terug.
- Dat vind ik nou weer logisch. Maar over schoonheid en logica valt niet te twisten! :)
 
volgens mij had ik het verkeerd uitgelegd:
HTML:
<style>
#vakje {
background-color: #0000ff;
}
</style>

<div style="background-color: #ff0000"></div>

De kleur is nu rood (#ff0000). Als ik nu met jQuery doe:
Code:
$("#vakje").css({ "background-color" : "" });

dan wordt de div in de HTML dus:
HTML:
<div style=""></div>

Er is geen waarde voor de inline-css-style dus wordt er teruggesprongen op de <style></style> inhoud, en wordt de kleur weer blauw (#0000ff).

Bij javascript innerHTML is het inderdaad een ander verhaal :)
 
Laatst bewerkt:
Hoi Flame,
Ah, ik had een beetje vlug over de standaard css heen gelezen, en dan liepen we net even langs elkaar heen.
Bij dit gewone javascript reageert IE(7) als de rest, maar via jQuery dus niet.
Conclusie: IE blijft toch een raar ding.

=======
IE7 title gefixt, toch raar dat je door iets leegs toe te voegen iets vols kan verstoppen :P
:D - Ja, ik had eens dit matrixje van IE-omgang met volle en lege alt/title's gemaakt. Conclusie: IE blijft toch een raar ding.

=======
Nog even deze:
Scripts toch maar onderaan geplant
Mooi, maar je moet nu ook weer niet overdrijven. :P
(In de huidige logoquiz-versie staan de 2 scripts nu onder de </html> ipv op het laatst binnen de </body></html>; letterlijk genomen zouden browsers alles wat buiten het html-document staat niet eens mogen behandelen / de html-validator floept er ook van op rood)

Met vriendelijke groet,
CSShunter
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan