webForumDet fria alternativet

Style i noscript-taggen?

HTML & CSS

14 svar · 532 visningar · startad av Travoni

Medlem sedan okt. 20041 556 inlägg
Frågan#1

Detta validerar fel på w3c.

<noscript>
	<style type="text/css">
			#foo table{ display:none; }
			.bar{ display:block; }
	</style>
</noscript>

validator.w3.org skrev:

The element named above was found in a context where it is not allowed. This could mean that you have incorrectly nested elements -- such as a "style" element in the "body" section instead of inside "head" -- or two elements that overlap (which is not allowed).

Vilket i och för sig inte stämmer.

Dumt att det inte är godkännt. Finns det någon workaround?

Medlem sedan juni 200032 967 inlägg
#2

Lägg <style> utanför <noscript> och använd css:en inuti?

Medlem sedan okt. 20041 556 inlägg
#3

Nä, då får jag:

Line 13 column 11: end tag for element "NOSCRIPT" which is not open.

</noscript>

The Validator found an end tag for the above element, but that element is not currently open

Medlem sedan juni 200032 967 inlägg
#4

Öh, hur ser din kod ut då?

jag menade förstås att du skulle lägga hela css-blocket på någonstans som inte är inne i noscript-blocket.

Medlem sedan okt. 20041 556 inlägg
#5

Kanske gjorde fel.

	<style type="text/css">
             /* Annan CSS */
            <noscript>
			#foo table{ display:none; }
			.bar{ display:block; }
            </noscript> 
	</style>

Fel? Hur menade du?

Medlem sedan juni 200032 967 inlägg
#6
<style>
....
</style>
(typ där du har annan css-kod på sidan)

....

<noscript>
....
</noscript>
Medlem sedan okt. 20001 285 inlägg
#7

...

Medlem sedan juni 200032 967 inlägg
#8

Fuel, man får alltså ha <link> var som helst, men <style> endast i <head>?

Medlem sedan dec. 20042 245 inlägg
#9

NOSCRIPT får endast innehålla blockelement. Blockelement får man inte ha i HEAD och därför får man inte ha NOSCRIPT i HEAD heller. (LINK får endast förekomma i HEAD också.)

Det du vill göra är att ha annan CSS när JS är aktiverat. En enkel lösning på det problemet är att göra såhär:

<script type="text/javascript">
 document.body.className += " hasjs";
</script>

...och sen lägga till ".hasjs" före dina selektorer (i din vanliga stilmall) som bara ska användas när JS är aktiverat.

Medlem sedan okt. 20001 285 inlägg
#10

...

Medlem sedan mars 20041 505 inlägg
#11

Jag slängde ihop ett Javascript som helt enkelt infogar ett stylesheet i ett dokument.

<script type="text/javascript">
var linkTag = document.createElement('link');
linkTag.setAttribute('rel','stylesheet');
linkTag.setAttribute('type','text/css');
linkTag.setAttribute('href','javastyle.css');
document.getElementsByTagName('head').item(0).appendChild( linkTag );
</script>

Så CSS-koden i filen javastyle.css kommer alltså bara att användas om man har Javascript aktiverat!
Blev riktigt nöjd med lösningen själv måste jag säga :i

Medlem sedan okt. 20041 556 inlägg
#12

Ok, varför inte med document.write?

<script type="text/javascript">
    docuement.write('<link rel="stylesheet" href="script.css" type="text/css" />');
</script>
Medlem sedan sep. 200614 inlägg
#13

Därför att link-taggen ska hamna i head-taggen? Antar jag?

Medlem sedan mars 20041 505 inlägg
#14

Moberg, dels det, samt att det är lite modernare och bättre att koda Javascript med hjälp av DOM-metoderna.

Medlem sedan dec. 20042 245 inlägg
#15

SCRIPT kan också förekomma i HEAD så om man lägger document.write()-skriptet i HEAD hamnar länken på rätt plats. Det är inget fel på document.write() egentligen, förutom att det inte är definierat hur det ska fungera i XML ännu (och stöds därför inte i XHTML i webbläsare än). Den praktiska skillnaden mellan DOM-skriptet och document.write()-skriptet är att det senare är lättare att skriva, stöds bättre i webbläsare och är snabbare att köra. (Om DOM-skriptet ska köras i XHTML borde man använda createElementNS() istället.)

268 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)