, and ) or image element. If the
found element is a block, Safari on iOS zooms the content to fit the screen width and then centers it. If it is an
image, Safari on iOS zooms to fit the image and then centers it. If the block or image is already zoomed in,
Safari on iOS zooms out.
Your webpage works well with double-tapping if you use columns and blocks. Read “CSS Basics” (page 117)
for how to add CSS to existing HTML.
Creating Compatible Web Content
Use Columns and Blocks
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
22Know iOS Resource Limits
Your webpage performing well on the desktop is no guarantee that it will perform well on iOS. Keep in mind
that iOS uses EDGE (lower bandwidth, higher latency), 3G (higher bandwidth, higher latency), and Wi-Fi (higher
bandwidth, lower latency) to connect to the Internet. Therefore, you need to minimize the size of your webpage.
Including unused or unnecessary images, CSS, and JavaScript in your webpages adversely affects your site’s
performance on iOS.
Because of the memory available on iOS, there are limits on the number of resources it can process:
● The maximum size for decoded GIF, PNG, and TIFF images is 3 megapixels for devices with less than 256
MB RAM and 5 megapixels for devices with greater or equal than 256 MB RAM.
That is, ensure that width * height ≤ 3 * 1024 * 1024 for devices with less than 256 MB RAM.
Note that the decoded size is far larger than the encoded size of an image.
● The maximum decoded image size for JPEG is 32 megapixels using subsampling.
JPEG images can be up to 32 megapixels due to subsampling, which allows JPEG images to decode to a
size that has one sixteenth the number of pixels. JPEG images larger than 2 megapixels are
subsampled—that is, decoded to a reduced size. JPEG subsampling allows the user to view images from
the latest digital cameras.
● The maximum size for a canvas element is 3 megapixels for devices with less than 256 MB RAM and 5
megapixels for devices with greater or equal than 256 MB RAM.
The height and width of a canvas object is 150 x 300 pixels if not specified.
●
JavaScript execution time is limited to 10 seconds for each top-level entry point.
If your script executes for more than 10 seconds, Safari on iOS stops executing the script at a random place
in your code, so unintended consequences may result.
This limit is imposed because JavaScript execution may cause the main thread to block, so when scripts
are running, the user is not able to interact with the webpage.
Read “Debugging” (page 104) for how to debug JavaScript on iOS.
● The maximum number of documents that can be open at once is eight on iPhone and nine on iPad.
Creating Compatible Web Content
Know iOS Resource Limits
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
23iOS Note: In iOS 1.1.4 and earlier, the JavaScript execution time was limited to 5 seconds and the
size of allocations to 10 MB. Also, the limit on the size of canvas elements was the same as Safari on
the desktop.
In iOS 2.2.1 and earlier, the sum of all of the frames needs to be less than 2 megapixels—that is,
width * height * number of frames ≤ 2 * 1024 * 1024. In iOS 3.0 and later, the limit
only applies to one frame at a time.
You also need to size images appropriately. Don’t rely on browser scaling. For example, don’t put a 100 x 100
image in a 10 x 10 element. Tile small backgrounds images; don’t use large background images.
Checking the Size of Webpages
You can check the size of your webpages by using Safari’s Web Inspector as described in “Optimizing Download
Time” in Safari User Guide for Web Developers or by saving your webpage as a web archive. The total size of
the web archive is the size of the page and its associated resources. Follow these steps to create a web archive:
1. Choose File > Save As.
2. Enter the filename in the Save As text field.
3. Choose Web Archive from the Format pop-up menu.
4. Click Save.
On OS X, check the size of the web archive using either Finder or Terminal. Typically, pages under 30 MB work
fine on iOS.
Creating Compatible Web Content
Know iOS Resource Limits
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
24Use the Select Element
If you use the select HTML element in your webpage, iOS displays a custom select control that is optimized
for selecting items in the list using a finger as the input device. On iOS, the user can flick to scroll the list and
tap to select an item from the list. Figure 1-3 compares the select element on the desktop with the select
element on iOS.
Figure 1-3 Comparison of the select element on the desktop and iOS
Select on the desktop Select on iPhone
Use Supported JavaScript Windows and Dialogs
Use windows and dialogs supported by Safari on iOS and avoid the others.
You can open a new window in JavaScript by invoking window.open(). Remember that the maximum number
of documents—hence, the maximum number of open windows—is eight on iOS.
Creating Compatible Web Content
Use the Select Element
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
25Supported JavaScript dialog methodsinclude alert, confirm, print, and prompt. If you use these methods,
Safari on iOS displays an attractive dialog that doesn’t obscure the webpage, as show in Figure 1-4.
Figure 1-4 Confirm dialog
iOS Note: Note that the showModalDialog method is not supported in Safari on iOS.
Use Supported Content Types and iOS Features
Be aware of the features you get for free in Safari on iOS by using supported content types and elements that
tailor the presentation of content for small handheld devices with touch screens. In particular, Safari on iOS
handles content types such as video and PDF files different from the desktop. Safari on iOS also has the ability
to preview content types and launch another application if it is available to display that type of document.
Following links such as phone numbers in your web content may launch applications too.
Creating Compatible Web Content
Use Supported Content Types and iOS Features
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
26On iPhone and iPod touch, the video and audio is played back in fullscreen mode only. The video automatically
expands to the size of the screen and rotates when the user changes orientation, as shown in Figure 1-5. The
controls automatically hide when they are not in use. On iPad, the video and audio is played either inline in
the webpage or in fullscreen mode. Read “Creating Video” (page 91) for how to export video for iOS.
Figure 1-5 Playing video on iOS
Creating Compatible Web Content
Use Supported Content Types and iOS Features
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
27PDF documents are easy to view using Safari on iOS and even easier to page through as shown in Figure 1-6.
PDF documents linked from web content are opened automatically. The page indicator keeps track of where
the user isin a document. And just as with video, the user can rotate iOS to view a PDF in landscape orientation.
Figure 1-6 Viewing PDF documents on iOS
Safari on iOS previews other content typeslike MS Office (Word, Excel and PowerPoint), iWork (Pages, Numbers,
and Keynote), and RTF documents. If another application registersfor a content type that Safari on iOS previews,
then that application is used to open the document. For example, on iPad, Pages may be used to open Word
and Pages documents that are previewed in Safari on iOS. If another application registers for a content type
that Safari on iOS doesn’tsupport natively or preview, then Safari on iOS allowsthe document to be downloaded
and opened using that application.
iOS Note: Previews of RTF documents is available in iOS 3.2 and later. The ability to open a
downloaded file is available in iOS 3.2 and later.
When the user taps certain types of links, Safari on iOS may launch a native application to handle the link—for
example, Mail to compose an email message, Maps to get directions, and YouTube to view a video. If the user
taps a telephone number link on a phone device, a dialog appears asking whether the user wants to dial that
number.On the desktop,most ofthese linksredirectto the respective website. Read Apple URL Scheme Reference
to learn more about using these types of links in your web content.
Creating Compatible Web Content
Use Supported Content Types and iOS Features
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
28iOS Note: Note that Java and Flash content types are not supported. See “Don’t Use Unsupported
iOS Technologies” (page 30) for a complete list of unsupported technologies.
Use Canvas for Vector Graphics and Animation
You can use the same canvas object used by Dashboard widgets to implement sophisticated user interfaces
for web applications. The canvas object was introduced in Safari 2.0, is adopted by other browser engines, and
is part of the WHATWG specification. Read WebKit DOM Programming Topics to learn more about using the
canvas object.
Use the HTML5 Audio and Video Elements
You can use the HTML5 audio and video elements to add audio and video to your webpages. On smaller
deviceslike iPhone and iPad touch, the movie playsin fullscreen mode only and automatic playback is disabled
so a user action is required to initiate playback. On iPad, the video plays inline in the webpage. When the video
is played inline, you can create custom controls and receive media events—for example, pause and play
events—to enhance the user experience. Use the HTMLMediaElement class and its subclasses, described in
Safari DOM Additions Reference , to do this. Read Safari HTML5 Audio and Video Guide for more in-depth
information on the audio and video elements. Read “Creating Video” (page 91) for how to create media files
compatible with Safari.
Use Supported iOS Rich Media MIME Types
Table 1-1 lists the rich media MIME types supported by Safari on iOS. Files with these MIME types and filename
extensions can be played on iOS.
Table 1-1 Supported iOS rich media MIME types
MIME type Description Extensions
audio/3gpp 3GPP media 3gp, 3gpp
audio/3gpp2 3GPP2 media 3g2, 3gp2
audio/aiff AIFF audio aiff, aif, aifc, cdda
audio/x-aiff
audio/amr AMR audio amr
Creating Compatible Web Content
Use Canvas for Vector Graphics and Animation
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
29MIME type Description Extensions
audio/mp3 MP3 audio mp3, swa
audio/mpeg3
audio/x-mp3
audio/x-mpeg3
audio/mp4 MPEG-4 media mp4
audio/mpeg MPEG audio mpeg, mpg, mp3, swa
audio/x-mpeg
audio/wav WAVE audio wav, bwf
audio/x-wav
audio/x-m4a AAC audio m4a
audio/x-m4b AAC audio book m4b
audio/x-m4p AAC audio (protected) m4p
video/3gpp 3GPP media 3gp, 3gpp
video/3gpp2 3GPP2 media 3g2, 3gp2
video/mp4 MPEG-4 media mp4
video/quicktime QuickTime Movie mov, qt, mqv
video/x-m4v Video m4v
Don’t Use Unsupported iOS Technologies
In general, Safari on iOS does not support any third-party plug-ins or features that require access to the file
system. The following web technologies are not supported on iOS:
● Modal dialogs
Don’t use window.showModalDialog() in JavaScript. Read “Use Supported JavaScript Windows and
Dialogs” (page 25) for a list of supported dialogs.
● Mouse-over events
The user cannot “mouse-over” a nonclickable element on iOS. The element must be clickable for a
mouseover event to occur as described in “One-Finger Events” (page 69).
Creating Compatible Web Content
Don’t Use Unsupported iOS Technologies
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
30● Hover styles
Since a mouseover event is sent only before a mousedown event, hover styles are displayed only if the
user touches and holds a clickable element with a hover style. Read “Handling Events” (page 68) for all
the events generated by gestures on iOS.
● Tooltips
Similar to hover styles, tooltips are not displayed unless the user touches and holds a clickable element
with a tooltip.
●
Java applets
● Flash
Don’t bring up JavaScript alerts that ask users to download Flash.
● QuickTime VR (QTVR) movies
● Plug-in installation
● Custom x.509 certificates
● WML
Safari on iOS is not a miniature web browser—it is a full web browser that renders pages as
designed—therefore, there is no need for Safari on iOS to support Wireless Markup Language (WML).
Alternatively, it does support XHTML mobile profile document types and sites at .mobi domains.
The XHTML mobile document type is:
● File uploads and downloads
Safari on iOS does not support file uploading, that is, elements. If your webpage
includes an input-file control, Safari on iOS disables it.
Because iOS does not support file downloads, do not prompt the user to download plug-ins like Flash on
iOS. See “Using the Safari User Agent String” (page 36) for how to detect Safari on iOS.
By default, Safari on iOS blocks pop-up windows. However, it is a preference that the user can change. To
change the Safari settings, tap Settings followed by Safari. The Block Pop-ups setting appears in the Security
section.
Creating Compatible Web Content
Don’t Use Unsupported iOS Technologies
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
31iOSNote: The HTML contenteditable attribute issupported in iOS 5.0 and later. In earlier versions,
replace contenteditable, used to enable textinput within a styled element, with a styled textarea
element. In Safari, you can customize the appearance of textarea elements using CSS. If necessary,
you can even disable any platform-specific, built-in styling on a textarea element by
setting -webkit-appearance to none.
The window.print() method is supported in iOS 4.2 and later.
Downloadable web fonts are supported in iOS 1.1.4 and earlier, and iOS 4.2 and later.
SVG is supported in iOS 2.1 and later.
XSLT is supported in iOS 2.0 and later.
Creating Compatible Web Content
Don’t Use Unsupported iOS Technologies
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
32The first step in optimizing web content for iOS is to separate your iOS-specific content from your desktop
content and the next step is to tailor the web content for iOS. You might want to follow these steps even if
iOS is not your target platform so your web content is more maintainable in the future.
Use conditional CSS so that you can create iOS-specific style sheets as described in “Using Conditional CSS” (page
33). You can also use object detection and WebKit detection as described in “Follow Good Web Design
Practices” (page 19) to use extensions but remain browser-independent. Only if necessary, use the user agent
string as described in “Using the Safari User Agent String” (page 36) to detect Safari on iOS or a specific device.
After optimizing your content, read the rest of the chapters in this document to learn how to set viewport
properties, adjust text size, lay out forms, handle events, use application links, and export media for iOS. Finally
read “Debugging” (page 104) for how to debug your webpages.
Using Conditional CSS
Once you use CSS to lay out your webpage in columns, you can use conditional CSS to create different layouts
for specific platforms and mobile devices. Using CSS3 media queries, you can add iOS-specific style sheets to
your webpage without affecting how your webpages are rendered on other platforms.
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
33
Optimizing Web ContentFor example, Figure 2-1 shows a webpage containing conditional CSS specifically for iOS. Figure 2-2 shows
the same webpage rendered on the desktop.
Figure 2-1 Small device rendering
Figure 2-2 Desktop rendering
CSS3 recognizes several media types, including print, handheld, and screen. iOS ignores print and handheld
media queries because these types do not supply high-end web content. Therefore, use the screen media type
query for iOS.
Optimizing Web Content
Using Conditional CSS
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
34To specify a style sheet that isjust for iOS without affecting other devices, use the only keyword in combination
with the screen keyword in your HTML file. Older browsers ignore the only keyword and won’t read your
iOS style sheet. Use max-device-width, and min-device-width to describe the screen size.
For example, to specify a style sheet for iPhone and iPod touch, use an expression similar to the following:
To specify a style sheet for devices other than iOS, use an expression similar to the following:
Alternatively, you can use this format inside a CSS block in an HTML file, or in an external CSS file:
@media screen and (min-device-width: 481px) { ... }
Here are some examples of CSS3 media-specific style sheets where you might provide a different style for
screen and print. Listing 2-1 displays white text on dark gray background for the screen. Listing 2-2 displays
black text on white background and hides navigation for print.
Listing 2-1 Screen-specific style sheet
@media screen {
#text { color: white; background-color: black; }
}
Listing 2-2 Print-specific style sheet
@media print {
#text { color: black; background-color: white; }
#nav { display: none; }
}
For more information on media queries, see: http://www.w3.org/TR/css3-mediaqueries/.
Optimizing Web Content
Using Conditional CSS
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
35Using the Safari User Agent String
A browser sends a special string, called a user agent, to websites to identify itself. The web server, or JavaScript
in the downloaded webpage, detects the client’s identity and can modify its behavior accordingly. In the
simplest case, the user agentstring includes an application name—for example, Navigator asthe application
name and 6.0 as the version. Safari on the desktop and Safari on iOS have their own user agent strings, too.
The Safari user agent string for iOS is similar to the user agent string for Safari on the desktop except for two
additions: It contains a platform name and the mobile version number. The device name is contained in the
platform name. For example, you can detect iOS and the specific device such as iPad. Typically, you do not
send iPhone-specific web content to an iPad since it has a much larger screen. Note that the version numbers
in this string are subject to change over time as new versions of iOS become available, so any code that checks
the user agent string should not rely on version numbers.
For example, Listing 2-3 shows the user agent string for an iPhone running iOS 2.0 and later, where the string
XXXX is replaced with the build number.
Listing 2-3 iPhone running on iOS 2.0 user agent string
Mozilla/5.0 (iPhone; U; CPU iOS 2_0 like Mac OS X; en-us) AppleWebKit/525.18.1
(KHTML, like Gecko) Version/3.1.1 Mobile/XXXXX Safari/525.20
The parts of the Safari on iOS user agent string are as follows:
(iPhone; U; CPU iOS 2_0 like Mac OS X; en-us)
The platform string. iPhone is replaced with iPod when running on an iPod touch and iPad when
running on an iPad.
AppleWebKit/525.18.1
The WebKit engine build number.
Version/3.1.1
The Safari family version.
Mobile/XXXXX
The mobile version number, where XXXX is the build number.
Safari/525.20
The Safari build number.
For example, the user agent string for an iPod touch contains iPod in the platform name as shown in Listing
2-4.
Optimizing Web Content
Using the Safari User Agent String
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
36Listing 2-4 iPod touch running iOS 1.1.3 user agent string
Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko)
Version/3.0 Mobile/4A93 Safari/419.3
The user agent string for an iPad contains iPad in the platform name as shown in Listing 2-5.
Listing 2-5 iPad running iOS 3.2 user agent string
Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML,
like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10
Note that the user agent string is slightly different for earlier Safari on iOS releases. Listing 2-6 shows the user
agent string for an iPhone running iOS 1.1.4 and earlier. Note that the platform string does not contain the
iOS version number.
Listing 2-6 iPhone running iOS 1.0 user agent string
Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko)
Version/3.0 Mobile/1A543 Safari/419.3
Typically, you use the WebKit build number to test for supported WebKit HTML tags and CSS properties. The
Safari family version, or marketing version, is included in the user agent string for Safari on the desktop, too.
Therefore, you can use it to track usage statistics across all Safari platforms.
Go to these websites to learn more about other recommended techniques for detecting Safari and WebKit:
● webkit.org
http://trac.webkit.org/projects/webkit/wiki/DetectingWebKit
Contains JavaScript sample code for detecting Safari on iPhone and iPod touch.
● developer.apple.com
http://developer.apple.com/internet/webcontent/objectdetection.html
Optimizing Web Content
Using the Safari User Agent String
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
37Safari on iOS displays webpages at a scale that worksfor most web content originally designed for the desktop.
If these default settings don’t work for your webpages, it is highly recommended that you change the settings
by configuring the viewport. You especially need to configure the viewport if you are designing webpages
specifically for iOS. Configuring the viewport is easy—just add one line of HTML to your webpage—but
understanding how viewport properties affect the presentation of your webpages on iOS is more complex.
Before configuring the viewport, you need a deeper understanding of what the visible area and viewport are
on iOS.
If you are already familiar with the viewport on iOS, read “Using the Viewport Meta Tag” (page 46) for details
on the viewport tag and “Viewport Settingsfor Web Applications” (page 55) for web application tips. Otherwise,
read the sections in this chapter in the following order:
● Read “Layout and Metrics on iPhone and iPod touch” (page 39) to learn about the available screen space
for webpages on small devices.
● Read “What Is the Viewport?” (page 39) for a deeper understanding of the viewport on iOS.
● Read “Default Viewport Settings” (page 46) and “Using the Viewport Meta Tag” (page 46) for how to use
the viewport meta tag.
● Read “Changing the Viewport Width and Height” (page 47) and “How Safari Infers the Width, Height, and
Initial Scale” (page 50) to understand better how setting viewport properties affects the way webpages
are rendered on iOS.
● Read “Viewport Settings for Web Applications” (page 55) if you are designing a web application for iOS.
See “Supported Meta Tags” for a complete description of the viewport meta tag.
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
38
Configuring the ViewportLayout and Metrics on iPhone and iPod touch
Because Safari on iOS adds controls above and below your web content, you don’t have access to the entire
screen real estate. In portrait orientation, the visible area for web content on iPhone and iPod touch is 320 x
356 pixels as shown in Figure 1-1. In landscape orientation, the visible area is 480 x 208 pixels.
Figure 3-1 Layout and metrics in portrait orientation
480 pixels
Status bar: 20 pixels
URL text field: 60 pixels
Visible area: 320 x 356 pixels
Button bar: 44 pixels
Note that if the URL text field is not in use, it is anchored above the webpage and moves with the webpage
when the user pans. This adds 60 pixels to the height of the visible area. However, since the URL text field can
appear at any time, you should not rely on this extra real estate when designing your webpage. Video playback
uses the entire screen on small devices.
Read “Laying Out Forms” (page 62) in “Designing Forms” (page 62) for more metrics when the keyboard is
displayed for user input.
Note: Although it is helpful to know the metrics on small devices like iPhone and iPod touch, you
should avoid using these values in your code. Read “Using the Viewport Meta Tag” (page 46) for
how to use the viewport meta tag constants.
What Is the Viewport?
The viewport on the desktop and the viewport on iOS are slightly different.
Configuring the Viewport
Layout and Metrics on iPhone and iPod touch
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
39Safari on iOS has no windows, scroll bars, or resize buttons as shown on the right in Figure 3-2. The user pans
by flicking a finger. The user zooms in by double-tapping and pinch opening, and zooms out by pinch
closing—gestures that are not available for Safari on the desktop. Because of the differences in the way users
interact with web content, the viewport on the desktop and on iOS are not the same. Note that these differences
between the viewports may affect some of the HTML and CSS instructions on iOS.
Figure 3-2 Differences between Safari on iOS and Safari on the desktop
Safari on the desktop Safari on iPhone
Configuring the Viewport
What Is the Viewport?
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
40Safari on the Desktop Viewport
The viewport on the desktop is the visible area of the webpage as shown in Figure 3-3. The user resizes the
viewport by resizing the window. If the webpage is larger than the viewport, then the user scrolls to see more
of the webpage. When the viewport isresized, Safari may change the document’slayout—for example, expand
or shrink the width of the text to fit. If the webpage is smaller than the viewport, it is filled with white space
to fit the size of the viewport.
Figure 3-3 Safari on desktop viewport
Viewport
Safari on iOS Viewport
For Safari on iOS, the viewport is the area that determines how content is laid out and where text wraps on
the webpage. The viewport can be larger or smaller than the visible area.
When the user pans a webpage on iOS, gray bars appear on the right and bottom sides of the screen as visual
feedback to show the user the size of the visible area as compared to the viewport (similar to the length of
scroll bars on the desktop). Using the double tap, pinch open, and pinch close gestures, users can change the
scale of the viewport but not the size. The only exception is when the user changes from portrait to landscape
orientation—under certain circumstances, Safari on iOS may adjust the viewport width and height, and
consequently, change the webpage layout.
You can set the viewport size and other properties of your webpage. Mostly, you do this to improve the
presentation the first time iOS renders the webpage.
Configuring the Viewport
What Is the Viewport?
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
41Examples of Viewports on iOS
The viewport on iOS is best illustrated using a few examples. Figure 3-4 shows a webpage on iPhone, containing
a single 320 x 356 pixel image, that is rendered for the first time using the default viewport settings.
Figure 3-4 Viewport with default settings
Viewport
default width = 980 pixels
Configuring the Viewport
What Is the Viewport?
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
42Figure 3-5 shows the same webpage with the viewport set to the size of the visible area, which is also the size
of the image.
Figure 3-5 Viewport with width set to 320
Viewport
width = 320 pixels
scale = 1.0
Configuring the Viewport
What Is the Viewport?
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
43However, the viewport can be larger or smaller than the visible area. If the viewport is larger than the visible
area, as shown in Figure 3-6, then the user pans to see more of the webpage.
Figure 3-6 Viewport with width set to 320 and scale set to 150%
Viewport
width = 320 pixels
scale = 1.5
Visible area
Configuring the Viewport
What Is the Viewport?
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
44Figure 3-7 show the webpage when it is smaller than the viewport and filled with white space.
Figure 3-7 Viewport with width set to 320 and scale set to 50%
Viewport
width = 320 pixels
scale = 0.5
The user can also zoom in and out using gestures. When zooming in and out, the user changes the scale of
the viewport, not the size of the viewport. Consequently, panning and zooming do not change the layout of
the webpage. Figure 3-8 shows the same webpage when the user zooms in to see details.
Figure 3-8 Viewport with arbitrary user scale
User zoom, arbitrary scale
Configuring the Viewport
What Is the Viewport?
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
45Default Viewport Settings
Safari on iOS sets the size and scale of the viewport to reasonable defaults that work well for most webpages,
as shown on the left in Figure 3-9. The default width is 980 pixels. However, these defaults may not work well
for your webpages, particularly if you are tailoring your website for a particular device. For example, the
webpage on the right in Figure 3-9 appears too narrow. Because Safari on iOS provides a viewport, you can
change the default settings.
Figure 3-9 Default settings work well for most webpages
Works well Too narrow
Using the Viewport Meta Tag
Use the viewport meta tag to improve the presentation of your web content on iOS. Typically, you use the
viewport meta tag to set the width and initialscale of the viewport. For example, if your webpage is narrower
than 980 pixels, then you should set the width of the viewport to fit your web content. If you are designing
an iPhone or iPod touch-specific web application, then set the width to the width of the device. Refer to
“Additional meta Tag Keys” in Safari HTML Reference for a detailed description of the viewport meta tag.
Because iOS runs on devices with differentscreen resolutions, you should use the constantsinstead of numeric
values when referring to the dimensions of a device. Use device-width for the width of the device and
device-height for the height in portrait orientation.
Configuring the Viewport
Default Viewport Settings
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
46You do not need to set every viewport property. If only a subset of the properties are set, then Safari on iOS
infers the other values. For example, if you set the scale to 1.0, Safari assumes the width is device-width in
portrait and device-height in landscape orientation. Therefore, if you want the width to be 980 pixels and
the initial scale to be 1.0, then set both of these properties.
For example, to set the viewport width to the width of the device, add this to your HTML file:
To set the initial scale to 1.0, add this to your HTML file:
To set the initial scale and to turn off user scaling, add this to your HTML file:
Use the Safari on iOS console to help debug your webpages as described in “Debugging” (page 104). The
console contains tips to help you choose viewport values—for example, it reminds you to use the constants
when referring to the device width and height.
Changing the Viewport Width and Height
Typically, you set the viewport width to match your web content. Thisisthe single most important optimization
that you can do for iOS—make sure your webpage looks good the first time it is displayed on iOS.
Configuring the Viewport
Changing the Viewport Width and Height
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
47The majority of webpages fit nicely in the visible area with the viewport width set to 980 pixels in portrait
orientation, as shown in Figure 3-10. If Safari on iOS did not set the viewport width to 980 pixels, then only
the upper-left corner of the webpage, shown in gray, would be displayed. However, this default doesn’t work
for all webpages, so you’ll want to use the viewport meta tag if your webpage is different.
Figure 3-10 Comparison of 320 and 980 viewport widths
320 pixels
980 pixels
356 pixels
1090 pixels
If your webpage is narrower than the default width, as shown on the left in Figure 3-11, then set the viewport
width to the width of your webpage, as shown on the right in Figure 3-11. To do this, add the following to
your HTML file inside the
block, replacing 590 with the width of your webpage:
Configuring the Viewport
Changing the Viewport Width and Height
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
48
Figure 3-11 Webpage is too narrow for default settings
Default width Custom width
980 pixels 590 pixels
Configuring the Viewport
Changing the Viewport Width and Height
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
49It is particularly important to change the viewport width for web applications designed for devices with smaller
screens such as iPhone and iPod touch. Figure 3-12 shows the effect of setting the viewport width to
device-width. Read “Viewport Settings for Web Applications” (page 55) for more web application tips.
Figure 3-12 Web application page is too small for default settings
Default width Width set to device-width
980 pixels 320 pixels
Similarly you can set the viewport height to match your web content.
How Safari Infers the Width, Height, and Initial Scale
If you set only some of the properties, then Safari on iOS infers the values of the other properties with the goal
of fitting the webpage in the visible area. For example, if just the initial scale is set, then the width and height
are inferred. Similarly, if just the width is set, then the height and initial scale are inferred, and so on. If the
inferred values do not work for your webpage, then set more viewport properties.
Since any of the width, height, and initial scale may be inferred by Safari on iOS, the viewport may resize when
the user changes orientation. For example, when the user changes from portrait to landscape orientation by
rotating the device, the viewport width may expand. This is the only situation where a user action might resize
the viewport, changing the layout on iOS.
Configuring the Viewport
How Safari Infers the Width, Height, and Initial Scale
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
50Specifically, the goal of Safari on iOS is to fit the webpage in the visible area when completely zoomed out by
maintaining a ratio equivalent to the ratio of the visible area in either orientation. This is best illustrated by
setting the viewport propertiesindependently, and observing the effect on the other viewport properties. The
following series of examples shows the same web content with different viewport settings.
Figure 3-13 shows a typical webpage displayed with the default settings where the viewport width is 980 and
no initial scale is set.
Figure 3-13 Default width and initial scale
default = 980 pixels
Configuring the Viewport
How Safari Infers the Width, Height, and Initial Scale
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
51Figure 3-14 shows the same webpage when the initial scale is set to 1.0 on iPhone. Safari on iOS infers the
width and height to fit the webpage in the visible area. The viewport width is set to device-width in portrait
orientation and device-height in landscape orientation.
Figure 3-14 Default width with initial scale set to 1.0
320 pixels
356 pixels
480 pixels
208 pixels
Configuring the Viewport
How Safari Infers the Width, Height, and Initial Scale
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
52Similarly, if you specify only the viewport width, the height and initial scale are inferred. Figure 3-15 shows the
rendering of the same webpage when the viewport width is set to 320 on iPhone. Notice that the portrait
orientation is rendered in the same way as in Figure 3-14 (page 52), but the landscape orientation maintains
a width equal to device-width, which changes the initial scale and has the effect of zooming in when the
user changes to landscape orientation.
Figure 3-15 Width set to 320 with default initial scale
320 pixels
356 pixels
320 pixels
139 pixels
Configuring the Viewport
How Safari Infers the Width, Height, and Initial Scale
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
53You can also set the viewport width to be smaller than the visible area with a minimum value of 200 pixels.
Figure 3-16 shows the same webpage when the viewport width is set to 200 pixels on iPhone. Safari on iOS
infers the height and initial scale, which has the effect of zooming in when the webpage is first rendered.
Figure 3-16 Width set to 200 with default initial scale
200 pixels
223 pixels
Configuring the Viewport
How Safari Infers the Width, Height, and Initial Scale
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
54Finally, Figure 3-17 shows the same webpage when both the width and initial scale are set on iPhone. Safari
on iOS infers the height by maintaining a ratio equivalent to the ratio of the visible area in either orientation.
Therefore, if the width is set to 980 and the initial scale is set to 1.0 on iPhone, the height is set to 1091 in
portrait and 425 in landscape orientation.
Figure 3-17 Width set to 980 and initial scale set to 1.0
Width = 980 pixels
Height = 1091 pixels
Initial scale = 1.0
Width = 980 pixels
Height = 425 pixels
Initial scale = 1.0
The minimum-scale and maximum-scale properties also affect the behavior when changing orientations.
The range of these property values is from >0 to 10.0. The default value for minimum-scale is 0.25 and
maximum-scale is 5.0.
Viewport Settings for Web Applications
If you are designing a web application specifically for iOS, then the recommended size for your webpages is
the size of the visible area on iOS. Apple recommends that you set the width to device-width so that the
scale is 1.0 in portrait orientation and the viewport is not resized when the user changesto landscape orientation.
Configuring the Viewport
Viewport Settings for Web Applications
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
55If you do not change the viewport properties, Safari on iOS displays your webpage in the upper-left corner as
shown in Figure 3-18. Setting the viewport width should be the first task when designing web applications for
iOS to avoid the user zooming in before using your application.
Figure 3-18 Not specifying viewport properties
Viewport
width = 980 pixels
By setting the width to device-width in portrait orientation, Safari on iOS displays your webpage as show
in Figure 3-19. Users can pan down to view the rest of the webpage if it is taller than the visible area. Add this
line to your HTML file to set the viewport width to device-width:
Configuring the Viewport
Viewport Settings for Web Applications
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
56
Figure 3-19 Width set to device-width pixels
Viewport
width = 320 pixels
You may not want users to scale web applications designed specifically for iOS. In this case, set the width and
turn off user scaling as follows:
Configuring the Viewport
Viewport Settings for Web Applications
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
57Although configuring the viewport is an important way to optimize your web content for iOS, style sheets
provide further techniques for optimizing. For example, use iOS CSS extensions to control text resizing and
element highlighting. If you use conditional CSS, then you can use these settings without affecting the way
other browsers render your webpages.
Read “Optimizing Web Content” (page 33) for how to use conditional CSS and “CSS Basics” (page 117) for how
to add CSS to existing HTML. See Safari CSS Reference for a complete list of CSS properties supported by Safari.
Leveraging CSS3 Properties
There are many CSS3 properties available for you to use in Safari on the desktop and iOS. CSS properties that
begin with -webkit- are usually proposed CSS3 properties or Apple extensions to CSS. For example, you can
use the following CSS properties to emulate the iOS user interface:
-webkit-border-image
Allows you to use an image as the border for a box. See "-webkit-border-image" in Safari CSS Reference for
details.
-webkit-border-radius
Creates elements with rounded corners. See “Customizing Form Controls” (page 64) for code samples.
See "-webkit-border-radius" in Safari CSS Reference for details.
Adjusting the Text Size
In addition to controlling the viewport, you can control the text size that Safari on iOS uses when rendering a
block of text.
Adjusting the textsize isimportantso that the text islegible when the user double-taps. If the user double-taps
an HTML block element—such as a element—then Safari on iOS scales the viewport to fit the block
width in the visible area. The first time a webpage is rendered, Safari on iOS gets the width of the block and
determines an appropriate text scale so that the text is legible.
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
58
Customizing Style SheetsIf the automatic text size-adjustment doesn’t work for your webpage, then you can either turn this feature off
or specify your own scale as a percentage. For example, text in absolute-positioned elements might overflow
the viewport after adjustment. Other pages might need a few minor adjustments to make them look better.
In these cases, use the -webkit-text-size-adjust CSS property to change the default settings for any
element that renders text.
Figure 4-1 compares a webpage rendered by Safari on iOS with -webkit-text-size-adjust set to auto,
none, and 200%. On iPad, the default value for -webkit-text-size-adjust is none. On all other devices,
the default value is auto.
Figure 4-1 Comparison of text adjustment settings
Auto None 200%
To turn automatic text adjustment off, set -webkit-text-size-adjust to none as follows:
html {-webkit-text-size-adjust:none}
To change the text adjustment,set -webkit-text-size-adjust to a percentage value asfollows, replacing
200% with your percentage:
html {-webkit-text-size-adjust:200%}
Listing 4-1 shows setting this property for different types of blocks using inline style in HTML.
Customizing Style Sheets
Adjusting the Text Size
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
59Listing 4-1 Setting the text size adjustment property
Highlighting Elements
By default, when the user taps a link or a JavaScript clickable element, Safari on iOS highlights the area in a
transparent gray color. Using the -webkit-tap-highlight-color CSS property, you can either modify or
disable this default behavior on your webpages.
The syntax for setting this CSS property is:
-webkit-tap-highlight-color:
This is an inherited property that changes the tap highlight color, obeying the alpha value. If you don’t specify
an alpha value, Safari on iOS applies a default alpha value to the color. To disable tap highlighting, set the
alpha to 0 (invisible). If you set the alpha to 1.0 (opaque), then the element won’t be visible when tapped.
Listing 4-2 uses an alpha value of 0.4 for the custom highlight color shown on the right in Figure 4-2.
Listing 4-2 Changing the tap highlight color
default highlight color
custom highlight color
Customizing Style Sheets
Highlighting Elements
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
60
Figure 4-2 Differences between default and custom highlighting
Default highlight Custom highlight
Note that changing this behavior does not affect the color of the information bubble when the user touches
and holds.
You can also use the -webkit-tap-highlight-color CSS property in combination with setting a touch
event to configure buttons to behave similar to the desktop. On iOS, mouse events are sent so quickly that
the down or active state is never received. Therefore, the :active pseudo state is triggered only when there
is a touch eventset on the HTML element—for example, when ontouchstart isset on the element asfollows:
Now when the button is tapped and held on iOS, the button changes to the specified color without the
surrounding transparent gray color appearing.
Read “Handling Events” (page 68) for the definition of a clickable element. See "-webkit-tap-highlight-color" in
Safari CSS Reference to learn more about this property. Read “Handling Multi-Touch Events” (page 74) for
details on touch events.
Customizing Style Sheets
Highlighting Elements
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
61There are many adjustments you can make to your forms so that they work better on iOS. The forms should
fit neatly on the iOS screen, especially if you are designing a web application specifically for iOS. Web applications
can have a rich user interface and even look like native applications to the user. Consequently, the user may
expect them to behave like native applications, too.
This chapter explains what you can do to make your forms work well on iOS:
● Take into account the available screen space when the keyboard is and isn’t displayed.
● Use CSS extensions to create custom controls.
● Control where automatic correction and capitalization are used.
See iOS Human Interface Guidelines for more tips on laying out forms and designing web applications for iOS.
Read “Hiding Safari User Interface Components” (page 89) for how to use the full-screen like a native application.
Laying Out Forms
The available area for your forms changes depending on whether or not the keyboard is displayed on iOS. You
should compute this area and design your forms accordingly.
Figure 5-1 shows the layout of Safari controls when the keyboard is displayed on iPhone. The status bar that
appears at the top of the screen contains the time and Wi-Fi indicator. The URL text field is displayed below
the status bar. The keyboard is used to enter text in forms and is displayed at the bottom of the screen. The
form assistant appears above the keyboard when editing forms. It contains the Previous, Next, and Done
buttons. The user taps the Next and Previous buttons to move between form elements. The user taps Done
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
62
Designing Formsto dismissthe keyboard. The button bar containsthe back, forward, bookmarks, and page buttons and appears
at the bottom of the screen. The tool bar is not visible when the keyboard is visible. Your webpage is displayed
in the area below the URL text field and above the tool bar or keyboard.
Figure 5-1 Form metrics when the keyboard is displayed
Status bar: 20 pixels
URL text field: 60 pixels
Form assistant: 44 pixels
Keyboard: 216 pixels
480 pixels
Table 5-1 contains the metrics for the objects that you need to be aware of, in both portrait and landscape
orientation, when laying out forms to fit on iPhone and iPod touch.
Table 5-1 Form metrics
Object Metrics in pixels
Status bar Height = 20
URL text field Height = 60
Form assistant Height = 44
Portrait height = 216
Landscape height = 162
Keyboard
Portrait height = 44
Landscape height = 32
Button bar
Designing Forms
Laying Out Forms
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
63Use this information to compute the available area for your web content when the keyboard is and isn't
displayed. For example, when the keyboard is not displayed, the height available for your web content on
iPhone is 480 - 20 - 60 - 44 = 356. Therefore, you should design your content to fit within 320 x 356 pixels in
portrait orientation. If the keyboard is displayed, the available area is 320 x 140 pixels on iPhone.
iOS Note: In iOS 1.1.4 and earlier, the keyboard height in landscape orientation on iPhone and iPod
touch was 180 pixels.
Customizing Form Controls
Form controls in Safari on iOS are resolution independent and can be styled with CSS specifically for iOS. You
can create custom checkboxes, text fields, and select elements.
For example, you can create a custom checkbox designed for iOS as shown in Figure 5-2 with the CSS code
fragment in Listing 5-1. This example uses the -webkit-border-radius property—an Apple extension to
WebKit. See Safari CSS Reference for details on more WebKit properties.
Figure 5-2 A custom checkbox
Listing 5-1 Creating a custom checkbox with CSS
{
Designing Forms
Customizing Form Controls
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
64width: 100px;
height: 100px;
-webkit-border-radius:50px;
background-color:purple;
}
Figure 5-3 shows a custom text field with rounded corners corresponding to the CSS code in Listing 5-2 (page
65).
Figure 5-3 A custom text field
Listing 5-2 Creating a custom text field with CSS
{
-webkit-border-radius:10px;
}
Designing Forms
Customizing Form Controls
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
65Figure 5-4 shows a custom select control corresponding to the CSS code in Listing 5-3 (page 66).
Figure 5-4 A custom select element
Listing 5-3 Creating a custom select control with CSS
{
background:red;
border: 1px dashed purple;
-webkit-border-radius:10px;
}
Configuring Automatic Correction and Capitalization
You can also control whether or not automatic correction or capitalization are used in your forms on iOS. Set
the autocorrect attribute to on if you want automatic correction and the autocapitalize attribute to a
value if you want automatic capitalization. If you do notset these attributes, then the browser chooses whether
or not to use automatic correction or capitalization. For example, Safari on iOS turns the autocorrect and
autocapitalize attributes off in login fields and on in normal text fields.
For example, the following line turns the autocorrect attribute on:
Designing Forms
Configuring Automatic Correction and Capitalization
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
66
The following line turns the autocorrect attribute off:
In iOS 5.0, the autocapitalize attribute allows finer control on how automatic capitalization behaves than
just specifying on and off values. For example, if autocapitalize is words, each word is capitalized, as in
“Jane Doe,” appropriate for a first and last name input field. If autocapitalize is characters, each letter
is capitalized, as in “NY” and “CA,” appropriate for a state input field.
You can also use the autocorrect and autocapitalize attributes on elements to give inner form
controls (like and
Refer to autocorrect and autocapitalize in Safari HTML Reference for all possible values and defaults.
Designing Forms
Configuring Automatic Correction and Capitalization
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
67This chapter describes the events that occur when the user interacts with a webpage on iOS. Forms and
documents generate the typical events in iOS that you might expect on the desktop. Gestures handled by
Safari on iOS emulate mouse events. In addition, you can register for iOS-specific multi-touch and gesture
events directly. Orientation events are another example of an iOS-specific event. Also, be aware that there are
some unsupported events such as cut, copy, and paste.
Gestures that the user makes—for example, a double tap to zoom and a flick to pan—emulate mouse events.
However, the flow of events generated by one-finger and two-finger gestures are conditional depending on
whether or not the selected element is clickable or scrollable as described in “One-Finger Events” (page 69)
and “Two-Finger Events” (page 72).
A clickable element is a link, form element, image map area, or any other element with mousemove, mousedown,
mouseup, or onclick handlers. A scrollable element is any element with appropriate overflow style, text areas,
and scrollable iframe elements. Because of these differences, you might need to change some of your elements
to clickable elements, as described in “Making Elements Clickable” (page 73), to get the desired behavior in
iOS.
In addition, you can turn off the default Safari on iOS behavior as described in “Preventing Default
Behavior” (page 79) and handle your own multi-touch and gesture events directly. Handling multi-touch and
gesture events directly gives developers the ability to implement unique touch-screen interfaces similar to
native applications. Read “Handling Multi-Touch Events” (page 74) and “Handling Gesture Events” (page 77)
to learn more about DOM touch events.
If you want to change the layout of your webpage depending on the orientation of iOS, read “Handling
Orientation Events” (page 79).
See “Supported Events” (page 81) for a complete list of events supported in iOS.
On iOS, emulated mouse events are sent so quickly that the down or active pseudo state of buttons may never
occur. Read “Highlighting Elements” (page 60) for how to customize a button to behave similar to the desktop.
It’s very common to combine DOM touch events with CSS visual effects. Read Safari CSS Visual Effects Guide
to learn more about CSS visual effects.
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
68
Handling EventsOne-Finger Events
This section uses flow charts to break down gestures into the individual actions that might generate events.
Some of the events generated on iOS are conditional—the events generated depend on what the user is
tapping or touching and whether they are using one or two fingers. Some gestures don’t generate any events
on iOS.
One-finger panning doesn’t generate any events until the userstops panning—an onscroll event is generated
when the page stops moving and redraws—as shown in Figure 6-1.
Figure 6-1 The panning gesture
Pan (no events)
Finger down
Finger stop
onscroll
Finger move
Displaying the information bubble doesn’t generate any events as shown in Figure 6-2. However, if the user
touches and holds an image, the image save sheet appears instead of an information bubble.
Handling Events
One-Finger Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
69iOS Note: The image save sheet appears on iOS 2.0 and later.
Figure 6-2 The touch and hold gesture
Information bubble
(no events)
Finger down
Finger held down
Clickable element
Handling Events
One-Finger Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
70Finally, a double tap doesn’t generate any events either as shown in Figure 6-3.
Figure 6-3 The double-tap gesture
Finger down
Quick finger up
Double-tap zoom
(no events)
Quick finger down
Quick finger up
Handling Events
One-Finger Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
71Mouse events are delivered in the same order you'd expect in other web browsers illustrated in Figure 6-4. If
the user taps a nonclickable element, no events are generated. If the user taps a clickable element, events
arrive in this order: mouseover, mousemove, mousedown, mouseup, and click. The mouseout event occurs
only if the user taps on another clickable item. Also, if the contents of the page changes on the mousemove
event, no subsequent events in the sequence are sent. This behavior allows the user to tap in the new content.
Figure 6-4 One-finger gesture emulating a mouse
Content change
Finger down
Not a clickable
element
No events
Finger up
Clickable element
mouseover, mousemove No events
No content change
mousedown, mouseup, click
Two-Finger Events
The pinch open gesture does not generate any mouse events as shown in Figure 6-5.
Figure 6-5 The pinch open gesture
Fingers separate Pinch zoom
(no events)
Two fingers down
Figure 6-6 illustrates the mouse events generated by using two fingers to pan a scrollable element. The flow
of events is as follows:
Handling Events
Two-Finger Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
72●
If the user holds two fingers down on a scrollable element and moves the fingers, mousewheel events
are generated.
●
If the element is not scrollable, Safari on iOS pans the webpage. No events are generated while panning.
● An onscroll event is generated when the user stops panning.
Figure 6-6 Two-finger panning gesture
Two fingers down
Scrollable element
Two fingers move
Not a scrollable element
mousewheel
Pan (no events)
Finger stop
onscroll
Form and Document Events
Typical events generated by forms and documents include blur, focus, load, unload, reset, submit,
change and abort. See “Supported Events” (page 81) for a complete list of supported events on iOS.
Making Elements Clickable
Because of the way Safari on iOS creates events to emulate a mouse, some of your elements may not behave
as expected on iOS. In particular, some menus that only use mousemove handlers, as in Listing 6-1, need to
be changed because iOS doesn’t recognize them as clickable elements.
Listing 6-1 A menu using a mouseover handler
To fix this, add a dummy onclick handler, onclick = "void(0)", so that Safari on iOS recognizes the
span element as a clickable element, as shown in Listing 6-2.
Listing 6-2 Adding an onclick handler
WHERE TO BUY
Handling Multi-Touch Events
You can use JavaScript DOM touch event classes available on iOS to handle multi-touch and gesture events
in a way similar to the way they are handled in native iOS applications.
If you register for multi-touch events, the system continually sends TouchEvent objectsto those DOM elements
as fingers touch and move across a surface. These are sent in addition to the emulated mouse events unless
you prevent this default behavior as described in “Preventing Default Behavior” (page 79). A touch event
provides a snapshot of all touches during a multi-touch sequence, most importantly the touches that are new
or have changed for a particular target. The different types of multi-touch events are described in TouchEvent
Class Reference in Safari DOM Additions Reference .
A multi-touch sequence begins when a finger first touches the surface. Other fingers may subsequently touch
the surface, and all fingers may move across the surface. The sequence ends when the last of these fingers is
lifted from the surface. An application receives touch event objects during each phase of any touch.
Handling Events
Handling Multi-Touch Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
74Touch events are similar to mouse events except that you can have simultaneous touches on the screen at
different locations. A touch event object is used to encapsulate all the touches that are currently on the screen.
Each finger is represented by a touch object. The typical properties that you find in a mouse event are in the
touch object, not the touch event object.
Note that a sequence of touch eventsis delivered to the element that received the original touchstart event
regardless of the current location of the touches.
Follow these steps to use multi-touch events in your web application.
1. Register handlers for multi-touch events in HTML as follows:
2. Alternatively, register handlers in JavaScript as follows:
element.addEventListener("touchstart", touchStart, false);
element.addEventListener("touchmove", touchMove, false);
element.addEventListener("touchend", touchEnd, false);
element.addEventListener("touchcancel", touchCancel, false);
3. Respond to multi-touch events by implementing handlers in JavaScript.
For example, implement the touchStart method as follows:
function touchStart(event) {
// Insert your code here
}
4. Optionally, get all touches on a page using the touches property as follows:
var allTouches = event.touches;
Note that you can get all other touches for an event even when the event is triggered by a single touch.
Handling Events
Handling Multi-Touch Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
755. Optionally, get all touches for the target element using the targetTouches property:
var targetTouches = event.targetTouches;
6. Optionally, get all changed touches for this event using the changedTouches property:
var changedTouches = event.changedTouches;
7. Access the Touch object properties—such as the target, identifier, and location in page, client, or screen
coordinates—similar to mouse event properties.
For example, get the number of touches:
event.touches.length
Get a specific touch object at index i:
var touch = event.touches[i];
Finally, get the location in page coordinates for a single-finger event:
var x = event.touches[0].pageX;
var y = event.touches[0].pageY;
You can also combine multi-touch events with CSS visual effectsto enable dragging orsome other user action.
To enable dragging, implement the touchmove event handler to translate the target:
function touchMove(event) {
event.preventDefault();
curX = event.targetTouches[0].pageX - startX;
curY = event.targetTouches[0].pageY - startY;
event.targetTouches[0].target.style.webkitTransform =
'translate(' + curX + 'px, ' + curY + 'px)';
}
Handling Events
Handling Multi-Touch Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
76Typically, you implement multi-touch event handlers to track one or two touches. But you can also use
multi-touch event handlersto identify custom gestures. That is, custom gesturesthat are not already identified
for you by gesture events described in “Handling Gesture Events” (page 77). For example, you can identify a
two-finger tap gesture as follows:
1. Begin gesture if you receive a touchstart event containing two target touches.
2. End gesture if you receive a touchend event with no preceding touchmove events.
Similarly, you can identify a swipe gesture as follows:
1. Begin gesture if you receive a touchstart event containing one target touch.
2. Abort gesture if, at any time, you receive an event with >1 touches.
3. Continue gesture if you receive a touchmove event mostly in the x-direction.
4. Abort gesture if you receive a touchmove event mostly the y-direction.
5. End gesture if you receive a touchend event.
Handling Gesture Events
Multi-touch events can be combined together to form high-level gesture events.
GestureEvent objects are also sent during a multi-touch sequence. Gesture events contain scaling and
rotation information allowing gestures to be combined, if supported by the platform. If not supported, one
gesture ends before another starts. Listen for GestureEvent objects if you want to respond to gestures only,
not processthe low-level TouchEvent objects. The different types of gesture events are described in GestureEvent
Class Reference in Safari DOM Additions Reference .
Follow these steps to use gesture events in your web application.
1. Register handlers for gesture events in HTML:
2. Alternatively, register handlers in JavaScript:
Handling Events
Handling Gesture Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
77element.addEventListener("gesturestart", gestureStart, false);
element.addEventListener("gesturechange", gestureChange, false);
element.addEventListener("gestureend", gestureEnd, false);
3. Respond to gesture events by implementing handlers in JavaScript.
For example, implement the gestureChange method as follows:
function gestureChange(event) {
// Insert your code here
}
4. Get the amount of rotation since the gesture started:
var angle = event.rotation;
The angle is in degrees, where clockwise is positive and counterclockwise is negative.
5. Get the amount scaled since the gesture started:
var scale = event.scale;
The scale is smaller if less than 1.0 and larger if greater than 1.0.
You can combine gesture events with CSS visual effects to enable scaling, rotating, or some other custom user
action. For example, implement the gesturechange event handler to scale and rotate the target as follows:
onGestureChange: function(e) {
e.preventDefault();
e.target.style.webkitTransform =
'scale(' + e.scale + startScale + ') rotate(' + e.rotation + startRotation
+ 'deg)';
}
Handling Events
Handling Gesture Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
78Preventing Default Behavior
iOS Note: The preventDefault method applies to multi-touch and gesture input in iOS 2.0 and
later.
The default behavior of Safari on iOS can interfere with your application’s custom multi-touch and gesture
input. You can disable the default browser behavior by sending the preventDefault message to the event
object.
For example, to preventscrolling on an element in iOS 2.0, implement the touchmove and touchstart event
handlers as follows :
function touchMove(event) {
// Prevent scrolling on this element
event.preventDefault();
...
}
To disable pinch open and pinch close gesturesin iOS 2.0, implement the gesturestart and gesturechange
event handlers as follows:
function gestureChange(event) {
// Disable browser zoom
event.preventDefault();
...
}
Important: The default browser behavior may change in future releases.
Handling Orientation Events
An event is sent when the user changes the orientation of iOS. By handling this event in your web content,
you can determine the current orientation of the device and make layout changes accordingly. For example,
display a simple textual list in portrait orientation and add a column of icons in landscape orientation.
Similar to a resize event, a handler can be added to the element in HTML as follows:
Handling Events
Preventing Default Behavior
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
79
where updateOrientation is a handler that you implement in JavaScript.
In addition, the window object has an orientation property set to either 0, -90, 90, or 180. For example, if
the user starts with the iPhone in portrait orientation and then changes to landscape orientation by turning
the iPhone to the right, the window’s orientation property is set to -90. If the user instead changes to
landscape by turning the iPhone to the left, the window’s orientation property is set to 90.
Listing 6-3 adds an orientation handler to the body element and implements the updateOrientation
JavaScript method to display the current orientation on the screen. Specifically, when an orientationchange
event occurs, the updateOrientation method isinvoked, which changesthe string displayed by the division
element in the body.
Listing 6-3 Displaying the orientation
Orientation
Supported Events
Be aware of all the events that iOS supports and under what conditions they are generated. Table 6-1 specifies
which events are generated by Safari on iOS and which are generated conditionally depending on the type of
element selected. This table also lists unsupported events.
Handling Events
Supported Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
81iOS Note: Although drag and drop are notsupported, you can produce the same effect using touch
events as described in “Using Touch to Drag Elements” in Safari CSS Visual Effects Guide .
The unload event may not work as expected for back and forward optimization. Use the pageshow
and pagehide events instead.
Table 6-1 Types of events
Event Generated Conditional Available
abort Yes No iOS 1.0 and later.
blur Yes No iOS 1.0 and later.
change Yes No iOS 1.0 and later.
click Yes Yes iOS 1.0 and later.
copy No N/A
cut No N/A
drag No N/A
drop No N/A
focus Yes No iOS 1.0 and later.
gesturestart Yes N/A iOS 2.0 and later.
gesturechange Yes N/A iOS 2.0 and later.
gestureend Yes N/A iOS 2.0 and later.
load Yes No iOS 1.0 and later.
mousemove Yes Yes iOS 1.0 and later.
mousedown Yes Yes iOS 1.0 and later.
mouseup Yes Yes iOS 1.0 and later.
mouseover Yes Yes iOS 1.0 and later.
mouseout Yes Yes iOS 1.0 and later.
orientationchange Yes N/A iOS 1.1.1 and later.
Handling Events
Supported Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
82Event Generated Conditional Available
pagehide Yes No iOS 4.0 and later.
pageshow Yes No iOS 4.0 and later.
paste No N/A
reset Yes No iOS 1.0 and later.
selection No N/A
submit Yes No iOS 1.0 and later.
touchcancel Yes N/A iOS 2.0 and later.
touchend Yes N/A iOS 2.0 and later.
touchmove Yes N/A iOS 2.0 and later.
touchstart Yes N/A iOS 2.0 and later.
unload Yes No iOS 1.0 and later.
Handling Events
Supported Events
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
83Safari has a new Smart App Banner feature in iOS 6 and later that provides a standardized method of promoting
apps on the App Store from a website, as shown in Figure 7-1 (page 84).
Figure 7-1 A Smart App Banner of the Apple Store app
Note: Smart App Banners only show on iOS, not OS X.
Smart App Banners vastly improve users’ browsing experience compared to other promotional methods. As
banners are implemented in iOS 6, they will provide a consistent look and feel across the web that users will
come to recognize. Users will trust that tapping the banner will take them to the App Store and not a third-party
advertisement. They will appreciate that banners are presented unobtrusively at the top of a webpage, instead
of as a full-screen ad interrupting the web content. And with a large and prominent close button, a banner is
easy for users to dismiss.
If the app is already installed on a user's device, the banner intelligently changes its action, and tapping the
banner will simply open the app. If the user doesn’t have your app on his device, tapping on the banner will
take him to the app’s entry in the App Store. When he returns to your website, a progress bar appears in the
banner, indicating how much longer the download will take to complete. When the app finishes downloading,
the View button changes to an Open button, and tapping the banner will open the app while preserving the
user’s context from your website.
Smart App Banners automatically determine whether the app is supported on the user’s device. If the device
loading the banner does not support your app, or if your app is not available in the user's location, the banner
will not display.
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
84
Promoting Apps with Smart App BannersImplementing a Smart App Banner on Your Website
To add a Smart App Banner to your website, include the following meta tag in the head of each page where
you’d like the banner to appear:
You can include three comma-separated parameters in the content attribute:
● app-id: (Required.) Your app's unique identifier. To find your app ID from the iTunes Link Maker, type
the name of your app in the Search field, and select the appropriate country and media type. In the results,
find your app and select iPhone App Link in the column on the right. Your app ID is the nine-digit number
in between id and ?mt.
● affiliate-data: (Optional.) Your iTunes affiliate string, if you are an iTunes affiliate. If you are not, find
out more about becoming an iTunes affiliate at http://www.apple.com/itunes/affiliates/.
● app-argument: (Optional.) A URL that provides context to your native app. If you include this, and the
user has your app installed, she can jump from your website to the corresponding position in your iOS
app. Typically, it is beneficial to retain navigational context because:
●
If the user is deep within the navigational hierarchy of your website, you can pass the document’s
entire URL, and then parse it in your app to reroute her to the correct location in your app.
●
If the user performs a search on your website, you can passthe query string so thatshe can seamlessly
continue the search in your app without having to retype her query.
●
If the user isin the midst of creating content, you can passthe session ID to download the web session
state in your app so she can nondestructively resume her work.
You can generate the app-argument of each page dynamically with a server-side script. You can format
it however you'd like, as long as it is a valid URL.
Note: You cannot display Smart App Banners inside of a frame.
Providing Navigational Context to Your App
In your app, implement the application:openURL:sourceApplication:annotation: method in your
app delegate, which fires when your app is launched from a URL. Then provide logic that can interpret the
URL that you pass. The value you set to the app-argument parameter is available as the NSURL url object.
Promoting Apps with Smart App Banners
Implementing a Smart App Banner on Your Website
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
85The example in Listing 7-1 (page 86) illustrates a website that passes data to a native iOS app. To accomplish
this, detect if the URL contains the string /profile. If it does, then open the profile view controller and pass
the profile ID number that is in the query string.
Listing 7-1 Routing the user to the correct view controller
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// in this example, the URL from which the user came is
http://example.com/profile/?12345
// determine if the user was viewing a profile
if ([[url path] isEqualToString:@"/profile"]) {
// switch to profile view controller
[self.tabBarController setSelectedViewController:profileViewController];
// pull the profile id number found in the query string
NSString *profileID = [url query];
// pass profileID to profile view controller
[profileViewController loadProfile:profileID];
}
return YES;
}
Promoting Apps with Smart App Banners
Providing Navigational Context to Your App
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
86A web application is designed to look and behave in a way similar to a native application—for example, it is
scaled to fit the entire screen on iOS. You can tailor your web application for Safari on iOS even further, by
making it appear like a native application when the user adds it to the Home screen. You do this by using
settings for iOS that are ignored by other platforms.
For example, you can specify an icon for your web application used to represent it when added to the Home
screen on iOS, as described in “Specifying a Webpage Icon for Web Clip” (page 87). You can also minimize the
Safari on iOS user interface, as described in “Changing the Status Bar Appearance” (page 89) and “Hiding Safari
User Interface Components” (page 89), when your web application is launched from the Home screen. These
are all optional settings that when added to your web content are ignored by other platforms.
Read “Viewport Settings for Web Applications” (page 55) for how to set the viewport for web applications on
iOS.
Specifying a Webpage Icon for Web Clip
iOS Note: The Web Clip feature is available in iOS 1.1.3 and later. The
apple-touch-icon-precomposed.png filename is available in iOS 2.0 and later. Support for
multiple icons for different device resolutions is available in iOS 4.2 and later.
You may want users to be able to add your web application or webpage link to the Home screen. These links,
represented by an icon, are called Web Clips. Follow these simple steps to specify an icon to represent your
web application or webpage on iOS.
● To specify an icon for the entire website (every page on the website), place an icon file in PNG format in
the root document folder called apple-touch-icon.png or apple-touch-icon-precomposed.png.
If you use apple-touch-icon-precomposed.png as the filename, Safari on iOS won’t add any effects
to the icon.
● To specify an icon for a single webpage or replace the website icon with a webpage-specific icon, add a
link element to the webpage, as in:
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
87
Configuring Web Applications
In the above example, replace custom_icon.png with your icon filename. If you don’t want Safari on
iOS to add any effectsto the icon, replace apple-touch-icon with apple-touch-icon-precomposed.
● To specify multiple icons for different device resolutions—for example, support both iPhone and iPad
devices—add a sizes attribute to each link element as follows:
The icon that is the most appropriate size for the device is used. If no sizes attribute is set, the element’s
size defaults to 57 x 57.
If there is no icon that matches the recommended size for the device, the smallest icon larger than the
recommended size is used. If there are no icons larger than the recommended size, the largest icon is used. If
multiple icons are suitable, the icon that has the precomposed keyword is used.
If no icons are specified using a link element, the website root directory is searched for icons with the
apple-touch-icon... or apple-touch-icon-precomposed... prefix. For example, if the appropriate
icon size for the device is 57 x 57, the system searches for filenames in the following order:
1. apple-touch-icon-57x57-precomposed.png
2. apple-touch-icon-57x57.png
3. apple-touch-icon-precomposed.png
4. apple-touch-icon.png
See “Custom Icon and Image Creation Guidelines” for webpage icon metrics.
Configuring Web Applications
Specifying a Webpage Icon for Web Clip
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
88Specifying a Startup Image
iOS Note: Specifying a startup image is available in iOS 3.0 and later.
On iOS,similar to native applications, you can specify a startup image that is displayed while your web application
launches. This is especially useful when your web application is offline. By default, a screenshot of the web
application the last time it was launched is used. To set another startup image, add a link element to the
webpage, as in:
In the above example, replace startup.png with your startup screen filename. On iPhone and iPod touch,
the image must be 320 x 460 pixels and in portrait orientation.
Hiding Safari User Interface Components
On iOS, as part of optimizing your web application, have it use the standalone mode to look more like a native
application. When you use this standalone mode, Safari is not used to display the web content—specifically,
there is no browser URL text field at the top of the screen or button bar at the bottom of the screen. Only a
status bar appears at the top of the screen. Read “Changing the Status Bar Appearance” (page 89) for how to
minimize the status bar.
Set the apple-mobile-web-app-capable meta tag to yes to turn on standalone mode. For example, the
following HTML displays web content using standalone mode.
You can determine whether a webpage is displaying in standalone mode using the
window.navigator.standalone read-only Boolean JavaScript property.
Changing the Status Bar Appearance
If your web application displays in standalone mode like that of a native application, you can minimize the
status bar that is displayed at the top of the screen on iOS. Do so using the status-bar-style meta tag.
Configuring Web Applications
Specifying a Startup Image
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
89This meta tag has no effect unless you firstspecify standalone mode as described in “Hiding Safari User Interface
Components” (page 89). Then use the status bar style meta tag,
apple-mobile-web-app-status-bar-style, to change the appearance of the status bar depending on
your application needs. For example, if you want to use the entire screen, set the status bar style to translucent
black.
For example, the following HTML sets the background color of the status bar to black:
Configuring Web Applications
Changing the Status Bar Appearance
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
90Safari supports audio and video viewing in a webpage on the desktop and iOS. You can use audio and video
HTML elements or use the embed element to use the native application for video playback. In either case, you
need to ensure that the video you create is optimized for the platform and different bandwidths.
iOS streams movies and audio using HTTP over EDGE, 3G, and Wi-Fi networks. iOS uses a native application to
play back video even when video is embedded in your webpages. Video automatically expands to the size of
the screen and rotates when the user changes orientation. The controls automatically hide when they are not
in use and appear when the user taps the screen. This is the experience the user expects when viewing all
video on iOS.
Safari on iOS supports a variety of rich media, including QuickTime movies, as described in “Use Supported
iOS Rich Media MIME Types” (page 29). Safari on iOS does not support Flash so don’t bring up JavaScript alerts
that ask usersto download Flash. Also, don’t use JavaScript movie controlsto play back video since iOS supplies
its own controls.
Safari on the desktop supports the same audio and video formats as Safari on iOS. However, if you use the
audio and video HTML elements on the desktop, you can customize the play back controls. See Safari DOM
Additions Reference for more details on the HTMLMediaElement class.
Follow these guidelines to deliver the best web audio and video experience in Safari on any platform:
● Follow current best practices for embedding movies in webpages as described in “Sizing Movies
Appropriately” (page 92), “Don’t Let the Bit Rate Stall Your Movie” (page 92), and “Using Supported Movie
Standards” (page 92).
● Use QuickTime Pro to encode H.264/AAC at appropriate sizes and bit ratesfor EDGE, 3G, and Wi-Fi networks,
as described in “Encoding Video for Wi-Fi, 3G, and EDGE” (page 93).
● Use reference movies so that iOS automatically streams the best version of your content for the current
network connection, as described in “Creating a Reference Movie” (page 94).
● Use posterJPEGs(not poster framesin a movie) to display a preview of your embedded movie in webpages,
as described in “Creating a Poster Image for Movies” (page 94).
● Make sure the HTTP servers hosting your media files support byte-range requests, as described in
“Configuring Your Server” (page 95).
●
If your site has a custom media player, also provide direct links to the media files. iOS users can follow
these links to play those files directly.
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
91
Creating VideoSizing Movies Appropriately
In landscape orientation on iOS, the screen is 480 x 320 pixels. Users can easily switch the view mode between
scaled-to-fit (letterboxed) and full-screen (centered and cropped). You should use a size that preserves the
aspect ratio of your content and fits within a 480 x 360 rectangle. 480 x 360 is a good choice for 4:3 aspect
ratio content and 480 x 270 is a good choice for widescreen content as it keeps the video sharp in full-screen
view mode. You can also use 640 x 360 or anamorphic 640 x 480 with pixel aspect ratio tagging for widescreen
content.
Don’t Let the Bit Rate Stall Your Movie
When viewing media over the network, the bit rate makes a crucial difference to the playback experience. If
the network cannot keep up with the media bit rate, playback stalls. Encode your media for iOS as described
in “Encoding Video for Wi-Fi, 3G, and EDGE” (page 93) and use a reference movie as described in “Creating a
Reference Movie” (page 94).
Using Supported Movie Standards
The following compression standards are supported:
● H.264 Baseline Profile Level 3.0 video, up to 640 x 480 at 30 fps. Note that B frames are not supported in
the Baseline profile.
● MPEG-4 Part 2 video (Simple Profile)
● AAC-LC audio, up to 48 kHz
Movie files with the extensions .mov, .mp4, .m4v, and .3gp are supported.
Any movies or audio files that can play on iPod play correctly on iPhone.
If you export your movies using QuickTime Pro 7.2, as described in “Encoding Video for Wi-Fi, 3G, and
EDGE” (page 93), then you can be sure that they are optimized to play on iOS.
Creating Video
Sizing Movies Appropriately
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
92Encoding Video for Wi-Fi, 3G, and EDGE
Because users may be connected to the Internet via wired or wireless technology, using either Wi-Fi, 3G, or
EDGE on iOS, you need to provide alternate media for these different connection speeds. You can use QuickTime
Pro, the QuickTime API, or any Apple applications that provide iOS exporters to encode your video for Wi-Fi,
3G, and EDGE. This section contains specific instructions for exporting video using QuickTime Pro.
Follow these steps to export video using QuickTime Pro 7.2.1 and later:
1. Open your movie using QuickTime Player Pro.
2. Choose File > Export for Web.
A dialog appears.
3. Enter the file name prefix, location of your export, and set of versions to export as shown in Figure 9-1.
Figure 9-1 Export movie panel
4. Click Export.
QuickTime Player Pro saves these versions of your QuickTime movie, along with a reference movie, poster
image, and ReadMe.html file to the specified location. See the ReadMe.html file for instructions on
embedding the generated movie in your webpage, including sample HTML.
Creating Video
Encoding Video for Wi-Fi, 3G, and EDGE
2012-09-19 | © 2012 Apple Inc. All Rights Reserved.
93Creating a Reference Movie
A reference movie contains a list of movie URLs, each of which has a list of tests, as show in Figure 9-2. When
opening the reference movie, a playback device or computer chooses one of the movie URLs by finding the
last one that passes all its tests. Tests can check the capabilities of the device or computer and the speed of
the network connection.
Figure 9-2 Reference movie components
iPhone over EDGE
iPhone over WiFi
Computer desktop
80 kbit
foo-iPhone-cell.3gp
1 Mbit
foo-iPhone.m4v
Main Profile
foo-desktop.m4v
foo-ref.mov
If you use QuickTime Pro 7.2.1 or later to export your movies for iOS, as described in “Encoding Video for Wi-Fi,
3G, and EDGE” (page 93), then you already have a reference movie. Otherwise, you can use the MakeRefMovie
tool to create reference movies. For more information on creating reference movies see Creating Reference
Movies - MakeRefMovie .
Also, refer to the MakeiPhoneRefMovie sample for a command-line tool that creates reference movies.
For more details on reference movies and instructions on how to set them up see “Applications and Examples”
in HTML Scripting Guide for QuickTime .
Creating a Poster Image for Movies
The video is not decoded until the user enters movie playback mode. Consequently, when displaying a webpage
with video, users may see a gray rectangle with a QuickTime logo until they tap the Play button. Therefore,
use a poster JPEG as a preview of your movie. If you use QuickTime Pro 7.2.1 or later to export your movies, as
described in “Encoding Video for Wi-Fi, 3G, and EDGE” (page 93), then a poster image is already created for
you. Otherwise, follow these instructions to set a poster image.
If you are using the