From 517104fbc7374c8cf9f45426d906e5c730cd2e64 Mon Sep 17 00:00:00 2001 From: "Manu Mtz.-Almeida" Date: Sat, 28 Jul 2018 17:26:10 +0200 Subject: [PATCH] fix(inputs): better customization for placeholder color --- core/src/components/alert/alert.ios.scss | 9 +++++- core/src/components/alert/alert.md.scss | 8 ++++- core/src/components/input/input.ios.scss | 1 - core/src/components/input/input.md.scss | 1 - core/src/components/input/input.scss | 4 +++ .../components/searchbar/searchbar.ios.scss | 11 ++++--- .../components/searchbar/searchbar.md.scss | 8 +++-- core/src/components/searchbar/searchbar.scss | 21 ++++++++++++++ .../src/components/textarea/textarea.ios.scss | 1 - core/src/components/textarea/textarea.md.scss | 1 - core/src/components/textarea/textarea.scss | 13 ++++++++- core/src/themes/ionic.mixins.scss | 29 ------------------- 12 files changed, 62 insertions(+), 45 deletions(-) diff --git a/core/src/components/alert/alert.ios.scss b/core/src/components/alert/alert.ios.scss index cde7f56cc5..c292f038b4 100644 --- a/core/src/components/alert/alert.ios.scss +++ b/core/src/components/alert/alert.ios.scss @@ -81,7 +81,6 @@ // -------------------------------------------------- .alert-input { - @include placeholder($alert-ios-input-placeholder-color); @include border-radius($alert-ios-input-border-radius); @include margin($alert-ios-input-margin-top, null, null, null); @include padding($alert-ios-input-padding-top, $alert-ios-input-padding-end, $alert-ios-input-padding-bottom, $alert-ios-input-padding-start); @@ -90,6 +89,14 @@ background-color: $alert-ios-input-background-color; appearance: none; + + &::placeholder { + color: $alert-ios-input-placeholder-color; + + font-family: inherit; + font-weight: inherit; + } + } diff --git a/core/src/components/alert/alert.md.scss b/core/src/components/alert/alert.md.scss index 363dbfe51f..8d973028ca 100644 --- a/core/src/components/alert/alert.md.scss +++ b/core/src/components/alert/alert.md.scss @@ -66,12 +66,18 @@ // -------------------------------------------------- .alert-input { - @include placeholder($alert-md-input-placeholder-color); @include margin($alert-md-input-margin-top, $alert-md-input-margin-end, $alert-md-input-margin-bottom, $alert-md-input-margin-start); border-bottom: $alert-md-input-border-width $alert-md-input-border-style $alert-md-input-border-color; color: $alert-md-input-text-color; + + &::placeholder { + color: $alert-md-input-placeholder-color; + + font-family: inherit; + font-weight: inherit; + } } .alert-input:focus { diff --git a/core/src/components/input/input.ios.scss b/core/src/components/input/input.ios.scss index a3f6897f85..06b0690068 100644 --- a/core/src/components/input/input.ios.scss +++ b/core/src/components/input/input.ios.scss @@ -6,7 +6,6 @@ --padding-end: #{$input-ios-padding-end}; --padding-bottom: #{$input-ios-padding-bottom}; --padding-start: #{$input-ios-padding-start}; - --placeholder-color: #{$input-ios-placeholder-color}; font-family: $input-ios-font-family; font-size: $input-ios-font-size; diff --git a/core/src/components/input/input.md.scss b/core/src/components/input/input.md.scss index cb99e1269a..e1f0b792b7 100644 --- a/core/src/components/input/input.md.scss +++ b/core/src/components/input/input.md.scss @@ -10,7 +10,6 @@ --padding-end: #{$input-md-padding-end}; --padding-bottom: #{$input-md-padding-bottom}; --padding-start: #{$input-md-padding-start}; - --placeholder-color: #{$input-md-placeholder-color}; font-family: $input-md-font-family; font-size: $input-md-font-size; diff --git a/core/src/components/input/input.scss b/core/src/components/input/input.scss index f881e605d6..a172828f5c 100644 --- a/core/src/components/input/input.scss +++ b/core/src/components/input/input.scss @@ -4,7 +4,9 @@ // -------------------------------------------------- :host { + --placeholder-color: currentColor; --placeholder-weight: inherit; + --placeholder-opacity: .5; --padding-top: 0; --padding-end: 0; --padding-bottom: 0; @@ -57,6 +59,8 @@ font-family: inherit; font-weight: var(--placeholder-weight); + + opacity: var(--placeholder-opacity); } &:-webkit-autofill { diff --git a/core/src/components/searchbar/searchbar.ios.scss b/core/src/components/searchbar/searchbar.ios.scss index bd95761e48..2256e9675b 100644 --- a/core/src/components/searchbar/searchbar.ios.scss +++ b/core/src/components/searchbar/searchbar.ios.scss @@ -5,10 +5,15 @@ // -------------------------------------------------- :host { + --clear-button-color: #{$searchbar-ios-input-clear-icon-color}; + --cancel-button-color: #{$searchbar-ios-cancel-button-color}; + @include padding($searchbar-ios-padding-top, $searchbar-ios-padding-end, $searchbar-ios-padding-bottom, $searchbar-ios-padding-start); height: $searchbar-ios-input-height + $searchbar-ios-padding-top + $searchbar-ios-padding-bottom; + color: $searchbar-ios-input-text-color; + font-family: $searchbar-ios-font-family; contain: strict; @@ -43,14 +48,12 @@ // ----------------------------------------- .searchbar-input { - @include placeholder($searchbar-ios-input-placeholder-color); @include padding(0, 28px); @include border-radius($searchbar-ios-input-border-radius); height: 100%; background-color: $searchbar-ios-input-background-color; - color: $searchbar-ios-input-text-color; font-size: 14px; font-weight: 400; @@ -74,7 +77,6 @@ border: 0; background-color: transparent; - color: $searchbar-ios-input-clear-icon-color; } .searchbar-clear-icon { @@ -98,7 +100,6 @@ outline: none; background-color: $searchbar-ios-cancel-button-background-color; - color: $searchbar-ios-cancel-button-color; font-size: $searchbar-ios-cancel-button-font-size; @@ -173,8 +174,6 @@ } :host-context(ion-toolbar.ion-color) .searchbar-input { - @include placeholder(currentColor, $opacity: .5); - background: rgba(var(--ion-color-contrast-rgb), $searchbar-ios-input-background-color-alpha); color: currentColor; } diff --git a/core/src/components/searchbar/searchbar.md.scss b/core/src/components/searchbar/searchbar.md.scss index 8a9cad0df8..c1a1e41635 100644 --- a/core/src/components/searchbar/searchbar.md.scss +++ b/core/src/components/searchbar/searchbar.md.scss @@ -5,10 +5,15 @@ // -------------------------------------------------- :host { + --clear-button-color: currentColor; + --cancel-button-color: #{$searchbar-md-cancel-button-color}; + @include padding($searchbar-md-padding-top, $searchbar-md-padding-end, $searchbar-md-padding-bottom, $searchbar-md-padding-start); background: $searchbar-md-background; + color: $searchbar-md-input-text-color; + font-family: $searchbar-md-font-family; } @@ -40,7 +45,6 @@ border: 0; background-color: $searchbar-md-cancel-button-background-color; - color: $searchbar-md-cancel-button-color; font-size: $searchbar-md-cancel-button-font-size; } @@ -63,7 +67,6 @@ // ----------------------------------------- .searchbar-input { - @include placeholder($searchbar-md-input-placeholder-color); @include padding(6px, 55px); @include border-radius($searchbar-md-input-border-radius); @include background-position(start, 8px, center); @@ -71,7 +74,6 @@ height: $searchbar-md-input-height; background-color: $searchbar-md-input-background-color; - color: $searchbar-md-input-text-color; font-size: 16px; font-weight: 400; diff --git a/core/src/components/searchbar/searchbar.scss b/core/src/components/searchbar/searchbar.scss index 4ad670f0d6..479c6fa1a8 100644 --- a/core/src/components/searchbar/searchbar.scss +++ b/core/src/components/searchbar/searchbar.scss @@ -4,6 +4,10 @@ // -------------------------------------------------- :host { + --placeholder-color: currentColor; + --placeholder-weight: inherit; + --placeholder-opacity: .5; + @include font-smoothing(); display: flex; @@ -30,6 +34,8 @@ } .searchbar-input { + @include text-inherit(); + box-sizing: border-box; display: block; @@ -43,11 +49,24 @@ font-family: inherit; appearance: none; + &::placeholder { + color: var(--placeholder-color); + + font-family: inherit; + font-weight: var(--placeholder-weight); + + opacity: var(--placeholder-opacity); + } + &::-webkit-search-cancel-button { display: none; } } +.searchbar-cancel-button { + color: var(--cancel-button-color); +} + .searchbar-clear-button { @include margin(0); @include padding(0); @@ -57,6 +76,8 @@ min-height: 0; outline: none; + + color: var(--clear-button-color); appearance: none; } diff --git a/core/src/components/textarea/textarea.ios.scss b/core/src/components/textarea/textarea.ios.scss index 7b74e46607..6d2b55f13d 100644 --- a/core/src/components/textarea/textarea.ios.scss +++ b/core/src/components/textarea/textarea.ios.scss @@ -9,7 +9,6 @@ --padding-end: #{$textarea-ios-padding-end}; --padding-bottom: #{$textarea-ios-padding-bottom}; --padding-start: #{$textarea-ios-padding-start}; - --placeholder-color: #{$textarea-ios-placeholder-color}; font-family: $textarea-ios-font-family; font-size: $textarea-ios-font-size; diff --git a/core/src/components/textarea/textarea.md.scss b/core/src/components/textarea/textarea.md.scss index 1a5eaba596..15f92dda38 100644 --- a/core/src/components/textarea/textarea.md.scss +++ b/core/src/components/textarea/textarea.md.scss @@ -9,7 +9,6 @@ --padding-end: #{$textarea-md-padding-end}; --padding-bottom: #{$textarea-md-padding-bottom}; --padding-start: #{$textarea-md-padding-start}; - --placeholder-color: #{$textarea-md-placeholder-color}; font-family: $textarea-md-font-family; font-size: $textarea-md-font-size; diff --git a/core/src/components/textarea/textarea.scss b/core/src/components/textarea/textarea.scss index 2c83e49061..2df3a59ffc 100644 --- a/core/src/components/textarea/textarea.scss +++ b/core/src/components/textarea/textarea.scss @@ -4,6 +4,9 @@ // -------------------------------------------------- :host { + --placeholder-color: currentColor; + --placeholder-weight: inherit; + --placeholder-opacity: .5; --padding-top: 0; --padding-end: 0; --padding-bottom: 0; @@ -37,7 +40,6 @@ .native-textarea { @include text-inherit(); @include border-radius(var(--border-radius)); - @include placeholder(var(--placeholder-color)); @include margin(0); @include padding(var(--padding-top), var(--padding-end), var(--padding-bottom), var(--padding-start)); @@ -55,6 +57,15 @@ box-sizing: border-box; resize: none; appearance: none; + + &::placeholder { + color: var(--placeholder-color); + + font-family: inherit; + font-weight: var(--placeholder-weight); + + opacity: var(--placeholder-opacity); + } } .native-textarea[disabled] { diff --git a/core/src/themes/ionic.mixins.scss b/core/src/themes/ionic.mixins.scss index e6d919ca4c..e5e0a1022a 100644 --- a/core/src/themes/ionic.mixins.scss +++ b/core/src/themes/ionic.mixins.scss @@ -35,35 +35,6 @@ -webkit-font-smoothing: antialiased; } -// Input Placeholder -// -------------------------------------------------- - -@mixin placeholder($color: #999, $text-indent: 0, $opacity: null) { - &::-moz-placeholder { // Firefox 19+ - color: $color; - @if ($opacity) { - opacity: $opacity; - } - } - - &:-ms-input-placeholder { - color: $color; - @if ($opacity) { - opacity: $opacity; - } - } - - &::-webkit-input-placeholder { - // Safari placeholder margin issue - text-indent: $text-indent; - color: $color; - @if ($opacity) { - opacity: $opacity; - } - } -} - - // Get the key from a map based on the index @function index-to-key($map, $index) { $keys: map-keys($map);