elm-ui 换行中的居中元素

elm-ui center elements in wrapped row

我将 Elm 与 mdgriffiths/elm-ui 一起使用,我真的很喜欢它。现在,我正在尝试创建一个居中、环绕的元素行:

我能做到这一点:

使用此代码:

button : String -> String -> Element Msg
button label url =
    link
        [ height (px 150)
        , width (px 150)
        , Border.width 1
        , Background.color (rgb255 255 255 255)
        ]
        { url = url
        , label =
            Element.paragraph
                [ Font.center ]
                [ textEl [] label ]
        }


row : Element Msg
row =
    Element.wrappedRow
        [ Element.spacing 25
        , Element.centerX
        , Element.centerY
        , width (fill |> Element.maximum 600)
        , Font.center
        ]
        [ button "A" "/a"
        , button "B" "/b"
        , button "C" "/c"
        , button "D" "/d"
        ]

但是当我尝试像这样将 Element.centerX 添加到我的按钮时

link
    [ Element.centerX
    , ...
    ]

我改为:

我也试过Font.center没成功,不知道还能试什么

我不确定我是否遗漏了一些我应该使用的东西,或者整个东西是否需要重新安排,或者我是否只需要使用内置的 CSS 东西。

更新:

Link 向 Ellie 报告我遇到的问题。

https://ellie-app.com/7NpM6SPfhLHa1

这个Github issue对这个问题很有用。恐怕您将不得不使用一些 CSS(除非我遗漏了什么)。我以前用 elm-ui; 发现过这个有时它不能 quite 做你想做的事,你需要一点 CSS.

这对我有用(摘自上面 link 中 AlienKevin 的 post)。您需要将 "marginLeft" 和 "marginRight" 设置为 "auto"。

module Main exposing (main)

import Element as E
import Element.Border
import Html.Attributes


box : String -> E.Element msg
box label =
    E.paragraph
        [ E.width <| E.px 200
        , Element.Border.width 1
        , E.htmlAttribute (Html.Attributes.style "marginLeft" "auto")
        , E.htmlAttribute (Html.Attributes.style "marginRight" "auto")
        ]
        [ E.text label ]


row : E.Element msg
row =
    E.wrappedRow []
        [ box "A"
        , box "B"
        , box "C"
        ]


main =
    E.layout [] row

(请参阅 here 的 Ellie。)

您还可以执行以下操作:

  1. 定义以下elm-ui classes。我通常为此设置一个 UI.elm 模块
centerWrap : Attribute msg
centerWrap =
    Html.Attributes.class "centerWrap"
        |> htmlAttribute


dontCenterWrap : Attribute msg
dontCenterWrap =
    Html.Attributes.class "dontCenterWrap"
        |> htmlAttribute
  1. 将以下内容添加到您的 css。如果有 centerWrap class 但没有 dontCenterWrap class.
  2. ,基本上说中心元素
:not(.dontCenterWrap).centerWrap>div.wrp {
    justify-content: center !important;
}
  1. 应用属性
    wrappedRow [ width fill, UI.centerWrap, spaceEvenly ] [...]
  1. 假设您创建了一个 centerWraps 的自定义元素并想禁用它,您可以使用 UI.dontCenterWrap
centerWrappedRow attr children =
    wrappedRow (UI.centerWrap :: attr) children

-- somewhere else
...
    centerWrappedRow [UI.dontCenterWrap] [..]
...