alamin ahmed: a typical geek 2.0

ideas.experiments.thoughts.life

home blog about me

Archive


Topics:


My projects

home » blog

CSS based table - table without TABLE

posted on: Thursday 24th July 2008
Why CSS and not TABLE.
Honestly, I have no good answer or explanation for you.  In fact I don't think any one does.  There are equal weight of advantage and disadvantage on both approaches.  Many people have tried to be strict and only show CSS benefit, and others did exactly same vice verse.

In this new "Web 2.0" era, CSS is becoming primary tool for designing and shaping web pages.  This is a good thing. CSS is really the best thing that happened to web designing.  Now designers can separate "data" from "presentation".  CSS also gives designers much more flexibilities and controls.  In terms of web standards and future, CSS certainly looks brighter.  So any attempt to migrate your any part of your web site to CSS, is a step toward right direction.  But if you taking your time then you can feel comfort knowing that tech giant like Google still uses TABLEs all over the place.  There is no sign of TABLE being deprecated from HTML, at least not any time soon.


Migrating HTML TABLE to CSS-P
Traditionally, you would use TABLE tag as follows:

<table>
    <thead>

        <tr>

            <td>Header Column 1</td>

            <td>Header Column 2</td>

        </tr>

    </thead>

    <tbody>

        <tr>

            <td>Body column 1</td>

            <td>body column 2</td>

        </tr>

    </tbody>

</table>
output:
Header Column 1 Header Column 2
Body Column 1 Body Column 2


My goal is to bring the same structure and coding layout using CSS.  To be precise, here is an example:

  <div class="table">

    <div class="row header">

       <div class="cell">Header Column 1</div>

       <div class="cell">Header Column 2</div>

    </div>

    <div class="row body">

        <div class="cell">Body Column 1</div>

        <div class="cell">Body Column 2</div>

    </div>

</div>
Looks good right? But we are far from being done.  Let's look at the output first:
output:
Header Column 1
Header Column 2
Body Column 1
Body Column 2

As you can see,  It is not at all what we expected.  Everything is showing in a single column in separate rows.  This needs to be fixed in CSS section.

CSS, time to play
If you noted, you know that we have used several classes inside our "div", for example -'table', 'row', 'cell'.  Our next step is to define those classes in css.  In "perfect world" (which basically means geniuses at Redmond complying with W3C web standard), creating table using CSS is extremely easy.  We can be done with the following lines of CSS codes:
  .table {

    display: table; }

.table .row {

    display: table-row; }

.table row .cell {

    display: table-cell; }


that's it. Simple right? Unfortunately, above styles are not supported by most browsers including Internet Explorer 6 and 7.  So it's basically useless for now.

CROSS BROWSER APPROACH:
alternative approach is to use 'inline-block' to define 'cell'.  In this case we additionally need to specify width of every cell in HTML code.  It is tedious depending on your table size and structure.  However, this is the only "good" solution we have.  Here is how:

Your CSS code is simple.  All we have to do is declare cell to be 'inline-block'.  This allows you to re-size your cell to any width/height you want.
.table { }

.table .row { }

.table .row .cell { display: inline-block; }

now in HTML add additional style to specify width of each column.

<div class="table">

    <div class="row header">

       <span class="cell" style='width:50px;'>Header Column 1</span>

       <span class="cell" style='width:50px;'>Header Column 2</span>

    </div>

    <div class="row body">

        <span class="cell" style='width:50px;'>Body Column 1</span>

        <span class="cell" style='width:50px;'>Body Column 2</span>

    </div>

</div>

This approach works for most browsers.  For IE 6 to work, you have to use "span" instead of "div" for the columns.  Don't ask me why.  This breaks W3C regulation since you are making "span" as a block element.

ANOTHER APPROACH:
Another approach is to use 'float'ing columns.
  .table { }

.table .row { clear: left; }

.table .row .column { float: left; }

We still have to specify width of every cell.  In additional, we have to clear the the floating after the last row.  For example:
<div class="table">

    <div class="row header">

       <span class="cell" style='width:50px;'>Header Column 1</span>

       <span class="cell" style='width:50px;'>Header Column 2</span>

    </div>

    <div class="row body">

        <span class="cell" style='width:50px;'>Body Column 1</span>

        <span class="cell" style='width:50px;'>Body Column 2</span>

    </div>

<div style='clear:left;'></div>

</div>
This approach is most widely compatible among browsers.  Your best bet is to chose between 'floating' cell or 'inline-block' cell.


FORMATTING TABLE
power of CSS comes when it's time to format - "presentation".  For example, we can format our headers and table in following css properties:

  .header {

    font-size:18px;

    font-weight:bold; }

.header .cell {

    line-height:24px; }



.table {

    border:2px solid #ccc; }

.table .row .cell {

    padding:3px;

    margin:2px; }

EXTENDING TABLE USING MULTIPLE CSS CLASSES:
another power of css is the ability to have multiple classes for an element.  We have already done this on row '<div class='row header'> so 'row' is one class and 'header' is another class.  Browser will join these two classes (append their properties) to render the element.

This technique comes in handy when using different types of tables, such as - table for creating form, table for listing items and so on.  For example:
  <div class='table form'>

    <div class='row'>

       <div class='cell label'>Enter your name:</div>

       <div class='cell input'><input type='text' /></div>

    </div>

</div>

and css codes
  .form {

    width:500px; }

.form .row .label {

    width:150px;

    font-weight:bold;

    text-align:right; }
As you can see we have added 'form' class with table and additional 'lable' and 'input' classes with cells.  You can imagine the possibilities when you start working with may different kinds of tables.

Mapping some of table's attributes to CSS properties:
cellpadding=2
.cell { padding:2px }

cellspacing=4
.cell { margin:4px; }

border=1
.table { border:1px solid red}
css allows you to define three dimension of border - color, style and size
width=100%
.table {width:100%}
can be applied to table, row or cell
align=center
.cell { text-align:center; }
if you want to center the table, then you have to use different approach. just wrap the table with another div and set it's text-align to center.
valign=middle
.cell {vertical-align:middle; }
different browser produce different result
bgcolor='#000000'
.cell {background-color:#000000;}




Tagged: css   html   Add comment

10 hot and useful tips to maximize iPhone's battery life

posted on: Monday 7th July 2008
Apple Inc. claims that iPhone has 8 hours talk time, 250 hours of standby, 6 hours of Internet, 7 hours of video playback and 24 hours of audio playback!! These are very impressive numbers, except that claims has lots of strings attached which no one actually reads it.

Although, you may not get even close to these numbers, but I will attempt to provide all tweaks and settings to get as close as possible.  I have collected most of these tips from Apple's fine prints and some from support page of an iPod. Don't worry, I am not going to ask you to turn of Wi-Fi or other features that would simply cripple your iPhone.

  1. Brightness setting:  this alone can do the trick of getting most out your iPhone's (or any device for that matter) battery life.  Even though iPhone has bright and gorgeous screen, you may want to turn it down to get that screen playable little longer!
    How-to: "Settings" -> "Brightness" -> slide it to about one seventh
  2. Auto brightness: iPhone has built-in sensor that checks the lighting condition where ever you are and adjust the brightness accordingly.  This is sweet feature, but the sensor eats up battery life.
    How-to: "Settings" -> "Brightness" -> turn the "Auto-Brightness" switch "OFF"
  3. Auto-Lock: turn that display off as frequently as possible.  Make sure it is set to 1 Minute
    How-to: "Settings" -> "General" -> "Auto-Lock" -> "1 Minute"
  4. Auto detect Wi-Fi: iPhone has feature to
    How-to: "Settings" -> "Wi-Fi" -> "Ask to Join Networks" -> turn "OFF"
  5. Email Check frequency: this may not be suitable for lots of business or frequent email users, but it does save battery life.  You can set iPhone to check email every 15, 30, 60 minutes or do manual check.  Of course, ideal setting for saving battery would be "Manual", but you can also set to "Every hour"
    How-to: "Settings" -> "Mail" -> "Auto-Check" -> select "Manual" or "Every hour"
  6. Turn of some sounds: iPhone makes noise for about everything you do on it.  You can turn off some of these sound effects such as keyboard click noise and Lock Sound noise.  These two are really unnecessary for the most part.
    How-to: "Settings" -> "Sounds" -> "Lock Sounds" turn "OFF" and "Keyboard Clicks" turn OFF
  7. Turn of that Equalizer: yes, according to Apple, turning of Equalizer will save little battery time!
    How-to: "Settings" -> "iPod" -> "EQ" -> "Off"
  8. Turn of Sound Check: iPhone provides Sound Check feature to adjust music volume to keep consistent range for all songs.  Most of the time it does not work (at least for my songs).  So you can turn it off to save some juice.
    How-to: "Settings" -> "iPod -> "Sound Check" turn "OFF"
  9. Audio encoding: compress size of your music file for better cache purpose and encode using MP3 or AAC encoding. AIFF and some other formats are not good and eats up CPU cycles
  10. Room Temperature: Keep iPhone in room temperature and do not charge your iPhone while it is in carrying case or cover.  This keeps battery in ideal temperature even when charging.
Hope these tricks help you get more life out of your iPhone's battery.  Just as an additional note, Apple has also announced iPhone's battery replacement program for $79.99 + shipping.  read it here: http://www.apple.com/support/iphone/service/battery/

Tagged: iphone   battery   Add comment

copyright© 2008 alaminahmed.com || powered by me! | v0.40