【问题标题】:How do I customize Angular Material's input/md-input-container component?如何自定义 Angular Material 的 input/md-input-container 组件?
【发布时间】:2015-05-09 03:34:09
【问题描述】:

如标题所述, 如何自定义这些元素? 似乎他们使用的是透明背景,这在大多数背景调色板上都很难查看

【问题讨论】:

    标签: css angular-material pseudo-class


    【解决方案1】:

    要自定义 Angular Material 的 input/md-input-container 组件,您可以将此样式添加到您的个人样式表中。

    md-input-container {
      display: inline-block;
      position: relative;
      padding-top: 2px;
      padding-bottom: 2px;
      padding-left: 2px;
      padding-right: 2px;
      margin: 1px 0;
      vertical-align: middle;
      /*
       * The .md-input class is added to the input/textarea
       */ }
    
       md-input-container .md-input {
         -webkit-order: 2;
             -ms-flex-order: 2;
                 order: 2;
         display: block;
         margin-top: 0;
         background: none;
         padding-top: 2px;
         padding-bottom: 2px;
         padding-left: 2px;
         padding-right: 2px;
         border-width: 1px 1px 1px 1px ;
         line-height: 26px;
         height: 30px;
         -ms-flex-preferred-size: 26px;
         border-radius: 5px;
         border-style: solid;
         width: 100%;
         box-sizing: border-box;
         float: left; }
    
     md-input-container.md-input-focused .md-input,
     md-input-container .md-input.ng-invalid.ng-dirty {
       padding-bottom: 0;
       border-width: 0 0 2px 0; }
    
     md-input-container:not(.md-input-invalid).md-input-focused .md-input {
         border-color: black;
              }
    
    
    md-input-container:not(.md-input-invalid).md-input-focused label {
        padding-top: 0px;
        color: green;
              }
    
    
    md-input-container .md-errors-spacer {
           float: right;
           min-height: 0px;
           min-width: 0px; }
           html[dir=rtl] md-input-container .md-errors-spacer {
             float: left;
             unicode-bidi: embed; }
           body[dir=rtl] md-input-container .md-errors-spacer {
             float: left;
             unicode-bidi: embed; }
           md-input-container .md-errors-spacer bdo[dir=rtl] {
             direction: rtl;
             unicode-bidi: bidi-override; }
           md-input-container .md-errors-spacer bdo[dir=ltr] {
             direction: ltr;
             unicode-bidi: bidi-override; }
    
     md-icon {
       margin: auto;
       background-repeat: no-repeat no-repeat;
       display: inline-block;
       vertical-align: middle;
       fill: currentColor;
       height: 24px;
       width: 24px;}
       md-icon svg {
         pointer-events: none;
         display: block; }
       md-icon[md-font-icon] {
         line-height: 1;
         width: auto; }
    
     md-input-container > md-icon {
       position: absolute;
       top: 5px;
       left: 20px;
       right: auto; }
    
    
    
    
    
     md-input-container ng-messages, md-input-container data-ng-messages, md-input-container x-ng-messages,
     md-input-container [ng-messages], md-input-container [data-ng-messages], md-input-container [x-ng-messages] {
       position: relative;
       float: right;
       -webkit-order: 4;
           -ms-flex-order: 4;
               order: 4;
       overflow: hidden;
       clear: left; }
    
    
     md-input-container ng-message, md-input-container data-ng-message, md-input-container x-ng-message,
     md-input-container [ng-message], md-input-container [data-ng-message], md-input-container [x-ng-message],
     md-input-container [ng-message-exp], md-input-container [data-ng-message-exp], md-input-container [x-ng-message-exp],
     md-input-container .md-char-counter {
       font-size: 12px;
       line-height: 14px;
       overflow: hidden;
       transition: all 0.3s cubic-bezier(0.55, 0, 0.55, 0.2);
       opacity: 1;
       margin-top: 0;
       padding-top: 1px; }
    
     md-input-container ng-message:not(.md-char-counter), md-input-container data-ng-message:not(.md-char-counter), md-input-container x-ng-message:not(.md-char-counter),
     md-input-container [ng-message]:not(.md-char-counter), md-input-container [data-ng-message]:not(.md-char-counter), md-input-container [x-ng-message]:not(.md-char-counter),
     md-input-container [ng-message-exp]:not(.md-char-counter), md-input-container [data-ng-message-exp]:not(.md-char-counter), md-input-container [x-ng-message-exp]:not(.md-char-counter),
     md-input-container .md-char-counter:not(.md-char-counter) {
       padding-right: 10px;
       padding-left: 50px; }
    
    
       md-input-container.md-input-focused label:not(.md-no-float), md-input-container.md-input-has-placeholder label:not(.md-no-float), md-input-container.md-input-has-value label:not(.md-no-float) {
         -webkit-transform: translate3d(0, 20px, 0) scale(0.75);
                 transform: translate3d(0, 20px, 0) scale(0.75); }
    
      md-input-container.md-default-theme.md-input-invalid ng-message, md-input-container.md-input-invalid ng-message, md-input-container.md-default-theme.md-input-invalid data-ng-message, md-input-container.md-input-invalid data-ng-message, md-input-container.md-default-theme.md-input-invalid x-ng-message, md-input-container.md-input-invalid x-ng-message, md-input-container.md-default-theme.md-input-invalid [ng-message], md-input-container.md-input-invalid [ng-message], md-input-container.md-default-theme.md-input-invalid [data-ng-message], md-input-container.md-input-invalid [data-ng-message], md-input-container.md-default-theme.md-input-invalid [x-ng-message], md-input-container.md-input-invalid [x-ng-message], md-input-container.md-default-theme.md-input-invalid [ng-message-exp], md-input-container.md-input-invalid [ng-message-exp], md-input-container.md-default-theme.md-input-invalid [data-ng-message-exp], md-input-container.md-input-invalid [data-ng-message-exp], md-input-container.md-default-theme.md-input-invalid [x-ng-message-exp], md-input-container.md-input-invalid [x-ng-message-exp], md-input-container.md-default-theme.md-input-invalid .md-char-counter, md-input-container.md-input-invalid .md-char-counter {
         color: rgb(255,44,0);
              }

    【讨论】:

      【解决方案2】:

      要更改占位符颜色,请执行此操作,它将占位符颜色更改为白色:

      /* do not group these rules */
      .your-pre-defined-container > md-input-container > input::-webkit-input-placeholder {
          color: #FFF;
      }
      .your-pre-defined-class > md-input-container > input:-moz-placeholder {
          /* FF 4-18 */
          color: #FFF;
      }
      .your-pre-defined-class > md-input-container > input::-moz-placeholder {
          /* FF 19+ */
          color: #FFF;
      }
      .your-pre-defined-class > md-input-container > input:-ms-input-placeholder {
          /* IE 10+ */
          color: #FFF;
      }
      

      【讨论】:

        【解决方案3】:

        我会推荐使用调色板配置:

            app.config(function($mdThemingProvider) {
        
                //change default color for primary
                var indigo = $mdThemingProvider.extendPalette('indigo', {
                    '500': '569fd4'
                });
                $mdThemingProvider.definePalette('indigo', indigo);
        
                //change default color for warn
                var indigo = $mdThemingProvider.extendPalette('red', {
                    '500': 'ff5800'
                });
                $mdThemingProvider.definePalette('red', indigo);
        
                $mdThemingProvider.theme('default').primaryPalette('indigo').warnPalette('red');  
        
                //here you change placeholder/foreground color.
                $mdThemingProvider.theme('default').foregroundPalette[3] = "rgba(0,0,0,0.67)";
        
        });
        

        来源:How to set light foreground colors for text when using dark theme?

        【讨论】:

        • 嗯,只是设置前景对我不起作用,要让文本在输入中改变,主题必须使用“暗”设置
        【解决方案4】:

        在 "angular-material.css" 之后添加一个空白 css 文件,并在该空白 css 文件中覆盖您要自定义的规则。

        对于您面临的问题,我在 custom.css 中添加了以下规则。

        md-input-container.md-default-theme label, 
         md-input-container.md-default-theme .md-placeholder{
            color:grey !important;
        }
        

        您可以在此处随意更改colorbackground-color

        【讨论】:

        • 知道如何在我们输入输入时更改文本颜色以及在我们聚焦输入时如何更改文本下方的行吗?
        • 有什么方法可以为所有定义的主题更改它,而不是在此处提及类 md-input-container.md-default-theme
        • @Ellone 试试这个 input.md-input:focus{ border-color: blue; }
        • 这行得通,但是按照 Jean F. 的建议调整您正在使用的实际主题是一个更好且受支持的解决方案
        猜你喜欢
        • 2016-08-27
        • 2018-02-09
        • 1970-01-01
        • 2018-10-18
        • 2016-12-10
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        相关资源
        最近更新 更多