Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 654
  • Last Modified:

XHTML compliant table formatting

Experts, I'm doing some development in XHTML, and have come across a problem with setting tables to be 100% the width and height of the page.

Basically, I've found a way to set the table to fit the size of the page, but the top row of the table will not set to 40px height.  Also, in the bottom row, the Iframe isn't rendering on the page (if I remove the height and width attributes it renders fine, but doesn't expand to fit the table cell).

How can I achieve the above, but still keep my page XHTML compliant?

The code from my page is below.

Many thanks!

////////////////////////////////////////////////////////////////////////////////////////////

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
      <title>Test</title>
</head>
<body style="height: 100%; width: 100%; margin: 0px;">

      <table style="width: 100%; height: 100%;" cellpadding="0" cellspacing="0" border="1">
            <tr style="height: 40px;">
                  <td valign="top" style="height: 40px;">
                        Top Row
                  </td>
            </tr>
            <tr>
                  <td>
                        Bottom Row
                        <iframe id="ifrArticle" width="100%" height="100%" frameborder="yes" src="http://www.google.com"></iframe>
                  </td>
            </tr>
      </table>
</body>
</html>

////////////////////////////////////////////////////////////////////////////////////////////
0
SamDorling
Asked:
SamDorling
3 Solutions
 
Eternal_StudentCommented:
I found a script that will enable this .... try this:


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
     <title>Test</title>
       <script language="JavaScript">
            <!--
            function resize_iframe()
            {
              //resize the iframe according to the size of the
              //window (all these should be on the same line)
              document.getElementById("ifrArticle").style.height=
                  parseInt(document.body.clientHeight-
                  document.getElementById("ifrArticle").offsetTop-8)+"px";
            }
            
            // this will resize the iframe every
            // time you change the size of the window.
            window.onresize=resize_iframe;
            
            //Instead of using this you can use:
            //      <BODY onresize="resize_iframe()">
            
            
            //-->
      </script>

      
</head>
<body style="height: 100%; width: 100%; margin: 0px;">

     <table style="width: 100%; height: 100%;" cellpadding="0" cellspacing="0" border="1">
          <tr style="height: 40px;">
               <td valign="top" style="height: 40px;">
                    Top Row
               </td>
          </tr>
          <tr>
               <td>
                    Bottom Row
                    <iframe id="ifrArticle" width="100%" onload='resize_iframe()' frameborder="yes" src="http://www.google.com"></iframe>
               </td>
          </tr>
     </table>
</body>
</html>
0
 
SamDorlingAuthor Commented:
Thanks for the comment Eternal_Student, however I was hoping to find a solution that didn't involve having to use JavaScript to set the height of rows - is there no way of doing what I want to achieve just via HTML, but keeping it XHTML compliant?

Thanks!
0
 
dharmeshmaniarCommented:
try following:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
     <title>Test</title>
</head>
<body style="height: 100%; width: 100%; margin: 0px;">

     <table style="width: 100%; height: 100%;" cellpadding="0" cellspacing="0" border="1">
          <tr style="height: 40px;">
               <td valign="top" style="height: 40px;">
                    Top Row
               </td>
          </tr>
          <tr>
               <td style="width: 100%; height: 100%;">
                    Bottom Row
                    <iframe id="ifrArticle" width="100%" height="100%" frameborder="yes" src="http://www.google.com"></iframe>
               </td>
          </tr>
     </table>
</body>
</html>

/////////////////////////////////////////////////////

Apply 100% height and width on the other <td> so the first row will take 40px and the other will occupy the left space.
0
Get free NFR key for Veeam Availability Suite 9.5

Veeam is happy to provide a free NFR license (1 year, 2 sockets) to all certified IT Pros. The license allows for the non-production use of Veeam Availability Suite v9.5 in your home lab, without any feature limitations. It works for both VMware and Hyper-V environments

 
SamDorlingAuthor Commented:
Thanks dharmeshmaniar, we're getting there, however the page is now 100% height plus 40 extra pixels (i.e. there's a scroll bar on the page, and the iframe goes off the bottom of the page by 40 pixels, presumably due to setting the bottom cell to be 100% height).

How can I get the iframe to fit the bottom cell, but not go off the bottom of the page?

Thanks!
0
 
zeroxpCommented:
in xhtml, a page has default width but no default height. so you cannt inherit height from it using percentage height.
a div or table must inherit height from an absolute value.
so you could either set a pixel height in the container table:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
</head>
<body>
<table style="width: 100%; height:555px;" cellpadding="0" cellspacing="0" border="1">
   <tr>
   <td style="vertical-align:top; width:100%; height:10%;">Top Row</td>
   </tr>
   <tr>
   <td style="width:100%; height:89%;">
   <iframe id="ifrArticle" width="100%" height="100%" frameborder="1" src="http://www.google.com"></iframe>
   </td>
   </tr>
</table>
</body>
</html>

or dont give height in the table and set absolute height for each row.
0
 
zeroxpCommented:
a work around with min-height for mozilla, (ie renders in another manner anyway, so it will be full height)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<style type="text/css">
html {height: 100%;}

body {min-height: 95%; margin: 0; padding: 0; height:100%;}

* html body {height:100%;}
</style>
</head>
<body>
<table style="width:100%; height:100%;" cellpadding="0" cellspacing="0" border="1">
   <tr>
   <td style="vertical-align:top; width:100%; height:10%;">Top Row</td>
   </tr>
   <tr>
   <td style="width:100%; height:89%;">
   <iframe id="ifrArticle" width="100%" height="100%" frameborder="1" src="http://www.google.com"></iframe>
   </td>
   </tr>
</table>
</body>
</html>
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now