为什么Elm不提供HTML文档头标记?

Geo*_*rge 4 html dom elm

Elm似乎不支持HTML文档的头节点<head>..</head>.

问题是为什么不支持具有合适功能的完整HTML文档.似乎这样的包含将允许方便地使用诸如样式表之类的外部资源.

除此之外DOCTYPE,HTML标签是统一的,tagName attrList elmList.也许可以编造一组appendAttrappendElm功能,以便灵活地指定更全面的VirtualDom.

我错过了什么吗?

Sim*_*n H 6

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)


Luk*_*ard 5

当您的Elm代码加载并开始运行时,浏览器已经读取了<head>包含Elm代码的HTML页面,因此影响内容的时间已经太晚了<head>.

Elm可以嵌入到页面中的元素中,也可以全屏运行(这似乎可以添加子项<body>).Elm只能操纵容器内的内容,而不能操纵容器内的内容.特别是,Elm生成的所有元素都将包含在<body>文档中,而<head>它是兄弟的元素<body>.

可以使用您喜欢的任何名称生成HTML元素Html.node "elementName".因此可以<head>在Elm中创建一个元素.但是,以<head>这种方式创建的元素最终会进入内部<body>,我希望浏览器可以忽略它.


Dav*_*vid 3

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为您编译为文件。