Browser does not display td with enough space to hold contents
I have a table cell whose content is a styled a tag. The height of the styled a tag is 29px high, but the content-height attribute of the td cell is 19px, that is the value of line-height for the font that is in use. I see this in the Firefox inspector. The styled a tag is higher than simple text because it has padding and borders. I do not understand why the browser has not included the padding and borders of the content in calculating the height and width of the td tag that is intended to hold the content. I do not want to explicitly set the height of the td in case I later change the style for the a tag. I cannot find any documentation of how the td, or any box, calculates the height of the content-area.
td.odd {
font-family: sans-serif;
background-color: #F8F8F8;
border-right: thin solid black;
border-bottom: thin solid black;
padding: 2px 2px 2px 2px;
empty-cells: show;
}
td.left {
text-align: left;
float: none;
}
td.center {
text-align: center;
float: none;
}
td.right {
text-align: right;
float: none;
}
a.button {
font-family: sans-serif;
font-weight: bold;
font-size: 80%;
text-align: center;
text-decoration: none;
background-color: #E0E0E0;
color: #000000;
border-top: 2px solid white;
border-left: 2px solid white;
border-bottom: 3px solid #606060;
border-right: 3px solid #606060;
padding: 4px 12px 4px 12px;
}
<tr id="location">
<td class="odd right">
<a href="Location.php?id=$IDLR&lang=$LANG" class="button">
Details
</a>
</td>
<td class="odd left">
$LOCATION
</td>
<td class="odd center">
$LOCPRESENT
</td>
<td class="odd center">
$NOTESPRESENT
</td>
<td class="odd center">
$BOUNDPRESENT
</td>
</tr>
An example of the page that is not displaying to my satisfaction is https://www.jamescobban.net/FamilyTree/Locations.php?pattern=%5EZephyr&namefld=
Note how the "button" in the first cell does not fit in the containing table cell.
I would expect the size of the content-area in the td to match the size of the actual element contained in the td. Instead the td is using some fictional element which is only the height of the text.
This is due to the display mode of the content of the cell. <a> elements display inline by default, so their height will be treated as the line height. In your example, try adding display: block or display: inline-block to the a.button rule.
Demo:
table, th, td {
border: 1px solid black;
}
.button {
background: #ddd;
padding: 5px;
border: 2px solid black;
}
.block {
display: block;
}
<h4>Bad Table:</h4>
<table><tr>
<td><a class="button">Button A</a></td>
<td>Another Cell 1</td>
</tr><tr>
<td><a class="button">Button B</a></td>
<td>Another Cell 2</td>
</tr></table>
<h4>Good Table:</h4>
<table><tr>
<td><a class="button block">Button A</a></td>
<td>Another Cell 1</td>
</tr><tr>
<td><a class="button block">Button B</a></td>
<td>Another Cell 2</td>
</tr></table>
Related
As seen in the attached, some results paragraphs do not "conform" to what seems to be the "standard" specification for width (visible from results paragraph at top of image.
How can we control (limit) the overall width of the table to prevent the oversize table that was generated for "productdata.js" ?
Also, the left-side box with icon and "fit" factor is specified in the header with width = 100px, but the oversize table/paragraph seems to have overriden this and reduced the width to the width of the icon plus margin. Is there any way to prevent that from happening ?
The current contents of the paragraph CSS is:
<table style="background-color: #AFAFAF; width: 850px;"
<!-- <table class="parspec" style="background-color: #AFAFAF;" -->
border-style="none" border-color:="" border="0">
<tbody>
<tr>
<td style="width: 100px; text-align: center;
background-color: #0F0F0F;"
rowspan="4" >
<a class="thumbnail" href="#">
<img src="%I" width="64px" height="auto"> <!-- set width of thumbnail -->
<span>
<img src="%U">
</span>
</a>
<p style="font-family: sans-serif; color: #4F9F4F;"><b>%R</b></p>
</td>
<td style="vertical-align: top;"><br>
<th
style="font-family: sans-serif; color: #DFDFDF;
background-color: #000000; text-align: left;"
colspan="3" >
%T</th>
</td>
</tr>
<tr>
<td style="vertical-align: top; "></td>
<td style="font-family: sans-serif; text-align: center;
background-color: #000000; color: #CFCF4F;">
<b><font size=2>%M</font></b></td>
<td style="font-family: sans-serif; text-align: center;
background-color: #000000; color: #CFCF4F;">
<b><font size=2>%D</font></b></td>
<td style="font-family: sans-serif; text-align: right;
background-color: #000000; color: #CFCF4F;">
<b><font size=2>%S</font></b></td>
</tr>
<tr style="font-family: sans-serif;" 8="">
<td style="vertical-align: top; "></td>
<td class="snippet" colspan="3">
%A</td>
</tr>
<tr style="font-family: sans-serif; color: #9F;">
<td style="vertical-align: top; "></td>
<td style="background-color: #000000; color: #BFBFEF;"
colspan="3">
<b><font size=2>%U</font></b><br>
<span style="color: #BFBFFF">%L </span></td>
</tr>
</tbody>
</table>
<br>
<br>
The current contents of the header CSS is:
<style type="text/css">
body {
width: 1000px;
color: #CFCFCF;
background-color: #1F1F1F;
}
a:link {
color: yellow;
background-color: transparent;
text-decoration: none;
}
a:visited {
color: green;
background-color: transparent;
text-decoration: none;
}
a:hover {
color: orange;
background-color: transparent;
font-weight: bold;
text-decoration: underline;
}
a:active {
color: red;
background-color: transparent;
text-decoration: underline;
}
.snippet{
background-color: #000000;
color: #AFAFDF;
}
.thumbnail {
display:block;
position:relative;
padding: 4px;
width: auto; /* set width of thumbnail image in 'paragraph' code - not here */
border:none;
z-index:0;
}
.thumbnail:hover {
border:none;
background-color: transparent;
z-index: 50;
}
.thumbnail span {
position: absolute;
left: -9999px;
visibility: hidden;
}
.thumbnail span img {
max-width:256px; /* set 'large image' max width/height - advise keeping these */
max-height:256px; /* the same to avoid inadvertently changing the aspect ratio */
width:auto; /* leave set to auto */
height:auto; /* leave set to auto */
background-color: gray;
padding: 1px;
border: 1px solid black;
}
.thumbnail:hover span {
visibility: visible;
top: 4px; /* top/left positions 'large image' relative to top left */
left: 88px; /* of parent thumbnail (plus padding) */
}
</style>
After discussions with the developer for recoll, it has been determined that the problem was not with the customizations that I was attempting to apply.
The root of the problem was in fact a bug in the recoll code.
I have a table with 3 columns. I'd like to remove the border/cellspacing between the first and second columns, and make it appear like one column.
Fiddle: https://jsfiddle.net/o8x3ego0/1/
HTML
<table id="holdingsDistributionTable" class="table table-responsive">
<tr>
<th colspan="2">Currency</th>
<th>Value</th>
</tr>
<tr>
<td>
<div class="currencyHolder greenCurrencyHolder">
<div class="currency greenCurrency">
AED
</div>
</div>
</td>
<td>
<div style="text-align: center">
UA Emirates Dirham
</div>
</td>
<td>
<b>345</b>
</td>
</tr>
<tr>
<td>
<div class="currencyHolder blueCurrencyHolder">
<div class="currency blueCurrency">
ARS
</div>
</div>
</td>
<td>
<div style="text-align: center">
Argentine Peso
</div>
</td>
<td>45345</td>
</tr>
</table>
In the above example, I'd like to remove the spacing between the 1st and 2nd columns in the data rows.
You can remove the border from the entire table by:
table {
border-collapse: collapse;
}
Then to add borders to the rows, table headers and the last table cells (or whatever table cells necessary by using :nth-child):
tr, th, td:last-child {
border: 1px solid black; /* changed to black to be more noticeable */
}
Then remove padding from the table header and table cells:
th, td {
padding: 0;
}
Here is the updated fiddle.
edit: it was col and not row, so i believe this is more like this : https://jsfiddle.net/o8x3ego0/6/ (same method, but padding to draw the hole in between th )
you can use
border-collapse to remove cellspacing and to allow style tr borders
a line-height to th instead padding
draw a transparent border at bottom of th (padding works too)
and erase bg color with background-clip to mimic the border-spacing only where you want to
body {
background-color: white;
}
/* demo */
tr:nth-child(1) th {
border-bottom: 3px solid transparent;
background-clip: content-box
}
table {
border-collapse: collapse;
}
/* end */
.table {
margin-bottom: 20px;
}
.table-responsive {
width: 100%;
overflow-x: auto;
overflow-y: hidden;
-webkit-overflow-scrolling: touch;
-ms-overflow-style: -ms-autohiding-scrollbar;
border: 1px solid #ddd;
}
.currencyHolder {
padding: 7px;
border-radius: 5px;
border-width: 2px;
border-style: solid;
margin-top: 10px;
margin-bottom: 10px;
max-width: 36px;
text-align: center;
}
.currency {
border-radius: 5px;
color: white;
font-size: 11px;
font-weight: bold;
}
.greenCurrencyHolder {
background-color: green;
border-color: darkgreen;
}
.greenCurrency {
background-color: darkgreen;
}
.blueCurrencyHolder {
background-color: azure;
border-color: cadetblue;
}
.blueCurrency {
background-color: cadetblue;
}
#holdingsDistributionTable {
display: table;
/*width: 100% !important;*/
}
#holdingsDistributionTable th {
background-color: #F4F5F6;
color: #AAABAE;
line-height: 2.5em;
/* instead vertical padding */
width: 25%;
font-weight: normal;
}
#holdingsDistributionTable th:last-child,
#holdingsDistributionTable td:last-child {
background-color: #DFE1E3;
color: #A19D9E;
}
#holdingsDistributionTable td:last-child {
background-color: #DFE1E3;
color: black;
}
#holdingsDistributionTable th,
#holdingsDistributionTable td {
min-height: 15px;
background-color: #F4F5F6;
}
<table id="holdingsDistributionTable" class="table table-responsive">
<tr>
<th colspan="2">Currency</th>
<th>Value</th>
</tr>
<tr>
<td>
<div class="currencyHolder greenCurrencyHolder">
<div class="currency greenCurrency">
AED
</div>
</div>
</td>
<td>
<div style="text-align: center">
UA Emirates Dirham
</div>
</td>
<td>
<b>345</b>
</td>
</tr>
<tr>
<td>
<div class="currencyHolder blueCurrencyHolder">
<div class="currency blueCurrency">
ARS
</div>
</div>
</td>
<td>
<div style="text-align: center">
Argentine Peso
</div>
</td>
<td>45345</td>
</tr>
</table>
The best solution would be to make your table only two columns in the first place and do not use colspan="2" then make the stylized currency abbreviation line up with the currency name by setting the two div in each column inline block items using display: inline-block; in your CSS
Fiddle: https://jsfiddle.net/f30tujzn/
this solution is not only easier then removing part of your border but will render faster, and respond better on smaller devices.
I want to focus a full table when is selected, but when I click on the table focus is not working.
So I tried hover on the table and hover is working. How can I focus the whole table?
https://jsfiddle.net/bbe7x7bp/1/
table {
border: 1px solid #e2e2e4;
text-align: left;
}
table:hover {
border: 3px solid #878b93;
outline: 1px solid #242b3a;
}
.table:focus {
border: 1px solid blue;
outline: 1px solid darkblue;
}
You can add tabindex to your table (in the HTML). Set tabindex="0" to put it in the natural tab order or tabindex=-1 to make it focusable, but not something you can tab to. tabindex=1 will force it to be the first thing in the tab order..
Just like here: https://jsfiddle.net/bbe7x7bp/2/
<table class="table" tabindex="1">
<tbody>
<trhead>
<td colspan="7">Some title</td>
</trhead>
<tr class="table-info">
<td>data 1</td>
<td>data 2</td>
<td colspan="5">data something</td>
</tr>
</tbody>
</table>
and
table {
border: 1px solid #e2e2e4;
text-align: left;
}
table:hover {
border: 3px solid #878b93;
outline: 1px solid #242b3a;
}
.table:focus {
border: 1px solid blue;
outline: 1px solid darkblue;
}
and you can read about tabindex right here: http://www.w3schools.com/tags/att_global_tabindex.asp
<a>s, <button>s, <input>s, and textareas all have the :focus state by default, but you can give a focus state to any element in HTML5. Both the contenteditable and tabindex attributes work for this, as in this example:
<table contenteditable tabindex="1">
<thead>
<tr>
<th>Option 1</th>
</tr>
</thead>
<tbody>
<tr>
<td>Me</td>
</tr>
</tbody>
</table>
Codepen here
Please have a look in the following URL:
"http://jsfiddle.net/7rsx0r4h/"
I want the output like the output table with border and should be look like separate box but don't want to change my html (div layout). Also every box i require some space then another box start.
Thanks,
Manish
demo - http://jsfiddle.net/victor_007/7rsx0r4h/1/
added outline for the first div
change body to the parent id or class
body > div {
outline:1px solid #4679bd;
}
changed border color to white so that it looks like empty space
div div {
border-top: 2px solid white;
}
body > div {
outline: 1px solid #4679bd;
}
div {
width: 496px;
border: 2px solid white;
border-top: 0;
color: #fff;
text-align: center;
font-size: 120%;
background: #4679bd;
}
div div {
font-size: 100%;
width: auto;
border: 0;
border-top: 2px solid white;
line-height: 250%;
}
<p>Divs:</p>
<div>
<div>1
<div>1.1
<div>1.2
<div>1.2.1</div>
</div>
</div>
</div>
<div>2
<div>2.1
<div>2.2
<div>2.2.1</div>
</div>
</div>
</div>
<div>3</div>
<div>4</div>
</div>
<br />
<p>Table:</p>
<table border="1px" width="500px">
<tr>
<td>1</td>
</tr>
<tr>
<td>1.1</td>
</tr>
<tr>
<td>1.2</td>
</tr>
<tr>
<td>1.2.1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
<tr>
<td>3.1</td>
</tr>
</table>
I have inherited responsibility for some web page updates and have to work within the parameters of the existing design, but the coding used is all tables with lots of formatting in EVERY table cell. I am getting a headache just trying to work through it. I want to simplify by using styles, and need to have several different styles. Specifically, the table heading is all bold, centered and one font size, so it will get one style for the row. The first column needs to be bold and centered, and the fifth column is centered (but regular font weight). All the other columns are left aligned and regular weight. The rows are alternating between white and colored.
So my question is can I style the rows in two styles to change the color, and then how would I style the 2 columns that need to be bold and/or centered, or do I need to style each cell to make this work?
<tr style="height: 27.75pt">
<td style="padding-right: 5.4pt; padding-left: 5.4pt; background: #d2eaf1; padding-bottom: 0in; border-left: #78c0d4 1pt solid; width: 41.4pt; border-top-color: #f0f0f0; padding-top: 0in; border-bottom: #78c0d4 1pt solid; height: 27.75pt; border-right-color: #f0f0f0" valign="top" width="55">
<p align="center" style="margin: 0in 0in 0pt; line-height: normal; text-align: center">
<strong><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'">2</span></strong></p>
</td>
<td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #f0f0f0; background: #d2eaf1; padding-bottom: 0in; width: 137.8pt; border-top-color: #f0f0f0; padding-top: 0in; border-bottom: #78c0d4 1pt solid; height: 27.75pt; border-right-color: #f0f0f0" valign="top" width="184">
<p style="margin: 0in 0in 0pt; line-height: normal">
<span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">Grace Episcopal Church</span></p>
</td>
<td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #f0f0f0; background: #d2eaf1; padding-bottom: 0in; width: 72.45pt; border-top-color: #f0f0f0; padding-top: 0in; border-bottom: #78c0d4 1pt solid; height: 27.75pt; border-right-color: #f0f0f0" valign="top" width="97">
<p style="margin: 0in 0in 0pt; line-height: normal">
<span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">Nyack</span></p>
</td>
<td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #f0f0f0; background: #d2eaf1; padding-bottom: 0in; width: 96.85pt; border-top-color: #f0f0f0; padding-top: 0in; border-bottom: #78c0d4 1pt solid; height: 27.75pt; border-right-color: #f0f0f0" valign="top" width="129">
<p style="margin: 0in 0in 0pt; line-height: normal">
<span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">John Smith</span></p>
<p style="margin: 0in 0in 0pt; line-height: normal">
<span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">Tom Jones </span></p>
</td>
<td style="padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #f0f0f0; background: #d2eaf1; padding-bottom: 0in; width: 63pt; border-top-color: #f0f0f0; padding-top: 0in; border-bottom: #78c0d4 1pt solid; height: 27.75pt; border-right-color: #f0f0f0" valign="top" width="84">
<p align="center" style="margin: 0in 0in 0pt; line-height: normal; text-align: center">
<span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">222-1234</span></p>
<p align="center" style="margin: 0in 0in 0pt; line-height: normal; text-align: center">
<span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">333-6789</span></p>
</td>
<td style="border-right: #78c0d4 1pt solid; padding-right: 5.4pt; padding-left: 5.4pt; border-left-color: #f0f0f0; background: #d2eaf1; padding-bottom: 0in; width: 147.4pt; border-top-color: #f0f0f0; padding-top: 0in; border-bottom: #78c0d4 1pt solid; height: 27.75pt" valign="top" width="197">
<p style="margin: 0in 0in 0pt; line-height: normal">
<span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">johnsmith#optonline.net</span></p>
<p style="margin: 0in 0in 0pt; line-height: normal">
<u><span style="font-size: 10pt; font-family: 'Tahoma','sans-serif'">tomjones#att.net </span></u></p>
</td>
</tr>
I have cleaned up most of the code with internal style sheet, but have two remaining issues. The width of each column does not change using width style in each column class. Also, when I change the font size from 11pt to 12 pt it wraps text in two columns and thus throws off the intended design of the table. I'm sure I am missing a fairly easy tweak at this point.
If it matters, I am using a site that has its own wysiwyg front end and I have limited access to source code - I can make some changes but not full control, but this is what I am stuck working with.
<style type="text/css">
.tablestyle {
border: #78c0d4 1pt solid;
cellpadding:none;
cellspacing: none;
border: medium none;
border-collapse: collapse;
width: 740;
table-layout: fixed;
}
#heading {
text-align:center;
line-height:normal;
font-size:26px;
font-family: Arial, Helvetica, sans-serif;
color:#252525;
}
.tablerowblue {
border: #78c0d4 1pt solid;
background: #d2eaf1;
border-right-color: #f0f0f0;
vertical-align:top;
line-height: normal;
font-size: 12px;
color: black;
font-family: Arial, Helvetica, sans-serif;
}
.tablerowwhite {
border: #78c0d4 1pt solid;
background: #ffffff;
vertical-align:top;
line-height: normal;
font-size: 12px;
color: black;
font-family: Arial, Helvetica, sans-serif;
}
.tableheadbold {
padding: 0 5px;
border: #78c0d4 1pt solid;
background: #4bacc6;
border-right-color: #f0f0f0;
vertical-align:top;
text-align: center;
font-size: 12px;
color: black;
font-family: Arial, Helvetica, sans-serif;
font-weight:bold;
}
.col1 {
width: 40;
font-weight:bold;
text-align:center;
border: #78c0d4 1pt solid;
}
.col2 {
width:80;
border: #78c0d4 1pt solid;
padding: 0px 5px;
}
.col3 {
width:70;
border: #78c0d4 1pt solid;
padding: 0px 5px;
}
.col4 {
width:170;
border: #78c0d4 1pt solid;
padding: 0px 5px;
}
.col5 {
width:140;
text-align:center;
border: #78c0d4 1pt solid;
padding: 0px 5px;
}
.col6 {
width:190;
color:black;
border: #78c0d4 1pt solid;
padding: 0px 5px;
}
</style>
<div>
</div>
<p id="heading">
Troops</p>
<p>
</p>
<table class="tablestyle">
<tbody>
<tr class="tableheadbold">
<td>
Troop</td>
<td>
Chartered Organization<br />
Meeting Location</td>
<td>
Town/City</td>
<td>
Unit Leader<br />
Comm. Chair</td>
<td>
Phone</td>
<td>
E-Mail</td>
</tr>
<tr class="tablerowwhite">
<td class="col1">
2</td>
<td class="col2">
Grace Episcopal Church</td>
<td class="col3">
Nyack</td>
<td class="col4">
Leader Name 1<br />
Leader Name 2</td>
<td class="col5">
222-1234<br />
333-6789</td>
<td class="col6">
johnsmith#optonline.net<br />
tomjones.net</td>
</tr>
<tr class="tablerowblue">
<td class="col1">
10</td>
<td class="col2">
Atonement Lutheran Church</td>
<td class="col3">
Stony Point</td>
<td class="col4">
Leader Name 1<br />
Leader Name 2</td>
<td class="col5">
222-1234<br />
333-6789</td>
<td class="col6">
johnsmith#optonline.net<br />
tomjones.net</td>
</tr>
</tbody>
</table>
Use class selectors..
.tableStyle td {
text-align:left;
}
.row_w td {
background-color:#fff;
}
.row_c td {
background-color:#ffc;
}
.col_1 {
font-weight:bold;
text-align:center;
}
.col_5 {
text-align:center;
}
.row_h { /*anytime you want to customize */ }
HTML
<table class="tableStyle" >
<tr class="row_h" ><th ></th>.. <th></td></tr>
<tr class="row_w" ><td class="col_1" ></td>.. <td class="col_5" ></td>... </tr>
<tr class="row_c" ><td class="col_1" ></td>.. <td class="col_5" ></td>... </tr>
</table>
The rest of TDs/THs will follow the style instructed by the TR class style.
You can target a specific td by using the nth-child pseudo selector, that way you won't have to go through all the tds and add a class to them one by one.
A quick demo here : http://jsfiddle.net/Ftb6x/
Not every browser supports it unfortunately : http://caniuse.com/#search=nth-child
The markup looks like it was produced with Microsoft Word. It is difficult to override all the presentational mess there, especially the cell widths set in points, or fractions of points. I would suggest cleaning up the markup. I have a small utility for that. It does not remove the pointless p markup inside cells, but that markup can be effectively ignored in rendering by setting
th p, td p { margin: 0; }
With the cleaned up document, set the font on the page (Arial is boring but better than Tahoma), then table borders, cell spacing, and cell padding reasonably.
Then put the heading cells (I suppose this is what “the table heading” refers to) in a tr that is inside thead, and use th for the cells. They will then be by default bold and centered. They should normally have the same size as the rest of the table, but if desired, make it bigger this way:
thead th { font-size: 110%; }
You might consider making the first column cells th, since they sound like headings, but maybe it is sufficient to set just
td:first-child { text-align: center; font-weight: bold; }
though such styling looks odd for data like in the code snippet – it looks like something that should be left-aligned. Similarly, phone numbers should hardly be centered, but if you insist, this can be done in this case by setting
td:nth-child(5) { text-align: center; }
To set alternating background colors, as in the code snippet posted, use
tr:nth-child(odd) { background: #d2eaf1; }
If someone pays you for extra work needed to make the styling work even on old versions of IE (IE 8 and older), then you can either add column-based styling using col elements or, perhaps better, use the Selectivzr polyfill.