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