Un script
élément qui a été stylé comme display:block
apparaît visible. Pourquoi est-ce possible et existe-t-il un cas d'utilisation réel où cela est souhaité?
td > * {
display: block;
}
<table>
<tr>
<td>
<script type="text/javascript">
var test = 1;
</script>von 1
</td>
</tr>
</table>
html
css
script-tag
wutzebaer
la source
la source
<style>
avec un contenu modifiable. Belle façon de voir les effets en temps réel.Réponses:
La spécification HTML5 définit une feuille de style que les agents utilisateurs (comme les navigateurs) sont censés utiliser. La section 10.3.1 répertorie les styles des «éléments cachés»:
Comme vous pouvez le voir, cela s'applique
display: none;
àscript
.C'est la seule "barrière" entre vos utilisateurs et les
script
éléments cachés . C'est parfaitement bien et destiné à pouvoir écraser les styles des feuilles de style de l'agent utilisateur dans les feuilles de style de l'auteur (et bien sûr aussi dans les feuilles de style de l'utilisateur).Pourquoi quelqu'un voudrait-il l'utiliser? Un cas d'utilisation est d' afficher du contenu sans avoir à échapper des caractères comme
<
/>
, similaire à l'ancienxmp
élément. L'script
élément peut être utilisé non seulement pour les scripts, mais aussi pour les blocs de données (c'est-à-dire pour tout ce qui est de type MIME).la source
<script>
- les blocs de données ne peuvent pas être chargés parsrc
.src
attribut n'est pas autorisé sur l'script
élément.Parce qu'ils sont des éléments HTML comme les autres et qu'il n'y a aucune raison d'écrire des règles de cas particuliers dans la spécification HTML (ce qui ajouterait de la complexité) pour empêcher le CSS de s'y appliquer.
Tout élément peut être stylisé. Prends pour exemple:
Certainement pas de règles communes, mais les règles générales ne sont pas conçues pour avoir un sens pour tout ce à quoi vous pouvez les appliquer. Ils sont conçus pour les cas courants.
la source
user agent stylesheet: script {display:none}
<script type="text/plain">
comme vous le pouviez<xmp>
dans le passé, mais toujours compatible avec le validateur W3C.script {display: block !important;}
fonctionne pas lorsqu'il n'y a pas de règle de cas particulier?script
balise doit également être dans un élément visible - elle ne vous montrera quescript
dans le corps, pashead
par exemple par défaut.Un autre cas d'utilisation (pas courant):
J'utilise parfois des
<script>
balises pour de brefs exemples de code HTML dans les guides de style. De cette façon, je n'ai pas à échapper aux balises HTML et aux caractères spéciaux. Et la saisie semi-automatique des balises de l'éditeur de texte et la coloration syntaxique fonctionnent toujours. Mais il n'y a pas de moyen facile d'ajouter une coloration syntaxique dans le navigateur.la source
text/html
et d'utiliser quelque chose commeclass="codesample"
pour appliquer des styles. Juste pour des raisons pédantes: Dx-
préfixe standard pour les types personnalisés, c'est-à-dire le fairetext/x-example
.Cas d'utilisation possible: à des fins de débogage.
Vous pouvez appliquer une classe au niveau du document, par exemple.
<body class="debugscript">
, puis utilisez du CSS:la source
<html class="debugscript">
?<head>
scripts, car<head>
elle - même l'a égalementdisplay:none
, vous devrez donc le révéler de force, ce qui pourrait entraîner d'autres complications.Les balises de script sont masquées par défaut à l'aide de
display:none;
. Unor 1 explique la spécification du langage sous-jacent. Cependant, ils font toujours partie du DOM et peuvent être stylisés en conséquence.Cela dit, il est important de garder à l'esprit exactement ce que fait une balise de script. Alors qu'il était autrefois accompagné de types et de langues, cela n'est plus nécessaire. Il est maintenant supposé que JavaScript est là, et par conséquent, les navigateurs interpréteront et exécuteront le script lorsqu'il est rencontré (ou chargé) à partir de ces balises.
Une fois le script exécuté, le contenu de la balise est uniquement du texte (souvent masqué) sur la page. Ce texte peut être révélé, mais il peut également être supprimé car il ne s'agit que de texte.
Au bas de votre page, juste avant la
</html>
balise de fermeture , vous pourriez très facilement supprimer ces balises avec leur texte et il n'y aurait aucune modification de la page.Par exemple:
Cela ne supprimera aucune fonctionnalité, car l'état de la page a déjà été modifié et se reflète dans le contexte d'exécution global actuel. Par exemple, si la page avait chargé une bibliothèque telle que jQuery, la suppression des balises ne signifie pas que jQuery n'est plus exposé car il a déjà été ajouté à l'environnement d'exécution de la page. Cela fait essentiellement que l'outil d'inspection DOM n'affiche pas les éléments de script, mais cela met en évidence que les éléments de script une fois exécutés ne sont en réalité que du texte.
1. unor, jeu 07 juillet 2016, wutzebaer, "Quand les tags doivent-ils être visibles et pourquoi le peuvent-ils?", 1er juillet à 10h53, https://stackoverflow.com/a/38147398/1026459
la source