How to set STYLE which work only on down side controls? - html

I want to set style for <td> tag, I am designing table in a page. I want to give different styles for upper and lower cells, is that possible to set <style> which only do work on down side <td> tags.
Please Help.

Yes, you either give a class to lower <td> tags and then inside <style> you can set their style. or you can use this css selector without giving your <td> elements a class.
Here is a representation of what I just said:
<table id="table1">
<tr>
<td>1</td>
<td class="lowertd">2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td class="lowertd">2</td>
<td>6</td>
</tr>
</table>
<style>
#table1 tr td:last-child {
background-color: green;
}
.lowertd {
background-color: silver;
}
#table1 tr td:nth-child(1) {
background-color: blue;
}
</style>

For your requirement you need to create a css class and reference it by
<td class="someclass" ........... >
although you want to add this class, only for elements for which you need styling.
and in CSS under <style> , define css attributes. Something like below
<style>
.someclass{
property: value;
.
.
.
}
</style>
Hope this solves your problem.

I got the answer...
Just set the particular rows in any tag like <thead>, <tbody> or <tfoot>
<table id="table1">
<thead>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
<tr>
<td>A</td>
<td>B</td>
<td>C</td>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>6</td>
</tr>
</tbody>
</table>
then set style
<style>
table thead td
{
border:none;
}
</style>

You can style the first 10 <td> tags differently by using the nth-of-type selector and then setting a style for those elements:
td:nth-child(-n+10) { text-decoration: underline; }
jsfiddle

Related

Giving border to <tr> of table in a table

How do i give a border to the <tr>(t_border).
The inner table shouldnt inherit the style from the outer one
<table>
<tr>
<td>A</td>
</tr>
<tr>
<td>
<table class="t_border">
<tr>
<td>B</td>
</tr>
</td>
</tr>
</tbody>
You can try as per my code:
<style>
table{
border-collapse: collapse;
}
table.t_border tr{
border:solid 1px red;
}
</style>
<table>
<tr>
<td>A</td>
</tr>
<tr>
<td>
<table class="t_border">
<tr>
<td>B</td><td>B</td><td>B</td>
</tr>
</table>
</td>
</tr>
</table>
Hope it might help you!
you can set separate style for the class .t_border, see example code..
<table>
<tr>
<td>A</td>
</tr>
<tr>
<td>
<table class="t_border">
<tr>
<td>B</td>
</tr>
</td>
</tr>
</table></td></tr></table>
<style>
.t_border
{
border: 1px solid red;
}
</style>
just give style of tr tag
<tr>
<td style="border : 1px solid black">B</td>
</tr>
If you need to style your border, you may use other answers.
But if you only need to use the pure HTML table style, you can use this :
<table border=1> to give border on your table inside table.
You can't add a border to a <tr>. You would have to add it to the <td>s. Also your t_border table isn't be being closed </table> and your outer table should be closed with </table> instead of </tbody>.
Just giving the border to the tr won't really have an effect. It would be better to give the td's a border top or bottom of what you want it to actually show up. For example, border-bottom:2px solid black;

Centering a column in a table

I am trying to center just certain columns in a table but I am having issues. I know in the past you would just simply apply inline styles to each TD but there has to be a better way.
Here is a simple example:
.centerText{
text-align:center;
}
<table border="1">
<col>
<col class="centerText">
<thead>
<tr>
<th>heading1</th>
<th>heading2</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
</tr>
</tbody>
</table>
With that class I am trying to center the text inside. I know applying css to the col will work for changing background color for the column and text color and such, but I am not sure how I would use it to center a column. I am assuming because I need to center the contents of the td and this is probably just centering the TD element itself; which is already 100 percent.
I understand I can just say apply the css to the 5th TD in this TR but that seems fragile.
Also, bonus points if you can show me how to change the width of a column this way. I used the width attribute for col but that is deprecated in html 5 (even though it is still currently supported.
Done, your class wasn't used anywhere
tr td:nth-child(2) {
text-align:center;
}
<table border="1">
<thead>
<tr>
<th>heading1</th>
<th>heading2</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td >2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
</tr>
</tbody>
</table>
I removed:
<col>
<col class="centerText">
and
.centerText{
text-align:center;
}
Because col doesn't mean anything and you didn't close the tags.
CSS
table {
border-collapse: collapse;
width: 100%;
}
td {
text-align: center
}
If you want to align your all td content to the center
add the centerText class to your table
<table class="centerText" border="1">
It's not completely clear what you want, but if you want to center the contents of a certain column, you can just use this CSS rule:
td:nth-child(2) {
text-align:center;
}
In this example it applies to the second column, but you could define that for any column. It works since the td are always children of a tr, so you can use the nth-child selector.
td:nth-child(2) {
text-align: center;
}
<table border="1">
<col>
<col class="centerText">
<thead>
<tr>
<th>heading1</th>
<th>heading2</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td>7</td>
<td>8</td>
</tr>
</tbody>
</table>

Dynamic names for CSS classes with nth-child

I want to create CSS-classes for the alignments of columns of tables.
I can achieve this by explicitly defining each class. Here is a complete working example:
<html>
<head>
<style>
table.s1l td:nth-child(1), table.s2l td:nth-child(2) {
text-align: left;
}
table.s1c td:nth-child(1), table.s2c td:nth-child(2) {
text-align: center;
}
table.s1r td:nth-child(1), table.s2r td:nth-child(2) {
text-align: right;
}
table.s5l td:nth-child(5) {
text-align: left;
}
</style>
</head>
<body>
<table class="s1c s2r">
<tr>
<td>center</td>
<td>right</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</table>
<table style="text-align: center;" class="s5l">
<tr>
<td>center</td>
<td>center</td>
<td>center</td>
<td>center</td>
<td>column for comments comment (aligned left)</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>Here is a comment</td>
</tr>
</table>
</body>
</html>
In the first table, for each column one class was asigned. In the second table all columns are centered, except the last one. Therefor the class s5l was used.
All this is part of a wiki, where users can define their tables and assign classes to the tables. Therefor it is unpredictable, which alignments for which columns are nessessary. So with this method, I am forced to define all classes explicitly for all the potential columns.
Is it possibile to create those class names implicitly instead of defining the classes for a high number of potential columns?
I want to propose this to an existing CSS-file, where no scripting is allowed, so only pure CSS may be used.
In the end it should look like this:
<html>
<head>
<style> # However the solution looks like
table.s[N]l td:nth-child([N]) {
text-align: left;
}
table.s[N]c td:nth-child([N]) {
text-align: center;
}
table.s[N]r td:nth-child([N]) {
text-align: right;
}
</style>
</head>
<body>
<table class="s1c s2r">
<tr>
<td>center</td>
<td>right</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
</tr>
<tr>
<td>3</td>
<td>4</td>
</tr>
</table>
<table style="text-align: center;" class="s5l">
<tr>
<td>center</td>
<td>center</td>
<td>center</td>
<td>center</td>
<td>column for comments comment (aligned left)</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>Here is a comment</td>
</tr>
</table>
</body>
</html>
So the classes s1c, s2r and s5l are created dynamically. And if, on another Wikipage, a user adds a big table with 11 columns and wants the last one centered, he simply adds the class s11c and it should work.
Try this:
.tab td:nth-child(1) {
text-align: left;
}
.tab td:nth-child(2) {
text-align: center;
}
.tab td:nth-child(3) {
text-align: right;
}

How to place ribbon on top of td tag element

I have table and i would like to place simple colored ribbon on top of <td> tag
Example of the table
How then to add ribbon at the top cornert of <td> tag
It sounds good idea helps to identify exact members than the other
so any help how i can add such kind of ribbon on top of <td>
HTML
<table border="1">
<tr>
<td>Name1</td>
<td>Email1</td>
</tr>
<tr>
<td>Name2</td>
<td>Email2</td>
</tr>
</table>
How then we add ribbon on Name1 <td> tag
~ Thanks
You can specify a CSS CLASS for the cells that need a ribbon, then define a background image for that class:
<style>
.ribbon {
/* remember that image url is relative to where the stylesheet or style tag is located at */
/* if this style were defined at /Style/site.css, then you would need a url indicating a previous directory like: ../Images/ribbon.png */
background-image: url('/Images/ribbon.png');
}
</style>
<table>
<tr>
<td class="ribbon">Cell 1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td class="ribbon">Cell 2</td>
<td>5</td>
<td>6</td>
</tr>
<tr>
<td class="ribbon">Cell 3</td>
<td>8</td>
<td>9</td>
</tr>
</table>
Use the :first-child selector, and a background image.
The HTML:
<table>
<tr>
<td>1</td><td>2</td>
</tr>
<tr>
<td>1</td><td>2</td>
</tr>
</table>
The CSS, using :first-child selector:
table { width:100%; }
td:first-child {
padding:10px;
width:50%;
background-image:url("http://placehold.it/10x10");
background-repeat:no-repeat;
}
The fiddle.
Live demo here (click).
td:first-child:before {
content: '';
width: 30px;
height: 5px;
background: red;
display: block;
position: relative;
left: -10px;
top: -5px;
transform:rotate(-9deg);
-ms-transform:rotate(-9deg);
-webkit-transform:rotate(-9deg);
}
My CSS is based around using a pseudo element to create the ribbon, but you could also give the pseudo element a background image with the appropriate height/width.

Wrong CSS is generated when using rich:dataTable with nested rich:tooltip

I use Richfaces and have a rich:datatable with nested rich:tooltip-s.
You can imagine the generated HTML looks like this:
<table style="width: 400px; border: 3px solid #000; caption-side: bottom; border-collapse:collapse;">
<caption align="bottom">Table 1.1: A record of the fur shed annually by Jennifer's dog Shasta</caption>
<thead>
<tr>
<th>Month</th>
<th>Fur Shed (mm)</th>
</tr>
<thead>
<tbody style="background-color: #ff3;">
<tr>
<td>April</td>
<td>20</td>
</tr>
<tr>
<td>May</td>
<td>19</td>
</tr>
<tr>
<td>June</td>
<td>10</td>
</tr>
<tr>
<td>July</td>
<td>6</td>
</tr>
<tr>
<td>August</td>
<td>8</td>
</tr>
<tr>
<td>September</td>
<td>14</td>
</tr>
</tbody>
<tbody>
<tr>
<td style="display:none;">
<script type="text/javascript">
new RichFaces.ui.DataTable("form1:table1:0:j_idt227",{"ajaxEventOptions":{}} )
</script>
</td>
</tr>
The problem with this html is in the 2nd (generated from RF) tbody: td has style="display:none;" and in Google Chrome this causes the bottom border being not shown.
My question is: do you know if it is possible to find a workaround to fix this? Moving the display:none; at tr or tbody level would already be a solution.
Thanks!
You can add a footer to the table (<f:facet name="footer">) which will render under the hidden row but if you don't want to you can use this CSS:
table > tbody > tr:last-child {
border-bottom: 3px solid #000;
}
this will find the last row and add a border at the bottom, of course this will affect every table on your page so you should use some identifiers. Also note that the :last-child selector may not be supported by all browsers (it does work in Chrome).
Other alternative is to wrap the table in a div but you'd need to play a little with the CSS to make it look the way you want.