{"id":1876,"date":"2017-06-15T19:24:33","date_gmt":"2017-06-15T19:24:33","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=1876"},"modified":"2020-09-22T20:56:04","modified_gmt":"2020-09-22T20:56:04","slug":"ionic-and-rtl","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/ionic-and-rtl","title":{"rendered":"Ionic and RTL"},"content":{"rendered":"<blockquote><p>\n  This is a guest post from community member, <a href=\"https:\/\/github.com\/AmitMY\">Amit Moryossef<\/a>. Amit has been working on adding RTL support into Ionic.\n<\/p><\/blockquote>\n<p>Ionic has always been an awesome framework for creating apps that use <a href=\"https:\/\/www.w3.org\/International\/questions\/qa-scripts\">left-to-right (LTR) languages<\/a>, because it was designed this way from the beginning. For most people, this works great. The vast majority of languages are LTR, and their users may not know of any other possibility.<\/p>\n<p>However, there are some languages used by millions throughout the world which are read right-to-left (RTL), such as <a href=\"https:\/\/en.wikipedia.org\/wiki\/Hebrew_language\">Hebrew<\/a> and <a href=\"https:\/\/en.wikipedia.org\/wiki\/Arabic\">Arabic<\/a>. Ionic&#8217;s latest release includes additional support for <em>RTL<\/em> languages enabling developers to easily create a natural reading experience.<\/p>\n<p><!--more--><\/p>\n<p>Supporting RTL is a challenge because this \u201cfeature\u201d is not a first class citizen everywhere (Apple didn\u2019t even support RTL in iOS until version 9). CSS was also never originally designed for multidirectional support, but this is starting to change as more people request it.<\/p>\n<h3>What Are We Doing About It?<\/h3>\n<p>The goal is simple. We are committed to supporting RTL applications, or multi-directional applications, as soon as possible, while continuing to support LTR in Ionic.<\/p>\n<p>To reach this goal, small adjustments are being merged in every release to the current major version of Ionic (3.x.x). With this cadence, the next major version release of Ionic will have complete RTL support.<\/p>\n<p><!-- more --><\/p>\n<h3>The Journey<\/h3>\n<p>The Ionic team has been supportive in adding RTL to the framework. Since Ionic is an open source project, and since the community has much more experience with RTL languages, it became a welcomed community effort.<\/p>\n<p>First, we tried to handle one component at a time by adding custom <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/CSS_Selectors\">CSS selectors<\/a> for RTL. It proved to be possible, but not feasible. Duplicating CSS selectors to make the CSS properties compliant with RTL was not easily maintainable, and we had to find a different way to tackle this problem.<\/p>\n<p>We decided that we needed to take advantage of <a href=\"http:\/\/sass-lang.com\/documentation\/file.SASS_REFERENCE.html#mixins\">Sass mixins<\/a> to compensate for the lack of RTL support in CSS. For example, using the property <code>padding: 1px 2px 3px 4px<\/code> in RTL doesn&#8217;t look correct, because CSS uses the format of <code>top right bottom left<\/code> on both LTR and RTL directions.<\/p>\n<p>We found that the words <code>left<\/code> and <code>right<\/code> do not make sense to use for both directions, and decided on what more progressive CSS already uses:<\/p>\n<ul>\n<li>For left-to-right <code>start<\/code> is the same as <code>left<\/code>, and <code>end<\/code> is the same as <code>right<\/code>.<\/li>\n<li>For right-to-left <code>start<\/code> is the same as <code>right<\/code>, and <code>end<\/code> is the same as <code>left<\/code>.<\/li>\n<\/ul>\n<p>So we replaced the <code>padding<\/code>, <code>margin<\/code>, <code>border-radius<\/code>, <code>transform<\/code> and <code>text-align<\/code> properties with Sass mixins using the <code>top end bottom start<\/code> format instead. By defining padding using the mixin <code>@include padding(1px, 2px, 3px, 4px)<\/code> padding is applied based on the direction, removing the need to maintain code for every single component.<\/p>\n<p>Many RTL changes have already been made in the framework, but here are some screenshots of a few<\/p>\n<p><strong>Actionsheet<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Before<\/th>\n<th>After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/before.png\" alt=\"as-before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 396px; --smush-placeholder-aspect-ratio: 396\/92;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/before.png\" alt=\"as-before\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/after.png\" alt=\"as-after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 399px; --smush-placeholder-aspect-ratio: 399\/100;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/after.png\" alt=\"as-after\" \/><\/noscript><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p><strong>Alert<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Before<\/th>\n<th>After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/alert-before.png\" alt=\"alert-before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 249px; --smush-placeholder-aspect-ratio: 249\/90;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/alert-before.png\" alt=\"alert-before\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/alert-after.png\" alt=\"alert-after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 246px; --smush-placeholder-aspect-ratio: 246\/82;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/alert-after.png\" alt=\"alert-after\" \/><\/noscript><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p><strong>Arrows<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Before<\/th>\n<th>After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/arrow-before.png\" alt=\"arrows-before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 72px; --smush-placeholder-aspect-ratio: 72\/42;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/arrow-before.png\" alt=\"arrows-before\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/arrow-after.png\" alt=\"arrows-after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 67px; --smush-placeholder-aspect-ratio: 67\/35;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/arrow-after.png\" alt=\"arrows-after\" \/><\/noscript><\/td>\n<\/tr>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/arrow-before2.png\" alt=\"arrows-before2\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 67px; --smush-placeholder-aspect-ratio: 67\/37;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/arrow-before2.png\" alt=\"arrows-before2\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/arrow-after2.png\" alt=\"arrows-after2\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 74px; --smush-placeholder-aspect-ratio: 74\/37;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/arrow-after2.png\" alt=\"arrows-after2\" \/><\/noscript><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p><strong>Item<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Before<\/th>\n<th>After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/item-before.png\" alt=\"item-before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 406px; --smush-placeholder-aspect-ratio: 406\/56;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/item-before.png\" alt=\"item-before\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/item-after.png\" alt=\"item-after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 409px; --smush-placeholder-aspect-ratio: 409\/55;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/item-after.png\" alt=\"item-after\" \/><\/noscript><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p><strong>Radio &amp; Checkbox<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Before<\/th>\n<th>After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/radio-before.png\" alt=\"rc-before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 287px; --smush-placeholder-aspect-ratio: 287\/121;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/radio-before.png\" alt=\"rc-before\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/radio-after.png\" alt=\"rc-after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 289px; --smush-placeholder-aspect-ratio: 289\/124;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/radio-after.png\" alt=\"rc-after\" \/><\/noscript><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p><strong>Toggle<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Before<\/th>\n<th>After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/toggle-before.png\" alt=\"toggle-before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 55px; --smush-placeholder-aspect-ratio: 55\/38;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/toggle-before.png\" alt=\"toggle-before\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/toggle-after.png\" alt=\"toggle-after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 47px; --smush-placeholder-aspect-ratio: 47\/31;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/toggle-after.png\" alt=\"toggle-after\" \/><\/noscript><\/td>\n<\/tr>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/toggle-before2.png\" alt=\"toggle-before2\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 49px; --smush-placeholder-aspect-ratio: 49\/37;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/toggle-before2.png\" alt=\"toggle-before2\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/toggle-after2.png\" alt=\"toggle-after2\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 44px; --smush-placeholder-aspect-ratio: 44\/35;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/toggle-after2.png\" alt=\"toggle-after2\" \/><\/noscript><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p><strong>Searchbar<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Before<\/th>\n<th>After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/searchbar-before.png\" alt=\"sb-before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 395px; --smush-placeholder-aspect-ratio: 395\/57;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/searchbar-before.png\" alt=\"sb-before\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/searchbar-after.png\" alt=\"sb-after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 396px; --smush-placeholder-aspect-ratio: 396\/57;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/searchbar-after.png\" alt=\"sb-after\" \/><\/noscript><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/p>\n<p><strong>Tabs<\/strong><\/p>\n<table>\n<thead>\n<tr>\n<th>Before<\/th>\n<th>After<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/tabs-before.png\" alt=\"tabs-before\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 118px; --smush-placeholder-aspect-ratio: 118\/62;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/tabs-before.png\" alt=\"tabs-before\" \/><\/noscript><\/td>\n<td><img decoding=\"async\" data-src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/tabs-after.png\" alt=\"tabs-after\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazyload\" style=\"--smush-placeholder-width: 107px; --smush-placeholder-aspect-ratio: 107\/60;\" \/><noscript><img decoding=\"async\" src=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/tabs-after.png\" alt=\"tabs-after\" \/><\/noscript><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Animations like menu toggling and navigation (page transition) have also been adjusted.<\/p>\n<h3>One More Hurdle Along the Way<\/h3>\n<p>While Sass is awesome, and adjusting it to our needs works perfectly, there are some styles which are controlled from TypeScript.<\/p>\n<p>These component styles can only be adjusted to support RTL on a case-by-case basis, and this can be tricky depending upon requirements.<\/p>\n<p>The risk of case-by-case fixes is that developing with them won&#8217;t come naturally to all developers, and we will need to ensure code coverage for every new component that gets added, and every edge case presented.<\/p>\n<h3>Getting Technical<\/h3>\n<p>To view the technical work we&#8217;ve already accomplished, and learn what is planned for development, you can <a href=\"https:\/\/ionicframework.com\/docs\/theming\/rtl-support\/\">read the docs<\/a>.<\/p>\n<h3>Adding RTL Support to Your App<\/h3>\n<p>Ionic&#8217;s styles have support for RTL, but your app may not. We recommend using our new Sass mixins to include multi-directional support for your custom styling.<\/p>\n<p>Below is an example of using these new Sass mixins: <code>padding<\/code>, <code>ltr<\/code> and <code>rtl<\/code> on a <code>selector<\/code>:<\/p>\n<pre><code class=\"language-scss\">selector {\n  \/\/ Include directional properties via mixins\n  @include padding(0, 10px, null, 5px);\n\n  \/\/ Direction agnostic styles go here\n  background-color: black;\n\n  @include ltr() {\n     \/\/ Custom ltr styles go here\n     order: 1;\n  }\n\n  @include rtl() {\n    \/\/ Custom rtl styles go here\n    order: -1;\n  }\n}\n<\/code><\/pre>\n<h3>Enabling RTL\/LTR<\/h3>\n<p>Those of you who do not need to support RTL languages may be concerned by the CSS bundle size increasing. Don&#8217;t worry, we got you! The <code>$app-direction<\/code> is set to <code>ltr<\/code> by default, so your app will need to enable RTL.<\/p>\n<p>By setting <code>$app-direction: multi<\/code> in your Sass, your CSS will include all of the styles for both LTR and RTL languages.<\/p>\n<p>What if your app is RTL only? Just set <code>$app-direction: rtl<\/code> and your app will only support RTL.<\/p>\n<h3>Special Thanks<\/h3>\n<p>It has been great seeing so many pull requests and issues describing these technological challenges that need addressing. I believe that the only thing making RTL possible is the great community that is behind it driving it forward.<\/p>\n<p>I want to thank <a href=\"https:\/\/github.com\/brandyscarney\">Brandy<\/a>, <a href=\"https:\/\/github.com\/manucorporat\">Manu<\/a>, <a href=\"https:\/\/github.com\/sijav\">sijav<\/a>, <a href=\"https:\/\/github.com\/John-Luke\">John-Luke<\/a>, and everyone who has helped and contributed towards achieving this goal. You all are awesome!<\/p>\n<p>View the state of <a href=\"https:\/\/github.com\/ionic-team\/ionic\/labels\/rtl\">RTL on GitHub<\/a>.<\/p>\n<p>If you have any issues or questions, we will be happy to help you on our <a href=\"http:\/\/forum.ionicframework.com\/\">forum<\/a>, <a href=\"https:\/\/ionicworldwide.herokuapp.com\/\">slack channel<\/a> or through <a href=\"https:\/\/github.com\/driftyco\/ionic\/issues\">GitHub issues<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is a guest post from community member, Amit Moryossef. Amit has been working on adding RTL support into Ionic. Ionic has always been an awesome framework for creating apps that use left-to-right (LTR) languages, because it was designed this way from the beginning. For most people, this works great. The vast majority of languages [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":1900,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"","publish_post_category":"","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"","discourse_permalink":"","wpdc_publishing_response":"","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[3,72],"class_list":["post-1876","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","tag-ionic","tag-rtl"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ionic and RTL - Ionic Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/ionic-and-rtl\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ionic and RTL\" \/>\n<meta property=\"og:description\" content=\"This is a guest post from community member, Amit Moryossef. Amit has been working on adding RTL support into Ionic. Ionic has always been an awesome framework for creating apps that use left-to-right (LTR) languages, because it was designed this way from the beginning. For most people, this works great. The vast majority of languages [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/ionic-and-rtl\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-06-15T19:24:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-09-22T20:56:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"807\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Amit Moryossef\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@amitmoryossef\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Amit Moryossef\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl\"},\"author\":{\"name\":\"Amit Moryossef\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/d0d2a57c68fd739132687cd29e6a8a20\"},\"headline\":\"Ionic and RTL\",\"datePublished\":\"2017-06-15T19:24:33+00:00\",\"dateModified\":\"2020-09-22T20:56:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl\"},\"wordCount\":820,\"commentCount\":11,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png\",\"keywords\":[\"Ionic\",\"RTL\"],\"articleSection\":[\"All\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/ionic-and-rtl#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl\",\"url\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl\",\"name\":\"Ionic and RTL - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png\",\"datePublished\":\"2017-06-15T19:24:33+00:00\",\"dateModified\":\"2020-09-22T20:56:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/ionic-and-rtl\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png\",\"width\":1200,\"height\":807},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/ionic-and-rtl#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ionic and RTL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/d0d2a57c68fd739132687cd29e6a8a20\",\"name\":\"Amit Moryossef\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f4eb02d45ac879a628dee48a5ceadaeb3814fee23a60eba13ba1eba275fcc753?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f4eb02d45ac879a628dee48a5ceadaeb3814fee23a60eba13ba1eba275fcc753?s=96&d=mm&r=g\",\"caption\":\"Amit Moryossef\"},\"description\":\"A bored guy who writes stuff\",\"sameAs\":[\"https:\/\/x.com\/amitmoryossef\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/amitmy\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ionic and RTL - Ionic Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ionic.io\/blog\/ionic-and-rtl","og_locale":"en_US","og_type":"article","og_title":"Ionic and RTL","og_description":"This is a guest post from community member, Amit Moryossef. Amit has been working on adding RTL support into Ionic. Ionic has always been an awesome framework for creating apps that use left-to-right (LTR) languages, because it was designed this way from the beginning. For most people, this works great. The vast majority of languages [&hellip;]","og_url":"https:\/\/ionic.io\/blog\/ionic-and-rtl","og_site_name":"Ionic Blog","article_published_time":"2017-06-15T19:24:33+00:00","article_modified_time":"2020-09-22T20:56:04+00:00","og_image":[{"width":1200,"height":807,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png","type":"image\/png"}],"author":"Amit Moryossef","twitter_card":"summary_large_image","twitter_creator":"@amitmoryossef","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Amit Moryossef","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl"},"author":{"name":"Amit Moryossef","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/d0d2a57c68fd739132687cd29e6a8a20"},"headline":"Ionic and RTL","datePublished":"2017-06-15T19:24:33+00:00","dateModified":"2020-09-22T20:56:04+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl"},"wordCount":820,"commentCount":11,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png","keywords":["Ionic","RTL"],"articleSection":["All"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/ionic-and-rtl#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl","url":"https:\/\/ionic.io\/blog\/ionic-and-rtl","name":"Ionic and RTL - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png","datePublished":"2017-06-15T19:24:33+00:00","dateModified":"2020-09-22T20:56:04+00:00","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/ionic-and-rtl"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png","width":1200,"height":807},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/ionic-and-rtl#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Ionic and RTL"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/d0d2a57c68fd739132687cd29e6a8a20","name":"Amit Moryossef","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f4eb02d45ac879a628dee48a5ceadaeb3814fee23a60eba13ba1eba275fcc753?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f4eb02d45ac879a628dee48a5ceadaeb3814fee23a60eba13ba1eba275fcc753?s=96&d=mm&r=g","caption":"Amit Moryossef"},"description":"A bored guy who writes stuff","sameAs":["https:\/\/x.com\/amitmoryossef"],"url":"https:\/\/ionic.io\/blog\/author\/amitmy"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2017\/06\/rtl-1.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1876","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=1876"}],"version-history":[{"count":0,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/1876\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/1900"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=1876"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=1876"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=1876"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}