我从 Elm 开始,当你想设置样式时,你可以简单地将它嵌入到你的组件中:Html.Attribute.style List (String, String)
但是我找不到 获得 样式而不是设置的方法。实际上,我需要的是特定 line-heightHtml msg (CSS 属性)。我阅读了一些关于使用自定义解码器(使用 Json.Decode.at )的内容,但我仍然没有明白。

最佳答案

Mateus,我刚开始用榆树,所以物有所值。

当您收到一个事件时,您可以询问事件目标以获取有关它的信息或相关元素。显然,如果没有事件,(当前)没有办法在不经意间拔出值时“进入”DOM(见下面的*1)

资源:

*1:https://medium.com/@debois/elm-the-dom-8c9883190d20

*2:https://robots.thoughtbot.com/building-custom-dom-event-handlers-in-elm

回到你的问题,原来设置为样式 [(key1, val1)...(keyn, valn)] 变成了 {key1:val1, ...keyn:valn} 。 (我通过调试 elm 的转译代码找到了这一点……然后在其他地方查看有关它的文档;去图。)

请参阅下文以获取具体的行高。我想获取所有样式的列表可能更有用。修改后的样本如下:

import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (on)
import Json.Decode


main =
  beginnerProgram { model = "", view = view, update = update }

type Msg = Attr StyleStruct

type alias StyleStruct =
  {lineHeight: String}


view model =
  div []
    [ button [ id "btn"
        , class "cls"
        , style [("color", "green"), ("line-height", "3em")]
        , myOnClick Attr ]
        [ text "Show line-height" ]
    , div [] [ text ("(" ++ model ++ ")")]
    ]

update msg model =
  case msg of
    Attr v1 ->
      toString v1

targetStyle =
  Json.Decode.map StyleStruct
    (Json.Decode.at ["target", "style"] styleStructDecoder)

styleStructDecoder =
  Json.Decode.at ["line-height"] Json.Decode.string


myOnClick : (StyleStruct -> msg) -> Html.Attribute msg
myOnClick tagger =
  on "click" (Json.Decode.map tagger targetStyle)

关于css - 如何在 Elm 中获得风格,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43398381/

10-12 17:37