Showing posts with label html. Show all posts
Showing posts with label html. Show all posts

Friday, August 23, 2013

How to Have No First Line Indent for Kindle eBooks

I hear this very often on Kindle formatting forums:

"I have no indents in my book, but when I publish it on Kindle there are indents on the first lines of every paragraph. Why are they there? How do I get rid of them?"

This most often happens when you format your book using Word (or any other word processor).

The sad truth is that if you set your first line indent to 0in in Word, you will get indents in your final Kindle book.

It seems that when you set the indent to 0 in Word, it doesn't actually set it to 0in, it set it to 'none'. What's the difference, isn't that the same thing? Well, in html (which is what all eBooks are based on) there is a difference.

If there are "no" first line indents:
What it Means: This means there is no mention of text-indent in the html.
The Result: The default indent of the device or program is used, for Kindle the default is a slight indent.

If first line indents are set to "0":
What it Means: "text-indent: 0" will be added to the style of the paragraph.
The Result: No indent.

So, what do you do if you want no indent?

In Word you can set the first line indent to a very small number (0.01in for example). This will set a very small indent (so that it won't go to default) and visibly it's not very different from 0in.

This could also happen if you edit your book as html or an ePub. In this case, the default indent can occur if you have no "text-indent" style for your paragraphs. To fix this simple add in "text-indent: 0".

Saturday, August 17, 2013

How to Keep Images and Captions Together in eBooks

I've come across this question a lot. How do I keep the captions below my images (or tables, figures, etc)?

As you know, eBooks don't have set 'pages', the text flows. The user can change the font, the size, and the margins of the text. So, what happens when your image is at the bottom of the screen and there's no room below it? Well, the caption is pushed to the top of the next screen. Many people don't like this, and I understand. The caption is supposed to stay with the image, that's why it's there.

The sad conclusion I've come to (after much research and experimenting) is that there is no easy way to keep the two together that will work on all devices or programs.

The first thing I tried was the html property "page-break: avoid".

You may use it in this manner:
<div style="page-break-inside: avoid">
<img src="../Images/example.jpg">
<p>This is the caption below the image</p>
</div>

This should cause those items within the "div" to not break across pages. Therefore the image and caption should stay together.

Note that I said should. I tried this method, and I found that whether it works or not depends on the device/program you use. Some would honor it, others wouldn't. Sadly, Amazon/Kindle does not honor this code.

At the time I was trying to code a Kindle book, so it was on to something else. I went to Amazon's website and found what html/css codes they support. If you're curious you can check it out here:
Supported HTML in eBooks in General
Supported HTML/CSS in KF8 eBooks

I found the codes "figure" and "figcaption" in the KF8 supported html. I thought maybe that would keep the two elements together. Unfortunately, in my tests it did not. I even tried combining the 'figure/figcaption' with the 'page-break-inside: avoid'. But, it still didn't work.

So in the end, the only method I've found that works right now (this may change in the future) is to place the caption within the image file.

To do this, open your image in some image editing program. GIMP is free and available for multiple operating systems. Add a little white space under your image and use the text tool to type in your caption.

One thing to keep in mind while using this method is that the text is now part of the image, which means the text will scale with the image. When your image appears very small (think about reading on an iPhone screen) the text will be very small as well. There's not much you can do about this. Try to make the text large enough to read on the majority of screens.

The good news it that this method will work on all devices/programs.

Friday, April 12, 2013

Using the 'title' Attribute with Chapter Titles

It's simple to set up your chapters to appear as you want them to in the Table of Contents (ToC) when they're a single line of text. Something like; Chapter One. But what if you want something more than that?

If you have a simple single line chapter title, all you need to do is format the line as a heading. In a word processor you would use one of the heading styles. If you're using html you would use h1, h2, h3, etc tags.

In this post I'm going to tell you how to have chapter titles that span multiple lines and chapter titles that are images. We're going to accomplish this by using the "title" attribute. To do this you'll need to be working with html. I don't know how to do this in the various word processors, and I'm not sure it's even possible. If anyone knows if it is possible please let me know.

If your chapter title is on separate lines, simply styling both lines as headings can cause problems. If your chapters are titled like this:

Chapter One
The Beginning

If you mark both lines as h1 they will both appear in the ToC as separate entries like in the image below.


If you decide to only use the h1 tag on the first line, then the second part "The Beginning" will not appear at all.

There are two ways to set this up so that it looks nice in the book and appears as you want in your ToC. One method is to use the h1 tag on the first line, and the p tag on the second line. Then use styling to make them look the same. The other method is to use the br tag. This will create a line break but will not start a new paragraph. The h1 tag wraps around both lines.

<h1 class="chaptertitle">Chapter One</h1>
<p class="chaptertitle">The Beginning</p>

or

<h1 class="chaptertitle">Chapter One<br />
The Beginning</h1>

Now you want your chapter titles to appear correctly in your ToC. If you add the "title" attribute within the h1 tag, it will be used instead of any text between the tags. Here's how it would look:

<h1 title="Chapter One - The Beginning" class="chaptertitle">Chapter One<br />
The Beginning</h1>

This will appear in the ToC as "Chapter One - The Beginning" like in the image below:


Now, what if you want to use an image as your chapter title? That brings a slightly different problem. You can use the h1 tag around the image to try to make it appear in the ToC. The problem is, since there's no text, the entry will appear blank. You can see that here:


But, if you use the "title" attribute, like in the two line chapter title, you can fix this. So, your code would look like this:

<h1 title="Chapter One" class="chaptertitle"><img src=".../Image/chap1.jpg" /></h1>

Now, Chapter One will appear in your ToC like this:


This can also be used if, for some reason, you want the text that appears on the page of your book to be different than the text that appears in the ToC.

(note: I used the h1 tag through my explanation, but this will work for all levels of headings: h1, h2, h3, h4, and h5)

Saturday, March 30, 2013

Using the @media query for Kindles


Amazon's new format, KF8, has added support for many features that the older mobi format was lacking. That's great, right? Well, KF8 is only supported on newer devices: the fourth generation of Kindles and newer.

But, I've heard from many authors that they don't want to limit their market. They want to sell their books on as many people as they can and I can certainly understand that.

So, what's the problem? The problem for me is, should I code the book for the older devices, or should I code it for newer devices?

The example I'm going to be using is tables since that's what I first experimented with.

Older Kindles had very limited support for tables. They supported simple tables, but they didn't look very great. So, the advice has generally been convert your tables to images and use that. That way you know your table will appear the way you want it to. On the other hand, the new KF8 format has much better support for tables. They also look and function much better.

If you code a table for a KF8 file, it won't look very good (or may display terribly) on older devices. But if you code a table for the older mobi format, you know that it could have been better on newer devices.

So, what to do?

Well, another new feature that came with KF8 was support for media queries. What does that mean? Basically you code for both versions in one file. The KF8 code will appear on devices that support it and the older code will appear on devices that don't.

I wrote up my experience when trying this for the first time as I was doing it. Here it is for anyone who would like to learn along with me:

So, first I build the book for KF8. That means building the tables in html. I like to do this separately at first. For example just open TextEdit/NotePad and write out the code for the table and fill it in. Once you're done with it you can copy/paste it into the book.

~~

Ok, now that the book is all finished and formatted for KF8, it's time to go back and code in the table images that will (hopefully) appear on older devices.

So, here's what I've added to my stylesheet:

.kf8
{ }
.mobi
{ display: none; }

@media amzn-mobi
{
.kf8
{ display: none; }
.mobi
{ display: block;
margin-left: auto;
margin-right:auto;}
}

So, the "mobi" class should only display on devices using the old mobi format. And I didn't want to change any of the formatting I'd already done so I left the "kf8" class blank.

Any table I have in the document gets the class "kf8" and just below them I'm adding in the images and giving them the class of "mobi".

<table border="1" cellpadding="5" class="kf8">
<p><img class="mobi" src="../Images/filename.jpg" /></p>

I left off the mobi class first to make sure the images display properly. Add in the mobi and watch them disappear.

Now, do this to all the tables in the book.

Now to toss it into kindlegen and see what happens. *Fingers crossed*
It completed the book with no warnings, that's a good sign.

Now to test the file. First, I'll open it in Kindle for Mac and see how it looks. Other than forgetting a kf8 class on one of the tables it seems to have worked. Now to try it in Kindle Previewer... And it works. I'm kinda surprised it went that easily. The tables are displayed on the Paperwhite and Fire, and the images are displayed on the Kindle and DX. Now, a final test. Load the file onto my Kindle Touch (KF8 supported) to see how it looks.

The tables are looking very good.

A success!

Here's a sample from Amazon's Kindle Publishing Guidelines (slightly editted by me) that you can try out for yourself. Try it in sigil or your favorite eBook/HTML editor and learn how to apply it to your own work.

Here's what you would add to your stylesheet:

.kf8
{ display: block; }
.mobi
{ display: none; }
@media amzn-mobi
{
.kf8
{ display: none; }
.mobi
{ display: block; }
}

And here's the code that would appear in your book:

<table class="kf8" bordercolor="#E66C2C" border="1" cellpadding="4">
<tr>
<th>Heading 1</th>
<th>Heading 2</th>
<th>Heading 3</th>
</tr>
<tr>
<td>Cell 1</td>
<td>
<table bordercolor="#003399" border="1" cellpadding="4">
<tr>
<td>Nested 1</td>
<td>Nested 2</td>
</tr>
<tr>
<td>Nested 3</td>
<td>Nested 4</td>
</tr>
</table>
</td>
<td>Cell 2</td>
</tr>
</table>
<img class="mobi" src="../Images/tableimage.jpg" />


A final note:
I used tables as an example, but this is definitely not limited to that. You can use this for any coding that you want to appear differently on one device vs another.
Just apply the “KF8” class to what you want to appear on the devices that support the new format. And apple the “mobi” class to what you want to appear on older devices.