Placing CSS information on an HTML page - html

Where are all of the places you can put CSS style information on an HTML page?
I know you can place CSS style info in the head of an HTML page, where else is it valid to put CSS elements?
I would like to place my CSS someplace else on the page due to inheritance, e.g:
<style type="text/css">
...
</style>

You can use
<link rel="stylesheet" type="text/css" href="style.css" />
in the head to link to an external stylesheet.
You can also have inline style attributes, such as
Hello
And you can also set the styles in your scripts, e.g. using jQuery (which can go where ever your script is):
$('textBox').css("font-weight", "bold");
However, it is good practise to try to keep all the style information in one standard spot, i.e. the head of the document - it makes it easier for others to maintain your work for you.
Note that if you really want to override a particular attribute, the best way to do it is to use the !important option, such as
color: red !important;
You can use this with any of the methods listed above, and it will override any later settings that conflict.

You can link external stylesheets in the <head> block. You can use more than one stylesheet, and they are loaded in order (in this example, both screen.css and print.css override some elements of style.css.
<link rel="stylesheet" href="style.css" type="text/css" media="all" />
<link rel="stylesheet" href="screen.css" type="text/css" media="screen" />
<link rel="stylesheet" href="print.css" type="text/css" media="print" />
You can import it from an external stylesheet in the <head> block:
<style>
#import url(style.css)
</style>
Or import it using another method:
<style type="text/css" media="all">
#import "style.css";
</style>
You can put the CSS in the <head> block:
<style type="text/css">
p {font-face:Arial;}
</style>
You can put the CSS inline into the html:
<ul> <li style="list-style:none">Item 1</li></ul>
You can add the CSS to the DOM via javascript:
function addCss(cssCode) {
var styleElement = document.createElement("style");
styleElement.type = "text/css";
if (styleElement.styleSheet) {
styleElement.styleSheet.cssText = cssCode;
} else {
styleElement.appendChild(document.createTextNode(cssCode));
}
document.getElementsByTagName("head")[0].appendChild(styleElement);
}

You can specify it "inline"
<div style="border: 1px solid red" />
Other than that I'm not used to place it anywhere else than separate files / <head>

Off hand:
In other documents. Include CSS files with the LINK element:
<link href="style.css" type="text/css" rel="stylesheet">
Inline with HTML elements:
<h1 style="color: red">Title</h1>
That is usually the only two other places you will put CSS. You can also apply CSS to documents via JavaScript.

As the others have said, non-inline CSS belongs in the head, if you want to write syntactically-correct code. Check the schema if you're not sure.
If you need to generate the CSS during dynamic page creation, you can easily inject it into the DOM, at the bottom of the head, using javascript:
document.getElementsByTags('head')[0].appendChild( -- css here --);
Be forewarned that this will cause your page rendering to slow down and "blink," as the browser must restyle the page when your new CSS is inserted. The same thing will happen if you ignore the schema and place your CSS in the body.
This leads to a poor user experience.

If you're concerned with inheritance in css then you need to remember this general rule. 
Inline styles > everything else. 
Tag > id
Id > class
Then you have combinations of these rules. 
Tag + id (div#main) > id
Parent tag + tag+id > tag+id 
Remember these are just general rules but they should take care of 99% of your situations. Placing styles in your scripts are generally a bad idea because it affects perfoance as others have noted and it adds another place for you to update when you need to change  the styles. 

So, you can specify it inline as an attribute on the element you want to style...
<p style=" font-weight:bold; ">
Or, you could add it in a style block in the page body or header
<style>
p {font-weight:bold;}
</style>
And lastly, you could include it from a linked CSS file by importing...
<style>
#import url(css/bold.css)
</style>
Or by linking it...
<link rel="stylesheet" href="css/bold.css" />
Honestly, linking is, 99.9999% of the time, is the best way to include stylesheets on a page as it neatly separates your CSS from your code, making updates to either much faster.

Related

How do I add a new stylesheet to HTML but keep the old one in the line above? What is the tag to type for that?

How do i enable one stylesheet while keeping the code for the other one disabled?
EDIT: form comment on the question: how to keep a reference to a style sheet but disabled:
There is no CSS way to disable a selector other than commenting it out (or editing to match no elements).
But a <link> element can be commented out in HTML:
<!-- <link rel="stylesheet" href="/styling/somestyles.css"> -->
and the browser ignores the content of comments (with a few notable legacy exceptions).
Original Answer
An HTML document can include as many (or as few, including zero) stylesheets as it likes.
It does not matter if these are links to external stylesheets:
<link rel="stylesheet" href="/styling/somestyles.css">
<link rel="stylesheet" href="/styling/morestyles.css">
or <style> blocks embedded in the HTML
<style type="text/css">
h2 {
color: green;
}
</style>
<style type="text/css">
h2.important {
color: hotpink;
}
</style>

Why does the order of the link elements in <head> matter?

From Code Academy's Make a Website: CSS Styling:
<head>
<link href="font.css" rel="stylesheet">
<link href="main.css" rel="stylesheet">
</head>
"Inside the head element are two link elements. The order of these
link elements matters.
The browser first sees the link for the custom font font.css, and
makes the font available to use in the page.
Next the browser sees the link for main.css. Since the browser now
knows about the custom font, we can use it from main.css to style
elements."
I want to have an intuition/answer as to why does the order matter (link to fonts before the main CSS stylesheet)?
I tried to do it in the other order (link to main stylesheet before link to fonts) and it still worked.
Order matters when you're overriding CSS definitions. This is part of the "cascade" of cascading style sheets. If main.css does not contain any font definitions, then the order doesn't matter.
For example: you were given a default CSS file from a designer, but you need to tweak it a little. Instead of editing the default.css file, you create a custom.css file and change only the handful of definitions that you wanted to tweak. Now the order matters.
<head>
<link href="default.css" rel="stylesheet">
<link href="custom.css" rel="stylesheet">
</head>
If you were to put custom.css first, then your changes would never appear.
Here's an article that gets into various levels of further detail. Warning, it can make your head spin.

Force CSS Style

I have a wordpress theme which have its default styling, I developed a new page template and wrote some styles specifically for it but for some reason the styles aren't being applied.
The styles include table cell-padding.
When inspecting the code, the css I applied is being stroked out. How can I force that CSS to apply itself. I have already tried using the !important but still no success
usually if you are developing your own theme for wordpress that there are no problems with the application of styles possible presence of an error in the connection of style, even when finished remaking theme personally I have no problems
Sometimes you have to use all classes and ids of div to declare style for it. Anyway you shouldn't use !important, but try to describe your div precisely.
Write CSS (stylesheet) at the end of the all css files in header, Write css in Hierarchy level. select parent class or id and written down css
CSS Declaration in Header
<head>
<link rel="stylesheet" type="text/css" href="defaultwordpress.css">
<link rel="stylesheet" type="text/css" href="own.css">
</head>
Can you make sure your own CSS code is called after the main CSS code ?
Maybe by changing the order of CSS calls in your head section like this :
<head>
<link rel="stylesheet" type="text/css" href="defaultWordpress.css">
<link rel="stylesheet" type="text/css" href="myOwn.css">
</head>
edit : default Wordpress css first :-)

Apply style sheet to only a specific element trait

After doing a bit of googling I was unable to come up with an answer, so here's my question. Is there a way to specify a specific element trait, such as an id, inwhich an entire style sheet should be applied?
For example if I have a block of html like this
<html>
<head>
<link rel="stylesheet" type="text/css" href="./style.css">
</head>
<body>
<div id="my_id">
<!-- A bunch of elements here -->
</div>
</body>
</html>
Is there a way to specify that the rules contained in ./style.css should only be applied to matching elements with in #my_id, similar to specifying #my_id before each rule in the style sheet.
I understand specifying #my_id before each rule will achieve this, but am wondering if there is a way to do it without the need to add bloat to the style sheet.
I'm working on a greasemonkey(userscript) script, which creates a 'container' element on a specific page in which it creates and places all other GUI elements required. I don't want my CSS interfering with the CSS on the page(such as accidentally over writing rules that already exist on the page), but don't want to add unnecessary bloat to my style sheet if it can be avoided since all rules are only to be applied to the 'wrapper' element and/or it's children.
To my knowledge this is not possible. As you stated you can prefix the rules with the ID, but this is not what you wanted to do.
I should say however, that you shouldn't have to specify a stylesheet for a single ID, because an ID is supposed to be unique in the context of the page. Furthermore, I find it bad practice to apply the same ID to elements which serve different purposes on different pages, because it can make writing common JavaScript pages quite confusing.
And this is one of the reasons people started to use SASS. In SASS this would be as easy as just nesting all the css classes within the id class like so:
#my_id {
// all styles without editing
// Now all these styles are applied only if they fall
// under the element with id "my_id".
}
EDIT : The other (ugly) option is to use an iframe instead of a div and load your child elements and stylesheet within it so that it is sandboxed as follows.
<html>
<head></head>
<body>
<iframe id="my_id">
<html>
<head>
<link rel="stylesheet" type="text/css" href="./style.css" />
</head>
<body>
<!-- A bunch of elements here -->
</body>
</html>
</iframe>
</body>
</html>
P.S: Don't forget to add the doctype. I have not added it in the example for simplicity.
you can apply style to elements within #my_id using the > selector. example:
#my_id {
/* some style for #my_id */
}
#my_id > p {
/* this will style all p tags within #my_id */
}

Adding external CSS in an HTML file

I know I can include CSS on my page like this:
<style>
.style{
..
}
</style>
How do I add an external stylesheet file in an HTML page?
In your HEAD, add:
<link rel="stylesheet" type="text/css" href="your_css_file.css">
the css file itself does not contain <style> tags.
The simplest way to do so is to add a stylesheet link to your document HEAD section:
<link rel="stylesheet" href="style.css" type="text/css">
Doing so will reduce the performance on the first load (since the system must request two files instead of one) but improve subsequent performance because the style sheet remains in cache for a while.
From StackOverflow's page:
<link rel="stylesheet" href="http://sstatic.net/so/all.css?v=5885" type="text/css">
I don't think it will improve speed much unless the same CSS file is shared across multiple webpages in your website (so the browser can cache it). Otherwise there's the penalty of creating an extra HTTP connection to retrieve the CSS.
Add the following line in the head of your html file
<link rel="stylesheet" type="text/css" href="path/to/your/style.css">
Then you can add styles in style.css like,
.classname{
...
}
And there is also inline style sheet, you can add it in the html line itself, for example
<a style="color:red;" href="#"></a>
You need to add this tag in the header section of your html file
<HEAD>
<link rel="stylesheet" type="text/css" href="giveThePathToYourStyle.css">
</HEAD>