Elm似乎不支持HTML文档的头节点<head>..</head>
。
问题是为什么不支持具有合适功能的完整HTML文档。看起来这样的包含将允许方便地使用外部资源,例如样式表。
除DOCTYPE
外,HTML标记统一为tagName attrList elmList
。也许可以编制一组appendAttr
和appendElm
函数,以便灵活地指定更全面的VirtualDom
。
我错过了什么吗?
答案 0 :(得分:5)
当您的Elm代码加载并开始运行时,浏览器已经读取了包含Elm代码的HTML页面的<head>
,因此影响{{{}的内容为时已晚1}}。
可以将Elm嵌入到页面中的元素中,也可以全屏运行(这似乎会将子项添加到<head>
)。 Elm只能操纵容器内的内容,而不能操纵容器内的内容。特别是,Elm生成的所有元素都将包含在文档的<body>
中,而<body>
是<head>
的兄弟。
可以使用<body>
生成您喜欢的任何名称的HTML元素。因此可以在Elm中创建Html.node "elementName"
元素。但是,以这种方式创建的<head>
元素最终会在<head>
内,我希望浏览器会忽略它。
答案 1 :(得分:2)
Elm是一种(大部分)纯粹的功能性语言,意味着它试图尽量减少可能导致错误的所有副作用。由于elm编译器无法知道运行时是否存在CSS文件,因此无法确定是否包含CSS文件会导致错误。因此,未来可能会包含这些内容。
话虽如此,NoRedInk的Rtfeldman创建了回购https://github.com/rtfeldman/elm-css,允许榆树代码镜像CSS,确保安全。
为了让你的身体具有某种颜色的背景颜色,这个榆树代码就足够了:
[ body
[ backgroundColor (rgb 200 128 64)
, color (hex "CCFFFF")
]
]
并将为您编译为.css
文件。
答案 2 :(得分:2)
卢克的回答当然是完全正确的,但没有什么能阻止你通过端口使用javascript更新文档的头部。以下是更新标题(选项卡名称)的示例。
在Elm
port module Ports exposing (..)
port title : String -> Cmd msg
使用这种更新功能
update message model =
case message of
SetTitle name ->
(model, Ports.title name)
在Javascript中
var elm = Main.fullscreen();
elm.ports.title.subscribe( title => {
document.title = title;
});