使用 CSS Flexbox 的仪表板标题

Posted

技术标签:

【中文标题】使用 CSS Flexbox 的仪表板标题【英文标题】:Dashboard header using CSS Flexbox 【发布时间】:2017-01-02 03:24:20 【问题描述】:

我想使用 CSS Flexbox 创建类似的东西:

我通常使用浮动和大量定位调整来实现这一点,在元素的顶部、底部、左侧和右侧添加边距、填充、百分比值以将其调整到某个视口,但它似乎在不同的视口中中断视口。

我知道这不是正确的方法,我最终编写了太多 CSS,但在不同的视口上仍然看起来不一致。

将徽标完美地放在中心并将它们垂直对齐是我苦苦挣扎的地方。

这是 html 代码。

<nav class="navbar">
    <div class="sidebar-toggle">
        <button class="sidebar-toggler" type="button">☰</button>
    </div>
    <div class="headerLogo">
        <a href="" class="logo">Logo</a>
    </div>
    <div class="headerLinks">
        <a href="">link1</a>
        <a href="">link2</a>
    </div>
    <div class="notifications">
        <div class="mailIcon"></div>
    </div>    
</nav>

【问题讨论】:

【参考方案1】:

您可以只使用justify-content: space-between 并获得正确的间距并使用align-items: center 进行垂直对齐。

.navbar,
.links 
  display: flex;
  align-items: center;
  justify-content: space-between;
<nav class="navbar">
  <div class="sidebar-toggle">
    <button class="sidebar-toggler" type="button">☰</button>
  </div>
  <div class="headerLogo">
    <a href="" class="logo">Logo</a>
  </div>
  <div class="links">
    <div class="headerLinks">
      <a href="">link1</a>
      <a href="">link2</a>
    </div>
    <div class="notifications">
      <div class="mailIcon">Mail</div>
    </div>
  </div>
</nav>

如果您希望徽标完全居中,则需要使用 position: absolute; 将其从元素流中删除

.navbar,
.links 
  display: flex;
  align-items: center;
  justify-content: space-between;
  position: relative;

.headerLogo 
  position: absolute;
  left: 50%;
  top: 50%;
  transform: translate(-50%, -50%);
<nav class="navbar">
  <div class="sidebar-toggle">
    <button class="sidebar-toggler" type="button">☰</button>
  </div>
  <div class="headerLogo">
    <a href="" class="logo">Logo</a>
  </div>
  <div class="links">
    <div class="headerLinks">
      <a href="">link1</a>
      <a href="">link2</a>
    </div>
    <div class="notifications">
      <div class="mailIcon">Mail</div>
    </div>
  </div>
</nav>

【讨论】:

【参考方案2】:

我稍微修改了您的标记以实现徽标居中。根本不需要使用绝对定位。 我们的想法是最终得到 3 个相同宽度的容器,沿主轴(行)均匀分布,这样徽标就可以正好落在布局的中间。

.navbar
    display:flex;
    align-items:center;


.sidebar-toggle
    display:flex;
    flex-basis:33.3%


.headerLogo
    display:flex;
    justify-content:center;
    flex-basis:33.3%


.headerLinks
    display:flex;
    justify-content:space-around;
    flex-basis:33.3%

我在第三个 div 中包含了 .mailIcon div。如果需要,您可以使用类似的样式在内部分发其内容。

<nav class="navbar">
    <div class="sidebar-toggle">
        <button class="sidebar-toggler" type="button">☰</button>
    </div>
    <div class="headerLogo">
        <a href="" class="logo">Logo</a>
    </div>
    <div class="headerLinks">
        <a href="">link1</a>
        <a href="">link2</a>
        <div class="mailIcon"></div>
    </div>
</nav>

您可以使用我创建的这个玩具来玩弄 flexbox: http://algid.com/Flex-Designer

【讨论】:

以上是关于使用 CSS Flexbox 的仪表板标题的主要内容,如果未能解决你的问题,请参考以下文章

Firefox 中的 Flexbox 溢出问题 [重复]

Mozilla Firefox 上的 CSS flex 框大小错误问题

将 tailwind css 构建为公共站点并将 vuetify 构建为管理仪表板

如何从 laravel 后端仪表板拆分 vuejs 组件的设计

使用 jQuery.UI CSS 框架进行 DIV 样式设置

离子 - 在另一个视图上刷新时不应用 CSS