Hi, this is more a conceptual question. How did the W3C decide to use hidden
vs. none
? I'm asking because I'm an ESL person (English as a second language). If I'm using overflow: hidden
, overflow: none
could just as well be used. The same goes for display: none
and visibility: hidden
. Couldn't it just have been display: none
and visibility: none
, because what really make the difference is the properties display
and visibility
and not their value. This is more a request for an explanation. Similiar "weird" things happens for example:
<script src="file.js">
and
<link href="file.css">
Why are they different? I understand how all of this works technically, I'm just curious about how they decided the names of the attributes.
Thanks.
display:none means that the tag in question will not appear on the page at all (although you can still interact with it through the dom). ... visibility:hidden means that unlike display:none , the tag is not visible, but space is allocated for it on the page. The tag is rendered, it just isn't seen on the page.
visibility: hidden preserve the space, whereas display: none doesn't preserve the space. Show activity on this post. visibility:hidden will keep the element in the page and occupies that space but does not show to the user. display:none will not be available in the page and does not occupy any space.
Visibility: hidden hides the tag, but it still takes up space and affects the page. In contrast, display: none removes the tag and its effects for all intents and purposes, but the tag remains visible in the source code.
CSS Display − none does not render the element on the document and thus not allocating it any space. CSS Visibility − hidden does renders the element on the document and even the space is allocated but it is not made visible to the user.
The reason these entities (elements, properties, attributes, etc.) are named different things is because they serve different purposes. Let's start from the top and go through your examples.
display: none;
visibility: hidden;
As you can see from the CSS 2.1 specification, the value none
is used for many different properties to indicate that the property's visual aspect should not be shown. So if the property is float
, none
means the element isn't floating. For the property display
, none
means it's not displaying.
For visibility
, hidden
is different, since it unlike display
, doesn't affect element flow. The element's box will still be rendered, but it will be invisible. If you gave the value none
to visibility
, it would semantically mean the exact same thing as display: none
, which it isn't.
overflow: hidden;
overflow: none;
These mean different things. hidden
says that the content that overflows the size of the element will be clipped, while none
says that there is no overflow control; in effect turning overflow off. none
is not a valid value for overflow
, but in this case, visible
has the same effect.
<script src="file.js">
<link href="file.css">
The difference between script
and link
is that while a script
's main purpose is to embed (either inline, or through reference via the src
attribute) a script inside the HTML document, the purpose of link
is to refer to other URIs on the world wide web. The fact that you use link
to refer to a CSS stylesheet is not very intuitive; a more intuitive solution might be:
<style src="file.css" />
I don't have the details on why the HTML Working Group chose to use link
and not style
, but from a little bit of digging, it seems that the link
element was already present in HTML 1.0 and HTML 2.0 and that style
wasn't introduced until HTML 3.0.
As discussions around a style sheet language started as early as in 1993 (the same year HTML 1.0 was completed) and HTML 3.0 wasn't done until 1995, it makes sense that they found a way to embed stylesheets before the style
element was invented.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With