Archief - JS: margintop en IE

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

BloodSeaker

Legacy Member
Hoi

Ik ben op het werk bezig met een scriptje en er is een probleem met mijn absolute positionering. Ik gebruik javascript om de margintop te bepalen van een element. Daarvoor gebruik ik een getStyle functie die eigenlijk rechtstreeks komt uit 'Pro Javascript Techniques' van John Resig. (zie onderaan) In IE echter krijg ik geen waarde terug (wel undefined als ik de variabele in een alert stop) terwijl de waarde 411 zou moeten zijn. (handmatig gemeten met JRuler). Weet er iemand hoe dit komt en hoe dit op te lossen valt? Handmatig in men JS 411 tikken zie ik niet zitten met betrekking op toekomstige projecten waar dit mogelijk gebruikt zal worden

Code:
function getStyle(elem, name)
{
    if(document.defaultView && document.defaultView.getComputedStyle)
    {
        name = name.replace(/([A-Z])/g,"-$1");
        name = name.toLowerCase();
        
        var s = document.defaultView.getComputedStyle(elem,"");
        return s && s.getPropertyValue(name);
    }
    else if(elem.style[name])
        return elem.style[name];
    else if(elem.currentStyle)
    {
		return elem.currentStyle[name];
	}
    else
    {
        return "";
    }
}

L0|2|23

Legacy Member
De meest crossbrowser oplossing voor css properties die instelbaar zijn voor de verschillende zijdes van hun subject is door de property op te vragen voor margin-top (en analoog border-top, padding-top, ...). Dit heeft te maken met de manier waarop de computed styles inwendig worden opgeslagen. Nu, dit doe je al aangezien je zoiezo al de topmargin nodig had, dus hier geen problemen.

De getStyle die je daar gebruikt vind ik eigenlijk niet geweldig (hoewel je kan argumenteren dat het een kwestie van smaak is). De getStyle methode zoals geformuleerd door PPK vind ik een aantrekkelijker vertrekpunt.

De problemen die ik met deze versie heb zijn oa:
* Je moet je propertynames opgeven zoals ze in hun javascript variant genoteerd worden.
* Object detectie van style heeft voorrang op currentStyle in IE.
* De imho twee redundante gevallen die opgevangen worden (de laatste else en de style property object detection).
* De returntype is altijd een string (vaak wil je bv met px waarden gaan rekenen).

Om jou probleem op te lossen zou ik dus nakijken dat je voor de var name 'marginTop' hebt opgegeven (en niet 'margin-top') en anders eventueel die elem.style[name] case gewoon deleten omwille van voorgaande opmerkingen.

BloodSeaker

Legacy Member
Sorry voor de late reactie (verlof op werk gehad en thuis niet meer online gekomen en zo)

De GetStyle van PPK is beter zeg je, waar is die ergens te vinden dan :/

Ik ga in elk geval je opmerkingen noteren en alvast de functie aanpassen.

BloodSeaker

Legacy Member
Hoi


Ik heb die inderdaad gebruikt, maar dan een aangepaste versie zodat hij margin-top naar marginTop omzet automatisch.
Dit blijft echter 0px opleveren lijkt het. Ik zou zeggen: ik post mijn script, maar ik hou het op dit moment liever nog wat 'geheim' tot het online komt op de site van de klant. Dus indien iemand er eens naar wenst te kijken, dan kan ik het eventueel doormailen. Gewoon ff via PM een berichtje laten met het e-mail adres :)
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan