I’ve been having issues figuring out the best approach to style Elm 19 applications. Here is what I’ve been trying but to no avail:
module Main exposing (..)
import Browser
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Styled.Attributes exposing (css)
import List exposing (..)
import Css exposing (..)
type alias Model = List Status
type alias Status = { status : String }
main =
Browser.element
{ init = init
, view = view
, update = update
, subscriptions = subscriptions
}
-- Note: I removed the init, update, and subscriptions functions from this code snippet as it does not seem like they were relevant to my question.
view : Model -> Html Msg
view model =
main_
[ css
[ color (hex "ffffff")
, backgroundColor (hex "000000")
, Css.height (vh 100) ]
]
[ h1
[ css [ margin (px 0) ] ]
[ text "The title of my app" ]
, input [ value ""] []
]
The compiler points out that the problem I’m having in main_
is the following:
<!-- language: lang-none -->
This argument is a list of type:
List #(Html.Styled.Attribute msg)#
But `main_` needs the 1st argument to be:
List #(Attribute msg)#
Here is the elm.json
file:
{
"type": "application",
"source-directories": [
"src"
],
"elm-version": "0.19.1",
"dependencies": {
"direct": {
"elm/browser": "1.0.2",
"elm/core": "1.0.5",
"elm/html": "1.0.0",
"elm/time": "1.0.0",
"ianmackenzie/elm-units": "2.9.0",
"justinmimbs/date": "4.0.1",
"rtfeldman/elm-css": "18.0.0"
},
"indirect": {
"elm/json": "1.1.3",
"elm/parser": "1.1.0",
"elm/url": "1.0.0",
"elm/virtual-dom": "1.0.3",
"robinheghan/murmur3": "1.0.0",
"rtfeldman/elm-hex": "1.0.0"
}
},
"test-dependencies": {
"direct": {},
"indirect": {}
}
}
I suspect that I might be using an old version of elm-css
or something along these lines but I'm having a hard time understanding what's not working here for me.
In order to use elm-css
you need to have a conversion from Html.Styled.Html
to Html.Html
using Html.Styled.toUnstyled
. This means you need to have import Html.Styled exposing (..)
instead of import Html exposing (..)
This means that main_
will be Html.Syled.main_
instead of Html.main_
(as it is right now).
You could then add at the end of your view
code |> Html.Styled.toUnstyled
and everything should work out fine.