I'm using checkbox of angular-material2. Currently the default color of checkbox is coming as purple color.
Looks like they have changed default color of checkbox from "primary" to accent.
Is there a way to get "primary"(green) color instead of purple without overriding css.
I tried giving color="primary" to but that didn't worked.
Code : <md-checkbox></md-checkbox>
Import statement:
import {MdCheckbox} from '#angular2-material/checkbox';
Plunker http://plnkr.co/edit/sFC0kfdzj7fxtUC3GXdr?p=preview
Based on feedback from comments, updated my answer by removing '::ng-deep', but please read comment by #colin-fox, and understand how this will behave in global styling and at component level, many thanks!
For Angular Material 7, works for outline color and inside filled in color
.mat-checkbox-checked.mat-accent .mat-checkbox-ripple .mat-ripple-element {
opacity: 0.03 !important;
background-color: #005691!important;
}
.mat-checkbox-checked.mat-accent .mat-checkbox-background,.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background {
background-color: #005691;
}
You don't have to add css if you'r using theme, just add attribute color to <mat-checkbox>
<mat-checkbox color="primary">Primary</mat-checkbox>
The color of a <mat-checkbox> can be changed by using the color property. By default, checkboxes use the theme's accent color. This can be changed to 'primary' or 'warn'
Checkbox | Angular Material
One of the standard ways to do this is to utilize the /deep/ selector
mat-checkbox {
color: rgb(0,178,0);
/deep/ .mat-checkbox-background {
background-color: rgb(0,178,0);
}
/deep/ &.mat-checkbox-focused{
.mat-ink-ripple{
background-color: rgba(0, 178, 0, .26);
}
}
}
That will allow you to override styles in components where Shadow Dom is enabled.
This solution works well for me
.mat-checkbox-ripple .mat-ripple-element,
.mat-checkbox-checked.mat-accent .mat-checkbox-background {
background-color: $your-color !important;
}
Default color depends upon the theme which you #import.
But angular material also provide way to customize the theme or for customizing the components like changing the color of checkbox.
Steps of doing this as follow :-
1.) Import the _theming.scss file
#import "../node_modules/#angular/material/theming";
2.) Specify the accent color i.e. color of check box you want to apply like below :-
// customising of the mat-checkbox accordiing Theme. i am using pink indigo theme
bydefault so here I am changing the checkbox color from pink to grey.
$candy-app-primary: mat-palette($mat-indigo);
// here I am specify the grey instead of Pink.
$candy-app-accent: mat-palette($mat-grey, 600, 500, 900);
$candy-app-warn: mat-palette($mat-red);
// Create the theme object (a Sass map containing all of the palettes).
$candy-app-theme: mat-light-theme($candy-app-primary, $candy-app-accent, $candy-app-warn);
// here I am only calling checkbox mixin because i only want to change the checkbox color
#include mat-checkbox-theme($candy-app-theme);
Hope it will help.
Angular 7+
This will work for checkbox as well as the initial ripple color. If you just change the background for the checkbox, the initial ripple color won't update. This resolves the issue.
SCSS:
::ng-deep .mat-checkbox-checked.mat-accent {
.mat-checkbox-ripple .mat-ripple-element {
background-color: $your-color !important;
}
.mat-checkbox-background, .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background {
background-color: $your-color;
}
}
::ng-deep .mat-checkbox.mat-accent {
.mat-checkbox-ripple .mat-ripple-element {
background-color: $your-color !important;
}
}
A combination of answers worked for me in angular 9
.mat-checkbox-checked.mat-accent .mat-checkbox-ripple .mat-ripple-element {
opacity: 0.03 !important;
background-color: #005691 !important;
}
.mat-checkbox-checked.mat-accent .mat-checkbox-background,
.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background {
background-color: #005691 !important;
}
.mat-checkbox-ripple .mat-ripple-element,
.mat-checkbox-checked.mat-accent .mat-checkbox-background {
background-color: #005691 !important;
}
With beta.2 of Angular Material, the color attribute should work.
There were some issues with it before beta.2
See the commit that fixed that issue.
There are two methods(that i know ) to change the background color of mat-checkbox (angular 9)-
method 1 - by using color property of the mat-checkbox .
<mat-checkbox
id="{{ subtask.name }}"
[color]="accent"
>
Check
</mat-checkbox>
Limitation - You can only use color according to the angular material theme by this method .
method 2 - If you want to give custom colors to the mat-checkbox first track down the classes till the target class you want to change color of. tracking of nested classes
after that write like this in your style.css(global) file-
1st checkbox
.l0
.mat-checkbox-checked
.mat-checkbox-layout
.mat-checkbox-inner-container
.mat-checkbox-background {
background-color: #ffbf00 !important;
}
2nd checkbox
.l1
.mat-checkbox-checked
.mat-checkbox-layout
.mat-checkbox-inner-container
.mat-checkbox-background {
background-color: #4caf50 !important;
}
Result - different color for different mat-checkbox
This should take care of the default checkbox color
md-checkbox .md-icon {
background: green;
}
md-checkbox.md-default-theme.md-checked .md-icon {
background: green;
}
read more here at Angular Material Documentation
The following will keep frame grey when unchecked but change to custom color when checked:
relevant-scss-file.scss
mat-checkbox {
&.mat-checkbox-disabled.mat-checkbox-checked .mat-checkbox-background {
background: rgb(0,178,0);
}
}
Since deep is deprecated. In my view the right way to do it is using encapsulation: ViewEncapsulation.None.
ex:
#Component({
selector: '...',
templateUrl: '...',
styleUrls: ['...'],
encapsulation: ViewEncapsulation.None,
})
Then you just need to change the class
.mat-checkbox-background {
background-color: green;
}
You just need to be careful to deal with global css stuff. In SASS nested classes should handle it properly.
You can have more details here: https://stackoverflow.com/a/54672579/783364
For me what has worked is the following:
<mat-checkbox class="tn-checkbox">Check me!</mat-checkbox>
In the css (or in my case sass):
.#{$wf__ns}checkbox {
.mat-checkbox-ripple {
.mat-ripple-element {
background: $cool-blue !important;
}
}
&.mat-checkbox-checked {
.mat-checkbox-background {
background: $cool-blue;
}
.mat-checkbox-ripple {
.mat-ripple-element {
background: $cool-blue !important;
}
}
}
}
Explanation:
The checked background color is changed to mat-checkbox-background within mat-checkbox-checked. IF you want to modify the background color when it is not checked just copy that part and copy it outside of mat-checkbox-checked.
As for the ripple classes, it turns out that the material has an animation when you press the button. That class controls the color of the animation, if you don't change it it will remain the same (pink).
If you do not change it by pressing the checkbox you will see a strange pink effect.
The other answers do not work for me although I rely on the first to develop it.
It may be from my version of angular that I leave below:
Angular CLI: 8.3.25
Node: 13.3.0
Angular: 8.2.14
You can change the color of the border this way.(angular)
::ng-deep .mat-checkbox {
.mat-checkbox-ripple .mat-ripple-element {
background-color: #07abe9 !important;
}
.mat-checkbox-frame {
border-color: #07abe9 !important;
}
}
This worked for me with Angular 10:
In your styles.scss:
//Change background color
.mat-checkbox-checked.mat-accent .mat-checkbox-background,
.mat-checkbox-indeterminate.mat-accent .mat-checkbox-background {
background-color: #1f45cc;
}
//Change the border color for both checked and unchecked cases
.mat-checkbox-frame {
border-color: #1f45cc;
}
.mat-checkbox-ripple .mat-ripple-element,.mat-checkbox-checked.mat-accent .mat-checkbox-background {
background-color: $your-color!important;
}
.mat-checkbox-checked.mat-primary .mat-checkbox-background, .mat-checkbox-indeterminate.mat-primary .mat-checkbox-background{
background-color: $your-color!important;
}
This is what works. On our JHIPSTER project, we have a global.scss. Here is what you need to do if you do have a global.
Wrap your component html with a class. Forexample:
<div class="supplier-details-container">
<!-- rest of your html here -->
</div>
In the global.scss or global.css write your css/scss like so (Im using red to test):
.supplier-details-container .mat-checkbox-ripple .mat-ripple-element,.mat-checkbox-checked.mat-accent .mat-checkbox-background {
background-color: red !important;
}
Basically using css hierarchy wrapping the native angular material css with your component class that you use to wrap your component html.
Let me know if it works or not. We can debug.
Update for Angular Material 15:
.mat-mdc-checkbox.mat-mdc-checkbox-checked .mdc-checkbox__background, .mdc-checkbox__ripple {
background-color: green !important;
border-color: green !important;
}
this solution works well for me
/deep/.mat-checkbox-checked.mat-accent .mat-checkbox-background, .mat-checkbox-indeterminate.mat-accent .mat-checkbox-background {
background-color: #3490d3;
}
I'm usinge pixate in order to customize my app and I have a little problem.
I read the doc and the class for UITableVIew is called table-view-cell. I thought that if I created a class named like this I wouldn't have to manually had the class to the cells ? Am I right ?
My css code :
.table-view-cell {
background-color: red;
}
Tried this too :
.table-view-cell content-view{
background-color: red;
}
None of them works .. But if I had classes manually it works just fine.
You can set a globally available style like this:
table-view-cell{
background-color: #900;
}
Or you can put a styleClass attribute on a UITableView and target its children:
.yourTable table-view-cell{
background-color:#900;
}
This works for me.
I am new to vaadin. I have one button it should look like a link. I have created button like,
Button title = new Button(item.getSubmissionTitle());
title.setStyleName(BaseTheme.BUTTON_LINK);
I also tried using
title.setStyleName("link);
but still I am getting look and feel of button. Is there any way to change the button using css Or any alternative ways by wich the button should appear as a link.
EDIT
I just found out The button is getting css from Table. And overriding the button style.
For table, it has written
table.setDebugId("submissionsTable_id");
css for button in table is:
#submissionsTable_id .v-table-cell-wrapper .v-button-caption{white-space:normal !important;text-decoration:none;}
#submissionsTable_id .submission-content{width:350px;}
#submissionsTable_id .v-table-cell-wrapper .v-button-caption:hover
{
background:#3F1A7D;
color: #FFFFFF;
}
#submissionsTable_id .v-button-caption:hover
{
background:#3F1A7D;
color: #FFFFFF;
}
Now, How can i exclude my Link button to override the table's style or how can I add new style to button which should not inherit the style of the table.
A future reference for anyone else with this issue. According to the Book of Vaadin online:
https://vaadin.com/book/vaadin7/-/page/components.button.html#figure.component.button.basic
Some built-in themes contain a small style, which you can enable by adding Reindeer.BUTTON_SMALL, etc. The BaseTheme also has a BUTTON_LINK style, which makes the button look like a hyperlink.
If you are using the Reindeer theme the code would be:
title.setStyleName(Reindeer.BUTTON_LINK);
Apparently resetting styles for a particular element is not possible, according to this post. You have to selectively overwrite the css properties for that element in order to simulate the aspect of a link.
If it's any help, the following is some CSS I scrounged up that simulates to some degree the look and behaviour of a link:
a:link {
color: #0000FF;
background-color:#FFF;
text-decoration:underline;
}
a:visited {
color: #800080;
background-color:#FFF;
text-decoration:underline;
}
a:hover {
color: #0000FF;
background-color:#FFF;
text-decoration:none;
}
a:active {
color: #FF0000;
background-color:#FFF;
text-decoration:none;
}
Note that the default look and behavior of a vanilla link depends on the browser its viewed in.
No need to play with the Button; there is a Link component for this.
#Override
protected void init(VaadinRequest vaadinRequest) {
HorizontalLayout layout = new HorizontalLayout();
Link link = new Link("Go to stackoverflow.com",
new ExternalResource("https://stackoverflow.com/"));
layout.setMargin(true);
layout.addComponents(link);
setContent(layout);
}
Pixate seems to be unable to style UISearchBar's UITextField. Neither the text, corner radius etc. is styled, no matter how broadly I select text-field.
Also, there is an annoying dark hairline at the top and bottom of the UISearchBar as soon as I try to style it (e.g. give it a background color) using Pixate.
Furthermore, the cancel button label suddenly has white text and I found no way to overwrite it to any other color.
So the question is: Am I missing something or does Pixate in fact not support this (yet)?
What I want it to look like:
What it looks like using Pixate.
The stylesheet:
table-view {
separator-style: single-line;
separator-color: #eeeeee;
background-color: #eeeeee;
}
table-view-cell {
background-color: white;
}
search-bar {
background-color: #eeeeee;
}
Treat it like you would a normal CSS selector.
search-bar button {
color: white;
}
My particular problem is that I want the autocomplete function to not have round corners, but all the other widgets that have round corners should.
Is there a parameter I can pass to disable the corners just for the autocomplete?
Edit
Let's see if this can be answered.
On page Datepicker.
I'd like to remove all round-corner classes from appearing (the header and the next-previous buttons).
$( "#datepicker" ).datepicker('widget').removeClass('ui-corner-all'); would not work.
Very late but here it goes:
jQuery UI widgets have a method, which returns the HTML node for the widget itself.
So the answer would be:
$('#someinput').autocomplete(...).autocomplete('widget').removeClass('ui-corner-all');
Responding to the EDIT:
As far I can see, you need to chain widget() method with autocomplete() (or datepicker()) method for it to work. Seems like it doesn't work for regular HTML nodes returned by $().
assign this css class to the element with corners of your widget.
.ui-corner-flat {
border-top-left-radius: 0px !important;
border-top-right-radius: 0px !important;
border-bottom-left-radius: 0px !important;
border-bottom-right-radius: 0px !important;
}
$("#elementwithcorners").addClass("ui-corner-flat");
to remove the bottom left radius
in the constructor I did this
$( "#signup" ).dialog(
{
create: function (event, ui) {
$(".ui-dialog").css('border-bottom-left-radius','0px');
},
}
);
The _suggest() method of the Autocomplete widget calls menu.refresh(), and therefore resets the ui-corner-all class for menu items, etc., each time the input changes. However, the open() callback is called after every menu.refresh() call within _suggest(), and so is a sensible place to adjust classes as desired:
$("#autocomplete").autocomplete("option", {
open: function(event, ui) {
$(this).autocomplete("widget")
.menu("widget").removeClass("ui-corner-all")
.find(".ui-corner-all").removeClass("ui-corner-all");
}
});
The Datepicker widget is a little tougher, as it's built to be sort of a semi-singleton. Here we need a monkey patch to do it consistently, since none of the supplied callback options is suitable:
// store the built-in update method on the "global" instance...
$.datepicker.__updateDatepicker = $.datepicker._updateDatepicker;
// ...and then clobber with our fix
$.datepicker._updateDatepicker = function(inst) {
$.datepicker.__updateDatepicker(inst);
inst.dpDiv.removeClass("ui-corner-all")
.find(".ui-corner-all").removeClass("ui-corner-all");
};
Note that the default _updateDatepicker() implementation has no return value. Also, note that the _updateDatepicker() method is not an interface method, so should not be assumed to be available. As such, the most consistent way to accomplish the corner fix is with appropriate CSS, along the lines of:
.ui-autocomplete.ui-menu.ui-corner-all,
.ui-autocomplete.ui-menu .ui-menu-item > a.ui-corner-all,
.ui-datepicker.ui-corner-all,
.ui-datepicker-header.ui-corner-all,
.ui-datepicker-next.ui-corner-all,
.ui-datepicker-prev.ui-corner-all {
border-radius: 0;
}
More specificity (or the !important directive) may be used to ensure these selectors are respected. This is exactly why jQuery uses theme classes – fudging these things in is an interesting hack, but it's the less clean option unless style is unavailable…
Create a new CSS class for the element you don't want rounded corners.
p.rounded { border-radius: 10px; }
p.none-rounded { border-radius: 0; }