You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Elm中使用单独的外部CSS文件,支持Browser.Document/Application?

在Elm中使用外部样式表并非只能通过Browser.element实现,Browser.Document和Browser.Application都有非常简便的引入方案,不需要使用Elm编写CSS的相关库也能直接加载现成的spectre.min.css。

方案1:直接修改宿主HTML(最简便,零Elm代码改动)

不管你使用哪种Browser入口,Elm程序始终运行在你提供的HTML文档上下文内,全局引入的CSS对所有Elm渲染的元素都生效。你完全可以沿用你示例中的HTML写法,只需要确保HTML的<head>标签内保留样式表引入即可:

<!doctype html>
<html>
  <head>
    <link rel="stylesheet" href="spectre.min.css">
    <script src="elm.js"></script>
  </head>
  <body>
    <div id="elm-app-is-loaded-here"></div>
    <script>
      var app = Elm.Main.init({
        node: document.getElementById("elm-app-is-loaded-here")
      });      
    </script>
  </body>
</html>

哪怕你把入口切换为Browser.Document或者Browser.Application,这个写法依然有效,不需要调整任何Elm逻辑。

方案2:在Elm代码中引入样式表

如果你希望把样式表的引入逻辑放在Elm代码中统一管理,不需要修改HTML,也可以直接在顶层view函数中插入link节点:

首先导入依赖:

import Html exposing (Html, node)
import Html.Attributes exposing (rel, href)

之后在view返回的节点列表中加入样式表引入即可,以Browser.Document为例:

view : Model -> Document Msg
view model =
  { title = "你的页面标题"
  , body = 
      [ node "link" [ rel "stylesheet", href "spectre.min.css" ] []
      -- 你原本的页面内容节点
      , div [] [ text "页面内容" ]
      ]
  }

Browser.Application的写法同理,直接在顶层view的节点列表开头添加上述link节点即可,浏览器会自动加载样式表并全局生效。

内容的提问来源于stack exchange,提问作者John Smith Optional

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:15:02