Will'inkine biraz benzeyen basit ve esnek bir çözümüm var (ancak geçerli html olma avantajıyla birlikte):
Gövde elemanına bir "jsOff" sınıfı verin. Bunu JavaScript ile kaldırın (veya değiştirin). "JsOnly" sınıfına sahip öğeleri, "jsOff" sınıfına sahip bir üst öğe ile gizlemek için CSS'ye sahip olun.
Bu, JavaScript etkinleştirilirse, "jsOff" sınıfının gövdeden kaldırılacağı anlamına gelir. Bu, "jsOnly" sınıfına sahip öğelerin "jsOff" sınıfına sahip bir ebeveyni olmayacağı ve dolayısıyla onları gizleyen CSS seçiciyle eşleşmeyeceği, dolayısıyla gösterilecekleri anlamına gelir.
JavaScript devre dışı bırakılmışsa, "jsOff" sınıfı olmayacak vücuttan çıkarılmalıdır. "JsOnly" ile Elemanları olacak "jsOff" ile bir üst var ve bu yüzden olacak gizler onları, böylece gizli olacağı CSS seçici maç.
İşte kod:
<html>
<head>
<!-- put this in a separate stylesheet -->
<style type="text/css">
.jsOff .jsOnly{
display:none;
}
</style>
</head>
<body class="jsOff">
<script type="text/javascript">
document.body.className = document.body.className.replace('jsOff','jsOn');
</script>
<noscript><p>Please enable JavaScript and then refresh the page.</p></noscript>
<p class="jsOnly">I am only shown if JS is enabled</p>
</body>
</html>
Geçerli html. Basit. Esnek.
Yalnızca JS etkinleştirildiğinde görüntülemek istediğiniz herhangi bir öğeye "jsOnly" sınıfını eklemeniz yeterlidir.
Lütfen "jsOff" sınıfını kaldıran JavaScript'in body etiketi içinde olabildiğince erken çalıştırılması gerektiğini unutmayın. Gövde etiketi henüz orada olmayacağından daha önce çalıştırılamaz. "JsOnly" sınıfına sahip öğelerin hemen görünmeyebileceği anlamına geleceği için daha sonra çalıştırılmamalıdır (çünkü "jsOff" sınıfı gövde öğesinden kaldırılıncaya kadar bunları gizleyen CSS seçiciyle eşleşeceklerdir).
Bu aynı zamanda yalnızca js stiline (örneğin .jsOn .someClass{}
) ve yalnızca js içermeyen stillere (örneğin ) yönelik bir mekanizma sağlayabilir .jsOff .someOtherClass{}
. Aşağıdakilere bir alternatif sağlamak için kullanabilirsiniz <noscript>
:
.jsOn .noJsOnly{
display:none;
}