Hover an element and change another element - css

When I hover a text field, I want the font color of the submit field to become red.
I tried the operators >, + and ~ but none of them works.
This is what I have so far: http://jsfiddle.net/p0zxctet/

I just came back through my stack overflow and saw this hasn't been answered sufficiently yet. Here is my solution utilizing jQuery to get the effect you were looking for:
The HTML
<input type="text" id="textField" placeholder="Hover Here"/>
<input type="submit" id="submitBtn" />
The jQuery
$("#textField").hover(function(){
$("#submitBtn").css({"color":"red"});
});
$("#textField").mouseout(function() {
$("#submitBtn").css({"color":"black"});
});
Here is the fiddle showing this in action: https://jsfiddle.net/z9czoedp/

You need to consider browser prefixes as well.
input {
color: #cfcfcf;
}
input::-webkit-input-placeholder {
color: #cfcfcf;
}
input:-moz-placeholder { /* Firefox 18- */
color: #cfcfcf;
}
input::-moz-placeholder { /* Firefox 19+ */
color: #cfcfcf;
}
input:-ms-input-placeholder {
color: #cfcfcf;
}
/*
* On hover
*/
input:hover::-webkit-input-placeholder,
input:focus::-webkit-input-placeholder {
color: #F00;
}
input:hover:-moz-placeholder,
input:focus:-moz-placeholder{ /* Firefox 18- */
color: #F00;
}
input:hover::-moz-placeholder,
input:focus::-moz-placeholder{ /* Firefox 19+ */
color: #F00;
}
input:hover:-ms-input-placeholder,
input:focus:-ms-input-placeholder{
color: #F00;
}

try to use :hover Selector
.form-control.search-field:hover{
color: red;
}
5-28 added
Do you mean when you hover the input, the submit button change its color to red?
I think css cannot do that. You need to use javascript, like:
document.querySelector("#db-search").onmouseover = function(){
document.querySelector("input[type=submit]").style.color = "red"
}
document.querySelector("#db-search").onmouseout = function(){
document.querySelector("input[type=submit]").style.removeProperty("color")
}

Related

How to set color of placeholder of Chosen selection input?

In my jQuery v3 / Bootstrap v4.1.2 application, I use chosen.jquery (Version 1.8.7) and I did not find how to set color of placeholder text of of Chosen selection input with styles like:
::-webkit-input-placeholder { /* WebKit, Blink, Edge */
color: #c2c200 !important;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
color: #c2c200 !important;
opacity: 1 !important;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
color: #c2c200 !important;
opacity: 1 !important;
}
:-ms-input-placeholder { /* Internet Explorer 10-11 */
color: ##c2c200 !important;
}
::-ms-input-placeholder { /* Microsoft Edge */
color: #c2c200 !important;
}
::placeholder { /* Most modern browsers support this now. */
color: ##c2c200 !important;
}
And I init it with code:
$(".chosen_select_box").chosen({
disable_search_threshold: 10,
allow_single_deselect: true,
no_results_text: "Nothing found!",
});
You can look at it this fiddle:
http://jsfiddle.net/1Lpdk79r/3/
But it does not work for chosen input. How to fix it?
If you view the source of your fiddle, you can see that the Chosen plugin generates a text input from your select, and adds the placeholder text as the input value. It also styles that input. So you just need to override the Chosen styling with your own.
This will do, to change text colour:
.chosen-container-multi .chosen-choices li.search-field input[type="text"] {
color: #c2c200;
}
Here's an updated version of your fiddle showing the result.

Placeholder colours not working CSS

I am trying to apply a simple colour to a specific input box. I know that we can do this:
::-webkit-input-placeholder {
color: #000000;
}
:-moz-placeholder {
color: #000000;
}
:input:-ms-input-placeholder {
color: #000000;
}
So to get it working on my input box I tried:
.search-top-container form input::-webkit-input-placeholder {
color: #000000;
}
.search-top-container form input:-moz-placeholder {
color: #000000;
}
.search-top-container form input:-ms-input-placeholder {
color: #000000;
}
But it isn't working. I tried using important tags as well but that doesn't work. Any help is much appreciated, thanks!
You're not saying in which browser it isn't working, but you do have an error with the Mozilla code. The latest Mozilla browsers (since v19) work only with two colons, so ::-moz-placeholder instead of :-moz-placeholder.
In addition, the default style for a placeholder contains opacity:.4, so if you want cross browser compatibility, you will have to set the opacity too. See MDN.
.search-top-container form input::-webkit-input-placeholder {
color: #F00000;
opacity: 1;
}
.search-top-container form input::-moz-placeholder {
color: #F00000;
opacity: 1;
}
.search-top-container form input:-ms-input-placeholder {
color: #F00000;
opacity: 1;
}
<div class="search-top-container">
<form>
<input placeholder="Firstname Lastname" />
</form>
</div>
(Note that in this snippet, I used red for the colour, to avoid situations where you might think it's not working because it happens to be the same colour as the default.)

Proper CSS syntax for assigning style attributes to a pseudo-class for multiple classes'?

I am trying to set the color (font-color) attribute for the placholder pseudo class for a multiple classes of inputs.
(So I want all inputs with class .red-va or .blue-va to have placeholder text of a given color)
I can (and have) done this:
.red-va::-webkit-input-placeholder {
color: white;
}
.red-va:-moz-placeholder { /* Firefox 18- */
color: white;
}
.red-va::-moz-placeholder { /* Firefox 19+ */
color: white;
}
.red-va:-ms-input-placeholder {
color: white;
}
.blue-va::-webkit-input-placeholder {
color: white;
}
.blue-va:-moz-placeholder { /* Firefox 18- */
color: white;
}
.blue-va::-moz-placeholder { /* Firefox 19+ */
color: white;
}
.blue-va:-ms-input-placeholder {
color: white;
}
Basically two sets of CSS for each input class, with browser support requiring four different approaches for each.
Is there a more elegant / streamlined way of doing this?
Unfortunately, without making use of a preprocessor (since this is CSS), the best you can do is to group each set of vendor prefixes for both .red-va and .blue-va, but not all of them into a single ruleset:
.red-va::-webkit-input-placeholder, .blue-va::-webkit-input-placeholder {
color: white;
}
.red-va:-moz-placeholder, .blue-va:-moz-placeholder { /* Firefox 18- */
color: white;
}
.red-va::-moz-placeholder, .blue-va::-moz-placeholder { /* Firefox 19+ */
color: white;
}
.red-va:-ms-input-placeholder, .blue-va:-ms-input-placeholder {
color: white;
}
Or if you can afford to change the markup you can go further by adding a common class to both .red-va and .blue-va so you don't have to duplicate your selectors for both — effectively halving the CSS that you currently have.
The reason you can't group them all into one ruleset is covered here. In short, it's because browsers are required to drop an entire ruleset if they don't recognize any part of the selector list, which will be caused by the vendor prefixes (and in the case of Firefox, also by the fact that versions older than 19 don't recognize the pseudo-element syntax).
Thankfully, prefixed pseudos will soon be a thing of the past.

Prettify Custom Theme Code does not fit

On certain browsers (Firefox, in this case), the size of a given font is different, which prompted me to download a copy of a theme (desert) from the Google Code page and tweak it myself since the theme had a different background color from my website and I wanted to change the background color of the theme to fit that of my website. However, this version of the theme creates a border around the assumed code area, unlike when I used the online version. I was able to fix the color issue, but I would very much like to remove the border.
I would embed the image, but I am not allowed to since I do not yet have 10 reputation on StackOverflow.
Image below from Firefox (which had the worst case of code overflow)
http://i1164.photobucket.com/albums/q570/SparenofIria/ScreenShot2015-01-19at21732PM_zps0541bc46.png
If someone could direct me to a solution, that would be greatly appreciated. Thank you.
EDIT: The border is filling to the size of the div.
Below are the contents of desert.css. The only things that have been changed from the version I found online are the background colors (#333 to #FFF).
/* desert scheme ported from vim to google prettify */
pre.prettify { display: block; background-color: #FFF }
pre .nocode { background-color: none; color: #000 }
pre .str { color: #ffa0a0 } /* string - pink */
pre .kwd { color: #f0e68c; font-weight: bold }
pre .com { color: #87ceeb } /* comment - skyblue */
pre .typ { color: #98fb98 } /* type - lightgreen */
pre .lit { color: #cd5c5c } /* literal - darkred */
pre .pun { color: #fff } /* punctuation */
pre .pln { color: #fff } /* plaintext */
pre .tag { color: #f0e68c; font-weight: bold } /* html/xml tag - lightyellow*/
pre .atn { color: #bdb76b; font-weight: bold } /* attribute name - khaki */
pre .atv { color: #ffa0a0 } /* attribute value - pink */
pre .dec { color: #98fb98 } /* decimal - lightgreen */
/* Specify class=linenums on a pre to get line numbering */
ol.linenums { margin-top: 0; margin-bottom: 0; color: #AEAEAE } /* IE indents via margin-left */
li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8 { list-style-type: none }
/* Alternate shading for lines */
li.L1,li.L3,li.L5,li.L7,li.L9 { }
#media print {
pre.prettify { background-color: none }
pre .str, code .str { color: #060 }
pre .kwd, code .kwd { color: #006; font-weight: bold }
pre .com, code .com { color: #600; font-style: italic }
pre .typ, code .typ { color: #404; font-weight: bold }
pre .lit, code .lit { color: #044 }
pre .pun, code .pun { color: #440 }
pre .pln, code .pln { color: #000 }
pre .tag, code .tag { color: #006; font-weight: bold }
pre .atn, code .atn { color: #404 }
pre .atv, code .atv { color: #060 }
}
add border:none; outline:none; box-shadow:none; To that element's css since one of those is most likely causing that. This is the best i could do without actually looking at the code
By adding !important;, the css now works. Thanks to those who helped, but in the end I just didn't look around hard enough/forgot that !important; existed.
pre.prettyprint {
border: none !important;
}

fail to change placeholder color with Bootstrap 3

Two questions:
I am trying to make the placeholder text white. But it doesn't work. I am using Bootstrap 3. JSFiddle demo
Another question is how do I change placeholder color not globally. That is, I have multiple fields, I want only one field to have white placeholder, all the others remain in default color.
html:
<form id="search-form" class="navbar-form navbar-left" role="search">
<div class="">
<div class="right-inner-addon"> <i class="icon-search search-submit"></i>
<input type="search" class="form-control" placeholder="search" />
</div>
</div>
</form>
css:
.right-inner-addon {
position: relative;
}
.right-inner-addon input {
padding-right: 30px;
background-color:#303030;
font-size: 13px;
color:white;
}
.right-inner-addon i {
position: absolute;
right: 0px;
padding: 10px 12px;
/* pointer-events: none; */
cursor: pointer;
color:white;
}
/* do not group these rules*/
::-webkit-input-placeholder { color: white; }
FF 4-18
:-moz-placeholder { color: white; }
FF 19+
::-moz-placeholder { color: white; }
IE 10+
:-ms-input-placeholder { color: white; }
Assign the placeholder to a class selector like this:
.form-control::-webkit-input-placeholder { color: white; } /* WebKit, Blink, Edge */
.form-control:-moz-placeholder { color: white; } /* Mozilla Firefox 4 to 18 */
.form-control::-moz-placeholder { color: white; } /* Mozilla Firefox 19+ */
.form-control:-ms-input-placeholder { color: white; } /* Internet Explorer 10-11 */
.form-control::-ms-input-placeholder { color: white; } /* Microsoft Edge */
It will work then since a stronger selector was probably overriding your global. I'm on a tablet so i cant inspect and confirm which stronger selector it was :) But it does work I tried it in your fiddle.
This also answers your second question. By assigning it to a class or id and giving an input only that class you can control what inputs to style.
There was an issue posted here about this: https://github.com/twbs/bootstrap/issues/14107
The issue was solved by this commit: https://github.com/twbs/bootstrap/commit/bd292ca3b89da982abf34473318c77ace3417fb5
The solution therefore is to override it back to #999 and not white as suggested (and also overriding all bootstraps styles, not just for webkit-styles):
.form-control::-moz-placeholder {
color: #999;
}
.form-control:-ms-input-placeholder {
color: #999;
}
.form-control::-webkit-input-placeholder {
color: #999;
}
A Possible Gotcha
Recommended Sanity Check - Make sure to add the form-control class to your inputs.
If you have bootstrap css loaded on your page, but your inputs don't have the
class="form-control" then placeholder CSS selector won't apply to them.
Example markup from the docs:
I know this didn't apply to the OP's markup but as I missed this at first and spent a little bit of effort trying to debug it, I'm posting this answer to help others.
I'm using Bootstrap 4 and Dennis Puzak's solution does not work for me.
The next solution works for me
.form-control::placeholder { color: white;} /* Chrome, Firefox, Opera*/
:-ms-input-placeholder.form-control { color: white; } /* Internet Explorer*/
.form-control::-ms-input-placeholder { color: white; } /* Microsoft Edge*/
Bootstrap has 3 lines of CSS, within your bootstrap.css generated file that control the placeholder text color:
.form-control::-moz-placeholder {
color: #999999;
opacity: 1;
}
.form-control:-ms-input-placeholder {
color: #999999;
}
.form-control::-webkit-input-placeholder {
color: #999999;
}
Now if you add this to your own CSS file it won't override bootstrap's because it is less specific. So assmuning your form inside a then add that to your CSS:
form .form-control::-moz-placeholder {
color: #fff;
opacity: 1;
}
form .form-control:-ms-input-placeholder {
color: #fff;
}
form .form-control::-webkit-input-placeholder {
color: #fff;
}
Voila that will override bootstrap's CSS.
The others did not work in my case (Bootstrap 4). Here is the solution I used.
html .form-control::-webkit-input-placeholder { color:white; }
html .form-control:-moz-placeholder { color:white; }
html .form-control::-moz-placeholder { color:white; }
html .form-control:-ms-input-placeholder { color:white; }
If we use a stronger selector (html first), we don't need to use the hacky value !important.
This overrides bootstraps CSS as we use a higher level of specificity to target .form-control elements (html first instead of .form-control first).
I think qwertzman is on the right track for the best solution to this.
If you only wanted to style a specific placeholder, then his answer still holds true.
But if you want to override the colour of all placeholders, (which is more probable) and if you are already compiling your own custom Bootstrap LESS, the answer is even simpler!
Override this LESS variable:
#input-color-placeholder
Boostrap Placeholder Mixin:
#mixin placeholder($color: $input-color-placeholder) {
// Firefox
&::-moz-placeholder {
color: $color;
opacity: 1; // Override Firefox's unusual default opacity; see https://github.com/twbs/bootstrap/pull/11526
}
&:-ms-input-placeholder { color: $color; } // Internet Explorer 10+
&::-webkit-input-placeholder { color: $color; } // Safari and Chrome
}
now call it:
#include placeholder($white);
You should check out this answer : Change an HTML5 input's placeholder color with CSS
Work on most browser, the solution in this thread is not working on FF 30+ for example
With LESS the actual mixin is in vendor-prefixes.less
.placeholder(#color: #input-color-placeholder) {
...
}
This mixin is called in forms.less on line 133:
.placeholder();
Your solution in LESS is:
.placeholder(#fff);
Imho the best way to go. Just use Winless or a composer compiler like Gulp/Grunt works, too and even better/faster.

Resources