Angular Material - 为啥我的 md 按钮是全角的?

Posted

技术标签:

【中文标题】Angular Material - 为啥我的 md 按钮是全角的?【英文标题】:Angular Material - Why is my md-button full-width?Angular Material - 为什么我的 md 按钮是全角的? 【发布时间】:2015-09-12 22:02:12 【问题描述】:

简单的问题,我已经制作了一个非常基本的页面来玩 Angular Material。我有一个在中型设备上可见的按钮,它可以切换侧面导航,并且由于某种原因它是全宽的。没有 CSS 使它成为全宽,也没有 Material 指令使它成为全宽。它似乎继承了它所在容器的宽度,但我不明白为什么。

有一点 Angular Material 知识的人能明白为什么吗? (只需调整窗格大小即可看到按钮)

这是我的 CodePen:

http://codepen.io/anon/pen/jPYNzy

还有代码:

<!-- Container -->
<div layout="column" layout-fill>
    <div layout="row" flex>

        <!-- Content -->
        <md-content flex>

            <md-toolbar>
                <div class="md-toolbar-tools">
                    <h1>Title</h1>
                </div>
            </md-toolbar>

            <div layout="column" class="md-padding">
                <p>
                The left sidenav will 'lock open' on a medium (>=960px wide) device.
                </p>
                <md-button ng-click="toggleLeft()" hide-gt-md>
                    Toggle left
                </md-button>
            </div>

        </md-content><!-- ./Content -->

    </div>
</div><!-- ./Container -->

【问题讨论】:

我没有看到任何按钮 @Sajeetharan 正如我在帖子中提到的,该按钮可在md 设备上查看。 这就是它是全角的原因。 hide-gt-md 设置最小宽度和最大宽度。 @miyamoto 是的,我看到min-width88px,但是任何地方都没有max-width,只有width 设置。 我说错了。它似乎来自&lt;div layout="column"&gt; flex。删除 -webkit-flex-direction: column(我在 Chrome 上)将其与文本内联并以“常规”大小显示。 【参考方案1】:

除非另有说明,否则元素宽度默认为其容器的 100%。

【讨论】:

【参考方案2】:

我只是将 DIV 标签添加到样式属性为 100px 的 md-button

它的工作正常

 <div style="text-align:center;">
                <md-button ng-click="toggleLeft()" hide-gt-md style="width:100px;">
                    Toggle left
        </md-button></div>

【讨论】:

我认为这不是一个好的解决方案,这非常依赖于按钮内部的文本,并且不可重复使用。 确定内部文本的依赖关系。添加属性为“min-width:100px”和百分比宽度。它可以解决问题...希望对您有所帮助 它有效,但不是一个好的解决方案。默认情况下,按钮应该取决于它的内容。您可以看到我为更可重用的解决方案选择的上述答案。【参考方案3】:

Just wrap it in another div 如果不希望这样做。 &lt;div layout="column"&gt; 的 flex-direction 似乎是造成这种行为的原因。

【讨论】:

太棒了,谢谢!因此,当它进入div column 时,它几乎将按钮视为一整列,但当它包裹在另一个 div 中时,它会将 div 视为列,将按钮视为常规按钮......对吗?我希望我已经说清楚了! 是的,基本上我认为。我自己对此有点模糊,但layout 属性将div 变成了一个弹性容器,它的直接子项变成了弹性项目。来自layout="column"flex-direction 表示它们正在堆叠(然后在水平方向“弯曲”??)。将按钮包裹在另一个 div 中意味着 div 是直接子项和弹性项目。 很好的解释老兄。我理解你所说的,但 Angular Material 肯定需要一本包含所有这些术语的字典,其中包含 1 个句子描述。文档中的很多示例只是图像或 CodePens,并不能很好地解释理论。 这不是 angular-material 独有的,它只是 css。我必须阅读这些,但仍然不是 100% 幕后发生的事情。 scotch.io/tutorials/a-visual-guide-to-css3-flexbox-propertiescss-tricks.com/snippets/css/a-guide-to-flexbox 我之前已经通读过这篇文章并尝试过使用 flexbox(不是 angular-material),但它与标准引导程序/基础样式网格系统及其工作方式完全不同。我认为我会再读一遍那篇文章。

以上是关于Angular Material - 为啥我的 md 按钮是全角的?的主要内容,如果未能解决你的问题,请参考以下文章

Angular Material 自定义主题 - 为啥 mat-palette 需要 4 个变量?

Angular Material图标中fontSet的默认值是多少?

未安装我的库的依赖包(@angular/material/core not found)

如何使用 Angular-Material 获得全高侧导航

Angular Material 找不到 Angular Material 核心主题

如何让 Angular Material Icon 在我的 Angular 应用程序中显示轮廓?