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

时间:2017-04-25 21:23:49

标签: html dom elm

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

问题是为什么不支持具有合适功能的完整HTML文档。看起来这样的包含将允许方便地使用外部资源,例如样式表。

DOCTYPE外,HTML标记统一为tagName attrList elmList。也许可以编制一组appendAttrappendElm函数,以便灵活地指定更全面的VirtualDom

我错过了什么吗?

3 个答案:

答案 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;
});