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 报告我遇到的问题。
这个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。)
您还可以执行以下操作:
- 定义以下elm-ui classes。我通常为此设置一个 UI.elm 模块
centerWrap : Attribute msg
centerWrap =
Html.Attributes.class "centerWrap"
|> htmlAttribute
dontCenterWrap : Attribute msg
dontCenterWrap =
Html.Attributes.class "dontCenterWrap"
|> htmlAttribute
- 将以下内容添加到您的 css。如果有 centerWrap class 但没有 dontCenterWrap class.
,基本上说中心元素
:not(.dontCenterWrap).centerWrap>div.wrp {
justify-content: center !important;
}
- 应用属性
wrappedRow [ width fill, UI.centerWrap, spaceEvenly ] [...]
- 假设您创建了一个 centerWraps 的自定义元素并想禁用它,您可以使用 UI.dontCenterWrap
centerWrappedRow attr children =
wrappedRow (UI.centerWrap :: attr) children
-- somewhere else
...
centerWrappedRow [UI.dontCenterWrap] [..]
...
我将 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 报告我遇到的问题。
这个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。)
您还可以执行以下操作:
- 定义以下elm-ui classes。我通常为此设置一个 UI.elm 模块
centerWrap : Attribute msg
centerWrap =
Html.Attributes.class "centerWrap"
|> htmlAttribute
dontCenterWrap : Attribute msg
dontCenterWrap =
Html.Attributes.class "dontCenterWrap"
|> htmlAttribute
- 将以下内容添加到您的 css。如果有 centerWrap class 但没有 dontCenterWrap class. ,基本上说中心元素
:not(.dontCenterWrap).centerWrap>div.wrp {
justify-content: center !important;
}
- 应用属性
wrappedRow [ width fill, UI.centerWrap, spaceEvenly ] [...]
- 假设您创建了一个 centerWraps 的自定义元素并想禁用它,您可以使用 UI.dontCenterWrap
centerWrappedRow attr children =
wrappedRow (UI.centerWrap :: attr) children
-- somewhere else
...
centerWrappedRow [UI.dontCenterWrap] [..]
...