visit
Answer:
According to , the
user-select
is currently supported in all browsers except Internet Explorer 9 and earlier versions (but sadly still needs a vendor prefix). All of the correct CSS variations are:.noselect {
-webkit-touch-callout: none; /* iOS Safari */
-webkit-user-select: none; /* Safari */
-khtml-user-select: none; /* Konqueror HTML */
-moz-user-select: none; /* Old versions of Firefox */
-ms-user-select: none; /* Internet Explorer/Edge */
user-select: none; /* Non-prefixed version, currently
supported by Chrome, Edge, Opera and Firefox */
}
<p>
Selectable text.
</p>
<p class="noselect">
Unselectable text.
</p>
Note that it’s a non-standard feature (i.e. not a part of any specification). It is not guaranteed to work everywhere, and there might be differences in implementation among browsers, and in the future browsers can drop support for it. More information can be found in .
Alternative Answer:
In most browsers, this can be achieved using proprietary variations on the CSS
user-select
property, and now proposed in :*.unselectable {
-moz-user-select: none;
-khtml-user-select: none;
-webkit-user-select: none;
/*
Introduced in Internet Explorer 10.
See //ie.microsoft.com/testdrive/HTML5/msUserSelect/
*/
-ms-user-select: none;
user-select: none;
}
For Internet Explorer < 10 and < 15, you will need to use the
unselectable
attribute of the element you wish to be unselectable. You can set this using an attribute in HTML:<div id="foo" unselectable="on" class="unselectable">...</div>
Sadly this property isn’t inherited, meaning you have to put an attribute in the start tag of every element inside the
<div>
. If this is a problem, you could instead use JavaScript to do this recursively for an element’s descendants:function makeUnselectable(node) {
if (node.nodeType == 1) {
node.setAttribute("unselectable", "on");
}
var child = node.firstChild;
while (child) {
makeUnselectable(child);
child = child.nextSibling;
}
}
makeUnselectable(document.getElementById("foo"));
This tree traversal needs to be rerun whenever a new element is added to the tree, but it seems that it is possible to avoid this by adding a
mousedown
event handler that sets unselectable
on the target of the event. See for details. This still doesn’t cover all possibilities. While it is impossible to initiate selections in unselectable elements, in some browsers (Internet Explorer and Firefox, for example) it’s still impossible to prevent selections that start before and end after the
unselectable element without making the whole document unselectable.
<div>
within another <div>
using CSS?Answer: You can apply this CSS to the inner
<div>
:#inner {
width: 50%;
margin: 0 auto;
}
Of course, you don’t have to set the
width
to 50%
. Any width less than the containing <div>
will work. The margin: 0 auto
is what does the actual centering. If you are targeting (and later), it might be better to have this instead:#inner {
display: table;
margin: 0 auto;
}
It will make the inner element center horizontally and it works without setting a specific
width
. Working example here:#inner {
display: table;
margin: 0 auto;
border: 1px solid black;
}
#outer {
border: 1px solid red;
width:100%
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
Alternative Answer:
If you don’t want to set a fixed width on the inner
div
you could do something like this:#outer {
width: 100%;
text-align: center;
}
#inner {
display: inline-block;
}
<div id="outer">
<div id="inner">Foo foo</div>
</div>
That makes the inner
div
into an inline element that can be centered with text-align
.Answer:
There are three different implementations: pseudo-elements, pseudo-classes, and nothing.::-webkit-input-placeholder
. []:-moz-placeholder
(one colon). []::-moz-placeholder
, but the old selector will still work for a while. []:-ms-input-placeholder
. []::placeholder
[]Internet Explorer 9 and lower does not support the
placeholder
attribute at all, while any CSS selector for placeholders. The discussion about the best implementation is still going on. Note the pseudo-elements act like real elements in the . A
padding
on an input
will not get the same background color as the pseudo-element. CSS selectors User agents are required to ignore a rule with an unknown selector. See :a of selectors containing an invalid selector is invalid.So we need separate rules for each browser. Otherwise, the whole group would be ignored by all browsers.
::-webkit-input-placeholder { /* WebKit, Blink, Edge */
color: #909;
}
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
color: #909;
opacity: 1;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
color: #909;
opacity: 1;
}
:-ms-input-placeholder { /* Internet Explorer 10-11 */
color: #909;
}
::-ms-input-placeholder { /* Microsoft Edge */
color: #909;
}
::placeholder { /* Most modern browsers support this now. */
color: #909;
}
<input placeholder="Stack Snippets are awesome!">
Usage notes
opacity: 1
here.em
and test them with big minimum font size settings. Don’t forget translations: some languages for the same word.placeholder
but without CSS support for that (like Opera) should be tested too.input
types (email
, search
). These might affect the rendering in unexpected ways. Use the -webkit-appearance
and -moz-appearance
to change that. Example:[type="search"] {
-moz-appearance: textfield;
-webkit-appearance: textfield;
appearance: textfield;
}
Alternative Answer:
/* do not group these rules */
*::-webkit-input-placeholder {
color: red;
}
*:-moz-placeholder {
/* FF 4-18 */
color: red;
opacity: 1;
}
*::-moz-placeholder {
/* FF 19+ */
color: red;
opacity: 1;
}
*:-ms-input-placeholder {
/* IE 10+ */
color: red;
}
*::-ms-input-placeholder {
/* Microsoft Edge */
color: red;
}
*::placeholder {
/* modern browser */
color: red;
}
<input placeholder="hello"/> <br />
<textarea placeholder="hello"></textarea>
This will style all
input
and textarea
placeholders. Important Note: Do not group these rules. Instead, make
a separate rule for every selector (one invalid selector in a group
makes the whole group invalid).
Answer:
For controlling “cellpadding” in CSS, you can simply use
padding
on table cells. E.g. for 10px of “cellpadding”:td {
padding: 10px;
}
For “cellspacing”, you can apply the
border-spacing
CSS property to your table. E.g. for 10px of “cellspacing”:table {
border-spacing: 10px;
border-collapse: separate;
}
Issues in IE <= 7
This will work in almost all popular browsers except for Internet Explorer up through Internet Explorer 7, where you’re almost out of luck. “Almost” because these browsers still support the
border-collapse
property, which merges the borders of adjoining table cells. If you’re trying to eliminate cellspacing (that is,
cellspacing="0"
) then border-collapse:collapse
should have the same effect: no space between table cells. This support is buggy, though, as it does not override an existing cellspacing
HTML attribute on the table element.border-spacing
handles you. For Internet Explorer, if your situation is just right border-collapse:collapse
.table {
border-spacing: 0;
border-collapse: collapse;
}
Note: For a great overview of CSS properties that one can apply to tables and for which browsers, see this .
Answer:
There is currently no way to select the parent of an element in CSS. If there was a way to do it, it would be in either of the current CSS selectors specs:That said, the includes a
:has()
pseudo-class that will provide this capability. It will be similar to the .li:has(> a.active) { /* styles to apply to the li tag */ }
Alternative Answer:
You can use :*! > input[type=text] { background: #000; }
.input-wrap! > input[type=text] { background: #000; }
.input-wrap! > input[type=text]:focus { background: #000; }
<div class="input-wrap">
<input type="text" class="Name"/>
<span class="help hide">Your name sir</span>
</div>
You can select that
span.help
when the input
is active and show it:.input-wrap! .help > input[type=text]:focus { display: block; }
Answer:
The following CSS rule disables resizing behavior for elements:textarea {
resize: none;
}
To disable it for some (but not all)
textarea
s, there are a . To disable a specific textarea
with the name
attribute set to foo
(i.e., <textarea name="foo"></textarea>
):textarea[name=foo] {
resize: none;
}
Or, using an
id
attribute (i.e., <textarea id="foo"></textarea>
):#foo {
resize: none;
}
textarea {
resize: vertical; /* user can resize vertically, but width is fixed */
}
Note: This property does nothing unless the overflow property is something other than visible, which is the default for most elements.
So generally to use this, you’ll have to set something like overflow: scroll;Alternative Answer:
In CSStextarea {
resize: none;
}
Answer:
You can remove bullets by setting the to
none
on the CSS for the parent element (typically a <ul>
), for example:ul {
list-style-type: none;
}
You might also want to add
padding: 0
and margin: 0
to that if you want to remove indentation as well. See for a great walkthrough of list formatting techniques. Alternative Answer:
If you’re using Bootstrap, it has an “unstyled” class: Remove the default list-style and left padding on list items (immediate children only).Bootstrap 2:
<ul class="unstyled">
<li>...</li>
</ul>
Bootstrap 3 and 4:
<ul class="list-unstyled">
<li>...</li>
</ul>
Answer:
You can either use a semi-transparent image or use CSS 3:background-color: rgba(255, 0, 0, 0.5);
<p style="background-color: rgba(255, 0, 0, 0.5);">
<span>Hello, World!</span>
</p>
Alternative Answer:
In Firefox 3 and Safari 3, you can use RGBA. A little known trick is that you can use it in Internet Explorer as well using the gradient filter.background-color: rgba(0, 255, 0, 0.5);
filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#7F00FF00', EndColorStr='#7F00FF00');
.alpha60 {
/* Fallback for web browsers that doesn't support RGBa */
background: rgb(0, 0, 0) transparent;
/* RGBa with 0.6 opacity */
background: rgba(0, 0, 0, 0.6);
/* For IE 5.5 - 7*/
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
/* For IE 8*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";
}
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge" >
<title>An XHTML 1.0 Strict standard template</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<style type="text/css" media="all">
.transparent-background-with-text-and-images-on-top {
background: rgb(0, 0, 0) transparent; /* Fallback for web browsers that doesn't support RGBa */
background: rgba(0, 0, 0, 0.6); /* RGBa with 0.6 opacity */
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000); /* For IE 5.5 - 7*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)"; /* For IE 8*/
}
</style>
</head>
<body>
<div class="transparent-background-with-text-and-images-on-top">
<p>Here some content (text AND images) "on top of the transparent background"</p>
<img src="//i.imgur.com/LnnghmF.gif">
</div>
</body>
</html>
Answer:
You can try this basic approach:div {
height: 100px;
line-height: 100px;
text-align: center;
border: 2px dashed #f69c55;
}
<div>
Hello World!
</div>
A more versatile approach
This is another way to align text vertically. This solution will work for a single line and multiple lines of text, but it still requires a fixed height container:div {
height: 100px;
line-height: 100px;
text-align: center;
border: 2px dashed #f69c55;
}
span {
display: inline-block;
vertical-align: middle;
line-height: normal;
}
<div>
<span>Hello World!</span>
</div>
The CSS just sizes the
<div>
, vertically center aligns the <span>
by setting the <div>
‘s line-height equal to its height, and makes the <span>
an inline-block with vertical-align: middle
. Then it sets the line-height back to normal for the <span>
, so its contents will flow naturally inside the block. Simulating table display
And here is another option, which may not work on older (basically just Internet Explorer 7). Using CSS we simulate table behavior (since tables support vertical alignment), and the HTML is the same as the second example:div {
display: table;
height: 100px;
width: 100%;
text-align: center;
border: 2px dashed #f69c55;
}
span {
display: table-cell;
vertical-align: middle;
}
<div>
<span>Hello World!</span>
</div>
Using absolute positioning
This technique uses an absolutely positioned element setting top, bottom, left, and right to 0. It is described in more detail in an article in Smashing Magazine, .div {
display: flex;
justify-content: center;
align-items: center;
height: 100px;
width: 100%;
border: 2px dashed #f69c55;
}
<div>
<span>Hello World!</span>
</div>
Alternative Answer:
Another way is with . Just add the following code to the container element:
display: flex;
justify-content: center; /* align horizontal */
align-items: center; /* align vertical */
.box {
height: 150px;
width: 400px;
background: #000;
font-size: 24px;
font-style: oblique;
color: #FFF;
text-align: center;
padding: 0 20px;
margin: 20px;
display: flex;
justify-content: center;
/* align horizontal */
align-items: center;
/* align vertical */
}
<div class="box">
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh
</div>
Alternatively, instead of aligning the content via the container, the flexbox can also center the flex item with an when there is only one flex-item in the flex container. So to center the flex item both horizontally and vertically just set it with
margin:auto
.box {
height: 150px;
width: 400px;
background: #000;
font-size: 24px;
font-style: oblique;
color: #FFF;
text-align: center;
padding: 0 20px;
margin: 20px;
display: flex;
}
.box span {
margin: auto;
}
<div class="box">
<span>margin:auto on a flex item centers it both horizontally and vertically</span>
</div>
All the above applies to centering items while laying them out in horizontal rows. This is also the default behavior because by default the value for
flex-direction
is row
. If, however, flex-items need to be laid out in vertical columns, then
flex-direction: column
should be set on the container to set the main-axis as column and additionally the justify-content
and align-items
properties now work the other way around with justify-content: center
centering vertically and align-items: center
centering horizontally) .box {
height: 150px;
width: 400px;
background: #000;
font-size: 18px;
font-style: oblique;
color: #FFF;
display: flex;
flex-direction: column;
justify-content: center;
/* vertically aligns items */
align-items: center;
/* horizontally aligns items */
}
p {
margin: 5px;
}
<div class="box">
<p>
When flex-direction is column...
</p>
<p>
"justify-content: center" - vertically aligns
</p>
<p>
"align-items: center" - horizontally aligns
</p>
</div>
For cross-browser compatibility for
display: flex
and align-items
, you can use the following:display: -webkit-box;
display: -webkit-flex;
display: -moz-box;
display: -ms-flexbox;
display: flex;
-webkit-flex-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
Answer:
Use
max-height
in the transition and not height
. And set a value on max-height
to something bigger than your box will ever get. See .#menu #list {
max-height: 0;
transition: max-height 0.15s ease-out;
overflow: hidden;
background: #d5d5d5;
}
#menu:hover #list {
max-height: 500px;
transition: max-height 0.25s ease-in;
}
<div id="menu">
<a>hover me</a>
<ul id="list">
<!-- Create a bunch, or not a bunch, of li's to see the timing. -->
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</div>
Answer:
You can concatenate two transitions or more and
visibility
is what comes handy this time.div {
border: 1px solid #eee;
}
div > ul {
visibility: hidden;
opacity: 0;
transition: visibility 0s, opacity 0.5s linear;
}
div:hover > ul {
visibility: visible;
opacity: 1;
}
<div>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
</div>
(Don’t forget the vendor prefixes to the
transition
property.) Alternative Answer:
You need to hide the element by other means in order to get this to work. You can accomplish the effect by positioning both
<div>
s absolutely and setting the hidden one to opacity: 0
. If you even toggle the display
property from none
to block
, your transition on other elements will not occur. To work around this, always allow the element to be
display: block
, but hide the element by adjusting any of these means:height
to 0
.opacity
to 0
.overflow: hidden
.There are likely more solutions, but you cannot perform a transition if you toggle the element to
display: none
. For example, you may attempt to try something like this:div {
display: none;
transition: opacity 1s ease-out;
opacity: 0;
}
div.active {
opacity: 1;
display: block;
}
But that will not work. Because of this, you will always need to keep the element
display: block
, but you could get around it by doing something like this:div {
transition: opacity 1s ease-out;
opacity: 0;
height: 0;
overflow: hidden;
}
div.active {
opacity: 1;
height: auto;
}
In Conclusion
These are the 11 most commonly asked questions on CSS. If you have any
suggestions or any confusion, please comment below. If you need any
help, we will be glad to help you.
Hope this article helped you.
Previously published at