kindle

How to align table data for Kindle (KF8)


I'm doing my first steps with the kindle format KF8. The Publishing Guidelines states that the format supports CSS3:

The earlier Kindle platform offered very basic support for Cascading Style Sheets (CSS). This has been significantly enhanced in KF8 with support for CSS 2/CSS 3.

Now this seems to be "very basic" here: I want to right align text in a table cell. Compare the output of Chrome vs kindlegen 2.9 / Kindle Previewer 2.94. Kindle Preview ignores the alignment completely.

What am I doing wrong?

Chrome vs Kindle Preview

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Table sample</title>
        <meta charset="utf-8" />
        <style>
td.right {
    padding: 2px 4px;
    text-align : right;
}

td.left {
    padding: 2px 4px;
    text-align : left;
}

td.center {
    padding: 2px 4px;
    text-align : center;
}

h2 { color: green; }

</style>
    </head>
    <body>
        <a name="part2_chap1"/>
        <article role="main">
            <header class="chapter">
                <hgroup>
                    <h2>ALIGNMENT</h2>
                </hgroup>
            </header>
            <div class="epigraph">
                <p class="noind">How to right align table data</p>
            </div>
            <section class="table" id="table01">
                <table>
                    <tr>
                        <th>
                            <i>---center---</i>
                        </th>
                        <th>
                            <i>---right---</i>
                        </th>
                        <th>
                            <i>---right---</i>
                        </th>
                        <th>
                            <i>---left---</i>
                        </th>
                    </tr>
                    <tr>
                        <td class="center">---centered---</td>
                        <td class="right">right&gt;</td>
                        <td class="right">right&gt;</td>
                        <td class="left">&lt;left</td>
                    </tr>
                    <tr>
                        <td class="center">centered</td>
                        <td class="right">right&gt;</td>
                        <td class="right">right&gt;</td>
                        <td class="left">&lt;left</td>
                    </tr>
               </table>
            </section>
        </article>

    </body>
</html>

Solution

  • It's frustrating when you have to make such workarounds in the name of styling, but I would advise applying the text alignment to a containing element within the td, e.g.

    Stylesheet snippet:

    td.right div {         
         width: 100%;
         text-align: right;
     }
    

    Html snippet:

    <tr>
        <td class="right"><div>right&gt;</div></td>
    </tr>
    

    Hopefully this will suit your needs until Amazon tidy this up.