Un script
elemento que se diseñó como display:block
aparece visible. ¿Por qué es posible y hay algún caso de uso real donde se desee?
td > * {
display: block;
}
<table>
<tr>
<td>
<script type="text/javascript">
var test = 1;
</script>von 1
</td>
</tr>
</table>
html
css
script-tag
wutzebaer
fuente
fuente
<style>
con contenido editable. Buena manera de ver los efectos en tiempo real.Respuestas:
La especificación HTML5 define una hoja de estilo que los agentes de usuario (como los navegadores) deben usar. La Sección 10.3.1 enumera los estilos para "Elementos ocultos":
Como puede ver, se aplica
display: none;
ascript
.Esta es la única "barrera" entre sus usuarios y
script
elementos ocultos . Está perfectamente bien y está diseñado para poder sobrescribir estilos de hojas de estilo de agente de usuario dentro de hojas de estilo de autor (y, por supuesto, también dentro de hojas de estilo de usuario).¿Por qué alguien podría querer usarlo? Un caso de uso es mostrar contenido sin tener que escapar caracteres como
<
/>
, similar alxmp
elemento anterior. Elscript
elemento puede usarse no solo para scripts, sino también para bloques de datos (es decir, para cualquier cosa con un tipo MIME).fuente
<script>
- los bloques de datos no pueden cargarsesrc
.src
atributo no está permitido en elscript
elemento.Debido a que son elementos HTML como cualquier otro y no hay razón para escribir reglas de casos especiales en la especificación HTML (lo que agregaría complejidad) para evitar que CSS se aplique a ellos.
Cualquier elemento puede ser estilizado. Toma por ejemplo:
Ciertamente no hay reglas comunes, pero las reglas generales no están diseñadas para tener sentido en todo lo que puede aplicar. Están diseñados para los casos comunes.
fuente
user agent stylesheet: script {display:none}
<script type="text/plain">
como lo hizo<xmp>
en el pasado, pero aún así es compatible con el validador W3C.script {display: block !important;}
no funciona cuando no hay una regla de caso especial?script
etiqueta también debe estar en un elemento visible: solo mostraráscript
su cuerpo, no,head
por ejemplo, de forma predeterminada.Otro caso de uso (no común):
A veces uso
<script>
etiquetas para ejemplos breves de código HTML en guías de estilo. De esa manera no tengo que escapar de las etiquetas HTML y los caracteres especiales. Y el editor de texto etiqueta autocompletar y el resaltado de sintaxis aún funcionan. Pero no hay una manera fácil de agregar resaltado de sintaxis en el navegador.fuente
text/html
y usar algo comoclass="codesample"
para aplicar estilos. Solo por razones pedantes: Dx-
prefijo estándar para tipos personalizados, es decir, hacerlotext/x-example
.Caso de uso posible: para fines de depuración.
Puede aplicar una clase a nivel de documento, por ejemplo.
<body class="debugscript">
, luego usa un poco de CSS:fuente
<html class="debugscript">
?<head>
scripts porque el<head>
mismo también lo tiene,display:none
por lo que deberías revelarlo por la fuerza, lo que podría conducir a más complicaciones.Las etiquetas de script están ocultas de forma predeterminada al usar
display:none;
. Unor 1 explica la especificación del lenguaje subyacente. Sin embargo, todavía son parte del DOM y se pueden diseñar en consecuencia.Dicho esto, es importante tener en cuenta exactamente lo que está haciendo una etiqueta de script. Si bien solía ir acompañado de tipos e idiomas, ya no es necesario. Ahora se supone que JavaScript está allí y, como resultado, los navegadores interpretarán y ejecutarán el script tal como se encuentra (o carga) desde estas etiquetas.
Una vez que se ha ejecutado el script, el contenido de la etiqueta es solo texto (a menudo oculto) en la página. Este texto se puede revelar, pero también se puede eliminar porque es solo texto.
En la parte inferior de su página, justo antes de la
</html>
etiqueta de cierre , puede eliminar fácilmente estas etiquetas junto con su texto y no habrá cambios en la página.Por ejemplo:
Esto no eliminará ninguna funcionalidad, ya que el estado de la página ya ha sido alterado y se refleja en el contexto de ejecución global actual. Por ejemplo, si la página había cargado una biblioteca como jQuery, eliminar las etiquetas no significará que jQuery ya no esté expuesto porque ya se ha agregado al entorno de tiempo de ejecución de la página. Esencialmente solo hace que la herramienta de inspección DOM no muestre elementos de script, pero resalta que los elementos de script una vez ejecutados realmente son solo texto.
1. unor, jue 07 de julio de 2016, wutzebaer, "¿Cuándo deberían estar visibles las etiquetas y por qué pueden hacerlo?", 1 de julio a las 10:53, https://stackoverflow.com/a/38147398/1026459
fuente