【问题标题】:Mat-icon does not center in its divMat-icon 不在其 div 中居中
【发布时间】:2018-04-04 17:59:37
【问题描述】:

我对 css 很陌生,我无法将 mat-icon(思想泡泡)与 div class=img(左侧的绿色方块)对齐 - 请参阅附图。此时图标有点靠近顶部

为了添加 svg 图标,我使用了 Material Angular - MatIconRegistry 类(不知道是否重要)

我的结果:

这是我的html:

<div class="container">
  <div class="img"><mat-icon svgIcon="info"></mat-icon></div>
  Some text here!
</div>

这是我的 CSS:

$conainer-min-width: 256px !default;
$conainer-max-width: 512px !default;
$conainer-height: 50px !default;

div.container {
  max-width: $container-max-width;
  min-width: $container-min-width;
  height: $container-height;
  margin: auto;
  color: #000000;
  background-color: #ffffff;
  line-height: $container-height;
  text-align: center;
  box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
  border-width: 1px;
  border-style: solid;
  border-color: #9e9e9e;
  padding-right: 20px;
  position: fixed;
  z-index: 1000;
  left: 0;
  right: 0;
  top: 30px;
}


div.img {
  width: $container-height;
  height: $container-height;
  float: left;
  display: block;
  margin: 0 auto;
  border-right-width: 1px;
  border-right-style: solid;
  border-right-color: #9e9e9e;
  line-height: $container-height;
  justify-content: center;
  background-color: #3f9c35;
}

关于如何解决此问题的任何想法?

【问题讨论】:

    标签: html css angular-material


    【解决方案1】:

    您可以将vertical align 添加到mat-icon 元素或.mat-icon 类中:

    用全局 CSS 覆盖所有材质图标: Stackblitz

    .mat-icon {
        vertical-align: middle;
    }
    

    注意:如果您的文本带有大写字母,请添加负边距以防止在某些浏览器上出现视觉问题 (Stackblitz demo)。
    如果更符合您的要求,您也可以简单地使用vertical-align: subvertical-align: bottom。关注alignment MDN demo


    将 FLEX 与每个图标/文本的容器元素一起使用: Stackblitz

    CSS:

    .icon-text {
        display: flex;
        align-items: center;
    }
    

    HTML:

    <div class="icon-text">
       <mat-icon>home</mat-icon>
       <span>Some text here 1</span>
    </div>
    

    使用实用程序类设置特定材质图标的样式: Stackblitz

    在一些全局css文件中:

    .v-align-middle { 
        vertical-align: middle;
    }
    

    HTML:

    <div>
       <mat-icon class="v-align-middle">home</mat-icon>
       <span class="v-align-middle">Some text here 1</span>
    </div>
    

    ** 一些css框架已经有这样的类,例如:bootstrap 4 **


    设置特定材质图标的样式: Stackblitz

    CSS:

    .custom-class mat-icon {
        vertical-align: middle;
    }
    
    /** or using the class .mat-icon */
    .custom-class .mat-icon {
        vertical-align: middle;
    }
    

    HTML:

    <div class="custom-class">
       <mat-icon>home</mat-icon>
       <span>Some text here 1</span>
    </div>
    

    【讨论】:

    • 按照here的建议,在父div中设置display: flex;可能会给你更好的控制。
    • 感谢您的解决方案。经过一些测试后,我个人更喜欢“vertical-align: sub”。 'vertical-align: middle' 图标有点太低了。
    • 如果父容器上有height样式怎么会这样不行呢?
    • @trebor 如果您使用全局覆盖,请在父容器中使用 line-height 以获得垂直居中的文本/图标。演示:stackblitz.com/edit/…
    【解决方案2】:

    可以使用flex Layout来对齐图标

    <div fxLayout="row" fxLayoutAlign="center">
      <mat-icon fxFlexAlign="center">supervisor_account</mat-icon>
    </div>
    

    在文档中阅读更多关于 flexLayout 的内容,fxLayout 行与:

    div {
      display:flex;
      flex-direction:row;
      justify-content:center; /* For fxLayoutAlign="center" */
    }
    

    然后你进一步将弹性项目对齐到中心,即fxFlexAlign="center"

    mat-icon {
      display:flex;             
      align-self:center; 
    }
    

    【讨论】:

      【解决方案3】:

      对我有用的是使用 flex-container (justify-content / align-items to center) 以及这些属性 font-sizewidthheight - 取决于你的字体大小,它驱动其他两个属性:

      ::ng-deep .mat-icon {
        font-size: 48px;
        width: 48px;
        height: 48px;
      }
      

      【讨论】:

        【解决方案4】:

        我认为您的问题是这些变量名的拼写错误:

        $conainer-min-width: 256px !default;
        $conainer-max-width: 512px !default;
        $conainer-height: 50px !default;

        与此处使用的变量不匹配:

        div.container {
        最大宽度:$ 容器最大宽度;
        最小宽度:$ 容器最小宽度;
        高度:$ 容器高度; }

        我认为一旦您将conainer 更改为container,它应该可以工作:)

        【讨论】:

        • 感谢您的反馈,但事实并非如此。原件是外语的,我更改并替换了它并添加了错字。所以这不是问题
        • 你可以看到@The.Bear的回答——他在一个平台上提供了。
        猜你喜欢
        • 1970-01-01
        • 2019-10-08
        • 2019-09-23
        • 1970-01-01
        • 2023-03-17
        • 2019-08-02
        • 2019-04-27
        • 1970-01-01
        • 2021-11-05
        相关资源
        最近更新 更多