<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mosaico.io News and Blog</title>
    <description>Mosaico is the first open source email template editor proudly brought to you by VOXmail: it is powerful and free! The email template builder supports responsive design and live wysiwyg editing.</description>
    <link>http://voidlabs.github.io/</link>
    <atom:link href="https://mosaico.io/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Tue, 10 Mar 2026 17:27:21 +0000</pubDate>
    <lastBuildDate>Tue, 10 Mar 2026 17:27:21 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Samsung Email Autowidth feature breaks responsivity. Here is a workaround!</title>
        <description>&lt;p&gt;Have you ever created a responsive email using media queries to optimize it for smartphones, only to find that &lt;strong&gt;Samsung Email breaks the layout&lt;/strong&gt; by using an excessively wide viewport? Even if your media queries are correctly interpreted and applied, texts become unreadable due to the wide rendering. We reported it as versafix template issue &lt;a href=&quot;https://github.com/voidlabs/versafix-template/issues/37&quot;&gt;#37&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The bug was initially &lt;a href=&quot;https://github.com/hteumeuleu/email-bugs/issues/73&quot;&gt;reported four years ago&lt;/a&gt; to the &lt;strong&gt;HTeuMeuLeu&lt;/strong&gt; repository by &lt;strong&gt;Mark Robbins&lt;/strong&gt;. Several workarounds were proposed, but &lt;strong&gt;none of them resolved the issue&lt;/strong&gt; with our template.&lt;/p&gt;

&lt;p&gt;In an attempt to address the problem, we &lt;del&gt;reverse engineered&lt;/del&gt; made a lot of guessing about &lt;strong&gt;Samsung Email “Autofit” feature&lt;/strong&gt; to understand why it was causing our autofitting email to display improperly.&lt;/p&gt;

&lt;p&gt;Through testing, we discovered that &lt;strong&gt;the issue arose when the email’s HTML contained large elements with extensive “width” attributes or width properties in element styles&lt;/strong&gt;. Notably, elements hidden with “display: none” did not trigger the issue.
&lt;!--more--&gt;
What occurred was that Samsung Email identified the largest width in the HTML code and adjusted the viewport width accordingly, resulting in a zoomed-out version of the email. Most responsive emails use desktop widths in their HTML code, making only mobile-first templates immune to this Samsung bug. It’s surprising that no effective workaround has been proposed in four years and that Samsung has yet to address the issue.&lt;/p&gt;

&lt;p&gt;Upon examining the JavaScript code used in the WebView for rendering emails, we encountered &lt;strong&gt;something peculiar in the Autofit.js file&lt;/strong&gt;:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nx&quot;&gt;AutoFit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;onLoad&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;loadCallback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;removeHeight100InStyleCallback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;getViewportCallback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;IsPLMContent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;fontSize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

  &lt;span class=&quot;p&quot;&gt;[...]&lt;/span&gt;
  
  &lt;span class=&quot;nx&quot;&gt;baseViewportWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;getViewportCallback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;children&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;orignalDiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;children&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;nx&quot;&gt;removeHeight100InStyle&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;removeHeight100InStyleCallback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;originMaxWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;removeHeight100InNode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;children&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;p&quot;&gt;[...]&lt;/span&gt;
  
	&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;orignalWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;orignalDiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;orignalDiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getAttribute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SET_WIDTH_ATTR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;newWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;orignalDiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;secDivWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;parseInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nx&quot;&gt;MAX_WIDTH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;orignalBody&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;offsetWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;orignalDiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;MAX_WIDTH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;baseViewportWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
	        &lt;span class=&quot;c1&quot;&gt;//checkMaxWidth(orignalDiv.children);&lt;/span&gt;
	        &lt;span class=&quot;nx&quot;&gt;MAX_WIDTH&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;MAX_WIDTH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;originMaxWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

		&lt;span class=&quot;nx&quot;&gt;newWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;Math&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;max&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;MAX_WIDTH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;baseViewportWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;px&lt;/span&gt;&lt;span class=&quot;dl&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;orignalDiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;style&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;orignalDiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;scrollWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;newWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
		&lt;span class=&quot;nx&quot;&gt;width&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;secDivWidth&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;parseInt&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;newWidth&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

		&lt;span class=&quot;nx&quot;&gt;orignalDiv&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;setAttribute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;SET_WIDTH_ATTR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
 
  &lt;span class=&quot;p&quot;&gt;[...]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The function removeHeight100InNode returns the largest element width, and this value is stored in “originMaxWidth.” Later in the code, “originMaxWidth” is used as the new viewport width before the final rendering.&lt;/p&gt;

&lt;p&gt;Based on the conditions, it seems that Samsung Email initially renders the email using a narrow viewport. If the rendered email does not overflow, it then applies the aforementioned logic. This behavior is contrary to expectations, as one would assume that if the email does not fit the mobile viewport, it should be left as is, while only those that fit would be autofitted. This &lt;strong&gt;sounds like the opposite of what some autofit code should do&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;However, armed with this knowledge, we were able to identify a potential workaround. We discovered that adding a fixed-width element with a width of 430px to our email improved the rendering. This adjustment caused the email to be displayed as mobile on a 450px viewport, rather than the default 600px viewport used without the fixed element.&lt;/p&gt;

&lt;p&gt;After extensive trial and error, we arrived at a &lt;strong&gt;generic solution&lt;/strong&gt; specifically targeting Samsung Email:&lt;/p&gt;

&lt;div class=&quot;language-css highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;  &lt;span class=&quot;k&quot;&gt;@media&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;screen&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;and&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;max-width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;384px&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nc&quot;&gt;.mail-message-content&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;nl&quot;&gt;width&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;414px&lt;/span&gt; &lt;span class=&quot;cp&quot;&gt;!important&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Interestingly, this media query only matches during the initial rendering evaluation by the app. Subsequently, the email is rendered in a viewport of approximately 420px (estimated) because it doesn’t fit the mobile viewport. With the new viewport size, the media query no longer matches.&lt;/p&gt;

&lt;p&gt;We tested this fix on several Samsung devices, including the S8, S10e, S22, S20 Plus, S23 Ultra, and a few Notes. The solution appeared to work consistently across devices, regardless of their native virtual viewport sizes. Please let us know if this workaround resolves the issue for you as well!&lt;/p&gt;
</description>
        <pubDate>Mon, 03 Jul 2023 01:00:00 +0000</pubDate>
        <link>https://mosaico.io/email-client-tricks/samsung-email-autowidth-breaks-repositivity/</link>
        <guid isPermaLink="true">https://mosaico.io/email-client-tricks/samsung-email-autowidth-breaks-repositivity/</guid>
        
        
        <category>email-client-tricks</category>
        
      </item>
    
      <item>
        <title>Mosaico 0.17.3 release</title>
        <description>&lt;p&gt;It’s been a while since our previous release but it turned out &lt;strong&gt;Mosaico is pretty stable/solid&lt;/strong&gt; and easy to extend via plugins!&lt;/p&gt;

&lt;p&gt;On the other side &lt;strong&gt;it took 4 iterations to have our first 0.17.x stable release&lt;/strong&gt;, namely the 0.17.3, because of unexpected issues with the newer version of our dependency TinyMCE and because of bugs in Safari rendering engine (WebKit).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/mosaico-0.17.png&quot; alt=&quot;Mosaico 0.17&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let’s see the changes…
&lt;!--more--&gt;&lt;/p&gt;

&lt;h2 id=&quot;final-user-changesimprovements&quot;&gt;Final User changes/improvements&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Updated versafix-1 to 1.1.16 with new blocks and new formatting options&lt;/strong&gt;: &lt;a href=&quot;/news/update-to-our-versafix-master-template-for-emails/&quot;&gt;see release notes&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Added image tool on “editable images” that by default opens the gallery (overridable via viewModel plugin)&lt;/li&gt;
  &lt;li&gt;New outline on editable elements when hovering a block&lt;/li&gt;
  &lt;li&gt;Prevent editing contents while tinymce is being loaded (fading effect)&lt;/li&gt;
  &lt;li&gt;Use inline-block with a min-width for inline editables + hacks to prevent element collapsing&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;developersintegrators-changes&quot;&gt;Developers/Integrators changes:&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Added Russian, Serbian and Portuguese language packs&lt;/li&gt;
  &lt;li&gt;Added decodeURI, encodeURI, decodeURIComponent and encodeURIComponent to functions available to template authors.&lt;/li&gt;
  &lt;li&gt;Compatibility with jQuery up to latest 3.3 (using jQuery-Migrate), we suggest upgrading to jQuery 3.3, Knockout 3.4.2, TinyMCE 4.5.x (MAY work with 4.6.x, still have ISSUES with 4.7.x)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Major build refactoring&lt;/strong&gt; to remove bower and &lt;strong&gt;improve build reproducibility&lt;/strong&gt; over time when using npm v5 (previous releases are not anymore buildable because of bower and no package.lock mechanisms in older npm).&lt;/li&gt;
  &lt;li&gt;A bunch of minor bug fixes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go, &lt;strong&gt;check out &lt;a href=&quot;https://github.com/voidlabs/mosaico/releases/tag/v0.17.3&quot;&gt;Mosaico 0.17.3&lt;/a&gt;&lt;/strong&gt; and join the community!&lt;/p&gt;
</description>
        <pubDate>Mon, 26 Mar 2018 14:00:00 +0000</pubDate>
        <link>https://mosaico.io/news/mosaico-0-17-release/</link>
        <guid isPermaLink="true">https://mosaico.io/news/mosaico-0-17-release/</guid>
        
        
        <category>news</category>
        
      </item>
    
      <item>
        <title>Yandex.com removes full style attribute on unexpected contents</title>
        <description>&lt;p&gt;We’ve had reports that our latest &lt;a href=&quot;https://github.com/voidlabs/versafix-template/releases/tag/v1.1.16&quot;&gt;versafix-1 template&lt;/a&gt; (1.1.16) shows its &lt;strong&gt;mobile version on Yandex webmail even on desktop&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After some investigation we found that &lt;strong&gt;Yandex is stripping whole style attributes when the style contains something unexpected&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;We did some search to find existing informations about Yandex issues, but found nothing relevant, so we decided to &lt;strong&gt;dig into it and document the behaviour&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;what-we-found&quot;&gt;What we found&lt;/h3&gt;

&lt;p&gt;Yandex.com webmail usually removes a properties if it doesn’t know it or doesn’t understand the property value, but it sometimes remove the whole style!
&lt;!--more--&gt;
We found that the &lt;strong&gt;full style attribute removal happens in a couple of cases&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;When there are round brackets in a property value and you have some symbols in the content, like ‘_’, ‘-‘, ‘+’, ‘*’, ‘&amp;amp;’&lt;/li&gt;
  &lt;li&gt;On every property value if a sequence “- “ is found or a “NUMBER-“ or “-NUMBER” is found.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;an-example&quot;&gt;An example&lt;/h3&gt;

&lt;p&gt;Let’s see an example code:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color: red; -unknown-prop: value&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;A&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color: red; -unknown-prop: value - 2&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;B&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color: red; -unknown-prop: -5something&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;C&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color: red; -unknown-prop: something(in brackets)&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;D&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color: red; -unknown-prop: something(in - brackets)&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;E&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;is cleaned up by Yandex to this:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color:red;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;A&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;B&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;C&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color:red;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;D&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;div&amp;gt;&lt;/span&gt;E&lt;span class=&quot;nt&quot;&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Yandex is removing also the properties he understands&lt;/strong&gt; like “color: red” when the style contains something he doesn’t like.&lt;/p&gt;

&lt;h3 id=&quot;no-fab4-then&quot;&gt;No Fab4, then?&lt;/h3&gt;

&lt;p&gt;So, this issue makes the &lt;a href=&quot;https://mosaico.io/email-client-tricks/fab4-responsive-beyond-gmail/&quot;&gt;Fab4 technique&lt;/a&gt; ineffective without additional hacks.&lt;/p&gt;

&lt;p&gt;We &lt;a href=&quot;https://github.com/voidlabs/versafix-template/issues/1&quot;&gt;documented the bug&lt;/a&gt; in the versafix-1 repository. We’ll try some additional hack to see if we can get the desktop version on Yandex even if partially using the Fab4 approach.&lt;/p&gt;

&lt;p&gt;Unfortunately we’re not aware of known hacks to target Yandex.com webmail so to put some specific workaround in place, so we’ll need a generic solution and something that doesn’t break any other email client.&lt;/p&gt;

&lt;p&gt;Did you experience this bug? How did you fix it? Do you have more details about the issue? Get in touch with us!&lt;/p&gt;
</description>
        <pubDate>Mon, 19 Mar 2018 14:00:00 +0000</pubDate>
        <link>https://mosaico.io/email-client-tricks/yandex-mail-removing-styles-with-calc-expressions/</link>
        <guid isPermaLink="true">https://mosaico.io/email-client-tricks/yandex-mail-removing-styles-with-calc-expressions/</guid>
        
        
        <category>email-client-tricks</category>
        
      </item>
    
      <item>
        <title>Introducing HTMML and icon generation tool to improve master templates maintenance</title>
        <description>&lt;p&gt;One of the strengths of Mosaico is its template-based approach. Most options Mosaico gives you when you edit a template are &lt;strong&gt;not hardcoded in the Mosaico Library&lt;/strong&gt;. Instead, they are &lt;strong&gt;defined in the “master template”&lt;/strong&gt;, by the template author.&lt;/p&gt;

&lt;p&gt;A major design choice in the “template language” was that the template language is simply an extension to HTML, so that &lt;strong&gt;you can open a master template in your browser and see how it looks like&lt;/strong&gt;, or you can edit it using your preferred html editor.&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;major advantage when you have a master template with few options&lt;/strong&gt;, but you’ll find repeating and copy and pasting a lot of html code if you want to create a full featured master template like our Versafix.&lt;/p&gt;

&lt;p&gt;The repeating and copy and pasting tasks usually get you to more bugs, so while we updated our Versafix master template &lt;strong&gt;we decided to build a small generation tool to help with “deduplication” and maintenance&lt;/strong&gt;.
&lt;!--more--&gt;&lt;/p&gt;

&lt;h1 id=&quot;htmml-the-hyper-text-meta-markup-language&quot;&gt;HTMML, the Hyper Text META Markup Language&lt;/h1&gt;

&lt;p&gt;We tested a lot of existing templating tools, but in the end they were &lt;strong&gt;too complex or not flexible enough&lt;/strong&gt;, so we ended up writing our own minimal markup language in only 300 lines of javascript code.&lt;/p&gt;

&lt;p&gt;This allowed us to &lt;strong&gt;reduce our versafix HTML definition from 200KB to 50KB&lt;/strong&gt; and use “cascading” to reduce code duplication. It’s like CSS but for HTML tags/attributes, instead of styles, plus the ability to define new tags.&lt;/p&gt;

&lt;p&gt;The META Markup Language is very simple and fully documented in the &lt;a href=&quot;https://github.com/voidlabs/htmml&quot;&gt;project README&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So HTMML let us generating the Mosaico template (including its own template language), but Mosaico will still use the same template language.&lt;/em&gt;&lt;/p&gt;

&lt;h3 id=&quot;versafix-template-project&quot;&gt;Versafix Template project&lt;/h3&gt;

&lt;p&gt;We prepared an upgrade from our &lt;strong&gt;hand-crafted Versafix 1.0.6&lt;/strong&gt; template to a new &lt;strong&gt;HTMML generated Versafix 1.1.16&lt;/strong&gt; and this &lt;strong&gt;also helped us identifying and fixing a few bugs&lt;/strong&gt; in the versafix 1.0.6 template.&lt;/p&gt;

&lt;p&gt;In a &lt;a href=&quot;/news/update-to-our-versafix-master-template-for-emails/&quot;&gt;previous post&lt;/a&gt; we introduced the new Versafix master template and now &lt;a href=&quot;https://github.com/voidlabs/versafix-template&quot;&gt;we published the htmml sources we used to generate it&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;automatically-generating-icons&quot;&gt;Automatically generating icons&lt;/h3&gt;

&lt;p&gt;We also found that &lt;strong&gt;generating multiple variations of multiple social icons&lt;/strong&gt; by manually working with image editing tools and dozens of layers &lt;strong&gt;took a lot of time and was error prone&lt;/strong&gt;, so we also &lt;a href=&quot;https://github.com/voidlabs/versafix-social-icons/&quot;&gt;created and opensourced a script that help us &lt;strong&gt;automatically generating all of the social icons&lt;/strong&gt;&lt;/a&gt; (70!) that are used by the new Versafix template.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/voidlabs/versafix-social-icons/raw/master/icons-overview/all-48.png?raw=true&quot; alt=&quot;Versafix-Icons-Overview&quot; /&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;If you want to &lt;strong&gt;add new social networks&lt;/strong&gt; you can simply create a 512px square Black on White icon, add its name and brand color inside the small generation script (iconsDef array) and it will automatically prepare all of the variants.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;If you want to &lt;strong&gt;create new icon style variants&lt;/strong&gt; then things get harder because you will have to deal with ImageMagick processing directives, but once you created your style you will be able to generate and maintain all of the social icons using that style in few seconds.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;This script is not tied to Mosaico or the Versafix template&lt;/strong&gt;: you can use wherever you need to maintain a lot of icons with a lot of variants. &lt;em&gt;Fork it and improve it!&lt;/em&gt;&lt;/p&gt;

</description>
        <pubDate>Fri, 02 Mar 2018 18:00:00 +0000</pubDate>
        <link>https://mosaico.io/news/introducing-htmml-templating-language-for-email-and-autogenerated-social-icons/</link>
        <guid isPermaLink="true">https://mosaico.io/news/introducing-htmml-templating-language-for-email-and-autogenerated-social-icons/</guid>
        
        
        <category>news</category>
        
      </item>
    
      <item>
        <title>A due update to our &quot;versafix&quot; master template</title>
        <description>&lt;p&gt;Mosaico flagship master template is named &lt;strong&gt;Versafix-1&lt;/strong&gt; and the current version (1.0.6) is used by thousands of users around the world, every day, to create effective and responsive emails.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;In the past 2 years we analized how people used Versafix, what were the most commonly altered styles and collected a lot of feedback and feature requests!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We followed the suggestions, but before we detail the improvements, we want to let you know the basics:
&lt;!--more--&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;forward compatible&lt;/strong&gt;: any email model saved against the versafix 1.0.x master template can been loaded by the new versafix 1.1.x master template and enhanced with the new options.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;requires no changes to the library&lt;/strong&gt;: we wanted the new template to be deployed also on older mosaico releases (0.14.0+ is known to handle the template correctly).&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;new--noteworthy-in-1116&quot;&gt;New &amp;amp; Noteworthy in 1.1.16&lt;/h1&gt;

&lt;h3 id=&quot;new-alignment-option-for-titles-paragraphs-and-buttons&quot;&gt;New alignment option for titles, paragraphs and buttons&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/versafix-1.1-alignments.png&quot; alt=&quot;Title, Text and Buttons alignments&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;new-line-height-option-for-paragraphs&quot;&gt;New line-height option for paragraphs&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/versafix-1.1-lineheight.png&quot; alt=&quot;Line-height&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;narrow-vs-full-width-background-option-in-the-logo-and-separator-blocks&quot;&gt;Narrow vs Full width background option in the Logo and Separator blocks&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/versafix-1.1-backgrounds.png&quot; alt=&quot;Block background&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;free-height-option-for-image-sizing-in-blocks-with-images-in-multiple-columns&quot;&gt;Free height option for image sizing in blocks with images in multiple columns&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/versafix-1.1-free-img-heights.png&quot; alt=&quot;Non-Fixed Image heights option&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;new-image-size-variants-for-the-image-and-text-hero-block&quot;&gt;New “Image size” variants for the “Image and Text” (hero) block&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/versafix-1.1-image-text-variants.png&quot; alt=&quot;New variants in hero block&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;new-full-size-social-follow-block-with-2-new-icon-styles-and-2-available-sizes&quot;&gt;New full size “Social follow” block with 2 new icon styles and 2 available sizes&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/versafix-1.1-social-follow.png&quot; alt=&quot;Social follow block&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;new-social-share-block-with-3-available-styles&quot;&gt;New “Social share” block with 3 available styles&lt;/h3&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/versafix-1.1-social-share.png&quot; alt=&quot;Social share block&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;html-output-fully-revamped&quot;&gt;HTML output fully revamped&lt;/h3&gt;

&lt;p&gt;The improvements above were introduced in 1.1.0 release. Then it tooks 16 releases (to 1.1.16) to deal with email clients specific issues :-)&lt;/p&gt;

&lt;p&gt;We introduced new “&lt;strong&gt;hybrid hacks&lt;/strong&gt;” (&lt;a href=&quot;https://mosaico.io/email-client-tricks/fab4-responsive-beyond-gmail/&quot;&gt;responsive + spongy + calc&lt;/a&gt;) to &lt;strong&gt;improve compatibility with most email clients&lt;/strong&gt; and to &lt;strong&gt;improve responsive behaviour on email clients not supporting CSS media queries&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This let us correctly switch the responsivity in Gmail desktop and in “MyMail” app for Android and iOS (Mobile apps from Mail.ru, Libero.it and maybe other big local providers are in fact MyMail “forks”).&lt;/p&gt;

&lt;h1 id=&quot;enjoy&quot;&gt;Enjoy&lt;/h1&gt;

&lt;p&gt;The updated template is &lt;strong&gt;already included in the official mosaico distribution&lt;/strong&gt; (0.17.0) and can be tested here on Mosaico.io live demo.&lt;/p&gt;

&lt;p&gt;We also created a &lt;a href=&quot;https://github.com/voidlabs/versafix-template&quot;&gt;specific Github repository for the master template&lt;/a&gt; so to better &lt;strong&gt;deal with template releases that often don’t need a new library release&lt;/strong&gt; and follow different release paths.&lt;/p&gt;
</description>
        <pubDate>Wed, 28 Feb 2018 18:00:00 +0000</pubDate>
        <link>https://mosaico.io/news/update-to-our-versafix-master-template-for-emails/</link>
        <guid isPermaLink="true">https://mosaico.io/news/update-to-our-versafix-master-template-for-emails/</guid>
        
        
        <category>news</category>
        
      </item>
    
      <item>
        <title>Full Mosaico-based email template authoring app from the community</title>
        <description>&lt;h3 id=&quot;a-full-web-application&quot;&gt;A full web application&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://www.goodenough.agency/&quot;&gt;GoodEnough&lt;/a&gt;&lt;/strong&gt;, a small web agency from Paris, just published a &lt;strong&gt;full web application built around Mosaico&lt;/strong&gt; to let companies easily install a &lt;strong&gt;complete environment where multiple users can work on email templates using Mosaico&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://github.com/goodenough/mosaico-backend&quot;&gt;project repository&lt;/a&gt; &lt;strong&gt;started as a Mosaico fork&lt;/strong&gt;, but in fact &lt;strong&gt;we now see it as an application that depends on Mosaico&lt;/strong&gt;. We are working with GoodEnough so to let their customization being developed as plugins instead of altering the main code, so it will be easier to keep up with new Mosaico releases.&lt;/p&gt;

&lt;p&gt;The App has a very good looking &lt;strong&gt;material design&lt;/strong&gt; and is very easy to use and you can easily &lt;strong&gt;appreciate their UX skills&lt;/strong&gt;!
&lt;!--more--&gt;&lt;/p&gt;

&lt;h3 id=&quot;deploy-to-herokuaws-in-minutes&quot;&gt;Deploy to Heroku+AWS in minutes&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/Hiswe&quot;&gt;Yannick&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href=&quot;https://github.com/abernier&quot;&gt;Antoine&lt;/a&gt;&lt;/strong&gt;  also published a &lt;strong&gt;&lt;a href=&quot;https://elements.heroku.com/buttons/goodenough/mosaico-backend&quot;&gt;Deploy to Heroku button&lt;/a&gt;&lt;/strong&gt; to deploy the app to Heroku in minutes. You need an Heroku account, an Amazon AWS account and some Amazon S3 manual configurations to start it, but you will be ready to start your own deployment in the cloud in few steps.&lt;/p&gt;

&lt;p&gt;Here &lt;strong&gt;you can see their &lt;a href=&quot;https://youtu.be/sLzZq3cXDi0&quot;&gt;screencast&lt;/a&gt;&lt;/strong&gt; about the App.&lt;/p&gt;

&lt;h3 id=&quot;use-it&quot;&gt;Use it!&lt;/h3&gt;

&lt;p&gt;We are very happy to see the community is embracing our library and developing tools around it, so, if you want your own “standalone” Mosaico editing experience and environment, give a look to the GoodEnough tool!&lt;/p&gt;
</description>
        <pubDate>Mon, 30 Oct 2017 12:00:00 +0000</pubDate>
        <link>https://mosaico.io/news/full-mosaico-based-app-from-goodenough/</link>
        <guid isPermaLink="true">https://mosaico.io/news/full-mosaico-based-app-from-goodenough/</guid>
        
        
        <category>news</category>
        
      </item>
    
      <item>
        <title>That weird style issue in Outlook/Office365</title>
        <description>&lt;p&gt;When Outlook.com/Office365 find an A tag without the HREF or with an empty HREF or an HREF with the value “#” then it will get very upset and will remove the link tag.&lt;/p&gt;

&lt;p&gt;This is a known bug &lt;a href=&quot;https://github.com/hteumeuleu/email-bugs/issues/10&quot;&gt;documented&lt;/a&gt; by the great &lt;em&gt;“email hacker”&lt;/em&gt; Rémi Parmentier*&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;cp&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;xmlns=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;http://www.w3.org/1999/xhtml&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;http-equiv=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Content-Type&quot;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;content=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;text/html; charset=UTF-8&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;body&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;font-size: 30px;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;a&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;color: red; background-color: yellow;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/a&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;A paragraph&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&amp;gt;&lt;/span&gt;Second paragraph with no style&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Third paragraph with style&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;p&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;style=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;Fourth paragraph with style&lt;span class=&quot;nt&quot;&gt;&amp;lt;/p&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;So &lt;strong&gt;we are not surprised&lt;/strong&gt; our link is not red on yellow, but &lt;strong&gt;look at&lt;/strong&gt; how Outlook.com renders &lt;strong&gt;the “Third paragraph”&lt;/strong&gt; for the previous code:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/images/outlook-a-no-href-issue.png&quot; alt=&quot;Outlook.com moving styles&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It sounds like an almost “random” element in the page &lt;strong&gt;will get the styles once belonging to your “unlinked” link&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Our tests proved that the element is not “random” (of course) but it is the first following (in the DOM traversing) element with a “STYLE” attribute.&lt;/p&gt;

&lt;p&gt;So, this is just another reason to stay away from empty links.&lt;/p&gt;

&lt;p&gt;(*) We suggest you Rémi’s latest post about &lt;a href=&quot;https://emails.hteumeuleu.com/outlook-coms-latest-bug-and-how-to-fix-gaps-under-images-ee1816671461&quot;&gt;Outlook.com weird bugs&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 05 May 2017 11:20:21 +0000</pubDate>
        <link>https://mosaico.io/email-client-tricks/outlook-com-office-365-empty-a-style-issue/</link>
        <guid isPermaLink="true">https://mosaico.io/email-client-tricks/outlook-com-office-365-empty-a-style-issue/</guid>
        
        
        <category>email-client-tricks</category>
        
      </item>
    
      <item>
        <title>Double Head trick in Yahoo Mail App for Android</title>
        <description>&lt;h3 id=&quot;do-you-style-in-the-head-or-in-the-body&quot;&gt;Do you style in the head or in the body?&lt;/h3&gt;

&lt;p&gt;If you want high compatibility you probably &lt;strong&gt;inline your main styles&lt;/strong&gt;, otherwise Libero.it, Mail.ru, Naver, Telstra, T-Online, Terra, Yandex and many other won’t style anything.&lt;/p&gt;

&lt;p&gt;But, you may also have &lt;strong&gt;other styles&lt;/strong&gt; that are not inlined and you want them to be displayed by smart email clients.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In past&lt;/strong&gt; the best solution was to put the &lt;strong&gt;style declaration inside the body&lt;/strong&gt;, but you know that &lt;strong&gt;since Oct 2016 &lt;a href=&quot;https://emails.hteumeuleu.com/troubleshooting-gmails-responsive-design-support-ad124178bf81&quot;&gt;Gmail introduced partial styles support&lt;/a&gt;&lt;/strong&gt; and they only use them &lt;strong&gt;if they are declared in the HEAD&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;so-the-new-rule-is-to-put-them-in-the-head&quot;&gt;So, the “new” rule is to put them in the HEAD.&lt;/h3&gt;

&lt;p&gt;Then you find out that &lt;strong&gt;Yahoo App for Android doesn’t show your styles anymore&lt;/strong&gt; because it will simply &lt;strong&gt;strip any style from the HEAD&lt;/strong&gt; (why? who knows.)
You won’t find many informations about Yahoo App rendering, the only reference I found is &lt;a href=&quot;http://freshinbox.com/blog/yahoo-mail-fixes-media-query-bug-yahoo/&quot;&gt;here&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;FreshInbox(*) in that article documented that &lt;strong&gt;Yahoo Mail App for Android supports only styles declared in the BODY&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So, what to do? Insert the whole style declaration twice? Drop support for Yahoo Mail App for Android?&lt;/p&gt;

&lt;h3 id=&quot;now-here-is-a-little-trick&quot;&gt;Now, here is a little trick&lt;/h3&gt;

&lt;p&gt;…enabling styles for Yahoo Mail App for Android and Gmail &lt;strong&gt;without the need to duplicate them&lt;/strong&gt; (and doesn’t break other clients, AFAIK).&lt;/p&gt;

&lt;p&gt;Simply use a &lt;strong&gt;“double head”&lt;/strong&gt;, by addin an empty &amp;lt;head&amp;gt;&amp;lt;/head&amp;gt; before your real &amp;lt;head&amp;gt;. Yahoo App for Android will strip that first head and leave your second head in place.&lt;/p&gt;

&lt;p&gt;From our tests, both manual and via &lt;a href=&quot;https://www.emailonacid.com/app/acidtest/display/summary/XXx90sBT39lxfyOiuLklevpce3VhmBA7yIlDIDhtunRUz/shared&quot;&gt;Email On Acid&lt;/a&gt;, this works everywhere.&lt;/p&gt;

&lt;p&gt;I tried adding styles to both “heads” and clients supporting non-inline styles will see both of them, but GMX.de and Web.de (and of course Yahoo App for Android) that will only see the second HEAD styles (the ones we care).&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;&lt;span class=&quot;c&quot;&gt;&amp;lt;!-- Yahoo App Android will strip this --&amp;gt;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;meta&lt;/span&gt; &lt;span class=&quot;err&quot;&gt;...&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;your&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;styles&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    your content
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Disclaimer&lt;/em&gt;: using 2 head tags makes your HTML “malformed”. Do you care? Also using the style tag in the body was invalid.&lt;/p&gt;

&lt;p&gt;(*) &lt;strong&gt;Remember&lt;/strong&gt;: the best single page resource for updated email rendering issues in 2017 is &lt;strong&gt;&lt;a href=&quot;http://freshinbox.com/resources/css.php&quot;&gt;FreshInbox&lt;/a&gt;&lt;/strong&gt;. Most of other pages around are simply outdated and keeps telling you to use uppercase Margin or [class] selectors. Don’t be confused by the “kinetic” titles, &lt;em&gt;it is a great resource even if you don’t care about kinetic emails&lt;/em&gt;.&lt;/p&gt;
</description>
        <pubDate>Thu, 20 Apr 2017 17:57:21 +0000</pubDate>
        <link>https://mosaico.io/email-client-tricks/double-head-trick-yahoo-app-android/</link>
        <guid isPermaLink="true">https://mosaico.io/email-client-tricks/double-head-trick-yahoo-app-android/</guid>
        
        
        <category>email-client-tricks</category>
        
      </item>
    
      <item>
        <title>Mailtrain - self hosted newsletter app - now includes Mosaico Email Editor</title>
        <description>&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://mailtrain.org&quot;&gt;Mailtrain&lt;/a&gt;&lt;/strong&gt; defines itself as &lt;em&gt;“Self Hosted Newsletter App Built on Top of Nodemailer”&lt;/em&gt;: it’s an open source project, born in 2016, meant to be an alternative to &lt;strong&gt;commercial ESP&lt;/strong&gt; to who prefer a &lt;strong&gt;self hosted service&lt;/strong&gt;, with complete control on the software beneath.
&lt;img src=&quot;/assets/images/mailtrain.png&quot; alt=&quot;Mailtrain and Mosaico!&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Mailtrain has grown a lot in the past year, and has a fairly huge fanbase (&lt;strong&gt;over 1.300 stars on GitHub&lt;/strong&gt;): its ambitious roadmap includes not only the basic newsletter send features (&lt;em&gt;list management, custom fields, list segmentation, bounce analysis&lt;/em&gt;…) but also a number of advanced tools, like &lt;strong&gt;RSS campaigns, GPG Encryption, Automation&lt;/strong&gt;.
&lt;!--more--&gt;&lt;/p&gt;

&lt;p&gt;As soon as the project launched we suggested to &lt;strong&gt;&lt;a href=&quot;https://github.com/andris9&quot;&gt;Andris Reinman&lt;/a&gt;&lt;/strong&gt;, the creator of &lt;strong&gt;Mailtrain&lt;/strong&gt;, that Mosaico was a &lt;em&gt;perfect match&lt;/em&gt; for MailTrain and Andris put Mosaico as &lt;em&gt;possible integration&lt;/em&gt; in official Mailtrain roadmap published on &lt;strong&gt;8 April 2016&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;An year later &lt;strong&gt;&lt;a href=&quot;https://github.com/witzig&quot;&gt;Roger Witzig&lt;/a&gt;&lt;/strong&gt; contributed &lt;a href=&quot;https://github.com/Mailtrain-org/mailtrain/pull/167&quot;&gt;the code&lt;/a&gt; to let Mailtrain support external email editing tools and added support for both &lt;strong&gt;Mosaico editor&lt;/strong&gt; and the wonderful &lt;a href=&quot;http://grapesjs.com/demo-newsletter-editor.html&quot;&gt;GrapesJS&lt;/a&gt;(*) editor inside Mailtrain.&lt;/p&gt;

&lt;p&gt;A few days ago we received the Mailtrain Announcement newsletter and, guess what? it was &lt;strong&gt;beautiful&lt;/strong&gt;, fully &lt;strong&gt;responsive&lt;/strong&gt;, sent by Mailtrain itself and…. &lt;strong&gt;designed with Mosaico&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mailtrain&lt;/strong&gt; is a young project, but is growing fast so we are happy and proud to be part of this project. Starting from &lt;a href=&quot;https://github.com/Mailtrain-org/mailtrain/releases/tag/v1.23.0&quot;&gt;v1.23.0&lt;/a&gt; release it includes Mosaico: test it and let us know what’s your opinion.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(*) before you get too excited for GrapesJS as an email editor we suggest to read a &lt;a href=&quot;https://github.com/Mailtrain-org/mailtrain/issues/10#issuecomment-270751979&quot;&gt;couple&lt;/a&gt; of &lt;a href=&quot;https://github.com/Mailtrain-org/mailtrain/issues/10#issuecomment-270931061&quot;&gt;comments&lt;/a&gt; on why we think GrapesJS is a great web editing tool but not yet ready for the real world email templates requiring dozens of html hacks&lt;/em&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 06 Apr 2017 12:00:00 +0000</pubDate>
        <link>https://mosaico.io/news/mailtrain-includes-mosaico/</link>
        <guid isPermaLink="true">https://mosaico.io/news/mailtrain-includes-mosaico/</guid>
        
        
        <category>news</category>
        
      </item>
    
      <item>
        <title>Fab4 responsive technique: stability and usefulness beyond Gmail</title>
        <description>&lt;p&gt;&lt;strong&gt;Responsive Emails&lt;/strong&gt; has been a trending topic in Email Marketing since last five years.
Today most emails are read on mobile devices, so responsiveness is a must, but many email clients and webmails have a really &lt;strong&gt;limited support of media query&lt;/strong&gt;, the main css way to make responsive html layout.&lt;/p&gt;

&lt;h3 id=&quot;previously&quot;&gt;Previously…&lt;/h3&gt;

&lt;p&gt;Until Sept 2016 (&lt;em&gt;when Gmail started supporting non-inline styles and media queries&lt;/em&gt;), the most problematic clients were &lt;strong&gt;Outlook and Gmail (both web and app)&lt;/strong&gt;; to overcome these problems many techniques have been developed - mainly &lt;strong&gt;table based layouts with conditional comments&lt;/strong&gt; to satisfy Outlook a lot of &lt;strong&gt;inlined CSS&lt;/strong&gt; to make Gmail happy.&lt;/p&gt;

&lt;p&gt;Someone started to use &lt;strong&gt;mobile-first templates&lt;/strong&gt;, letting media queries manage the desktop version - where it was possible.&lt;/p&gt;

&lt;p&gt;Then &lt;strong&gt;Hybrid Coding / Spongy&lt;/strong&gt; technique emerged: a mix of well balanced inline styles, with &lt;strong&gt;min-width/max-with and width tricks&lt;/strong&gt;, letting also Gmail have its proper &lt;strong&gt;adaptive version&lt;/strong&gt; even if not fully responsive.&lt;/p&gt;

&lt;p&gt;Hybrid coding has been adopted by many email templates (also &lt;strong&gt;Versafix-1 Mosaico Template&lt;/strong&gt; use it) even if the rendering of responsive version in Gmail was not perfect.&lt;/p&gt;

&lt;h3 id=&quot;a-different-approach&quot;&gt;A different approach&lt;/h3&gt;

&lt;p&gt;A new technique emerged early in 2016, called the &lt;a href=&quot;https://medium.freecodecamp.com/the-fab-four-technique-to-create-responsive-emails-without-media-queries-baf11fdfa848&quot;&gt;Fab4&lt;/a&gt;, mixing the width, min-width, max-width (all already used in hybrid coding) with a &lt;strong&gt;CSS calc()&lt;/strong&gt; trick.&lt;/p&gt;

&lt;p&gt;Fab4 has a completely different approach: &lt;strong&gt;no table based layout&lt;/strong&gt; - all inline-block divs - and &lt;strong&gt;a calc() based breakpoint&lt;/strong&gt;, based on the parent width instead of media queries.&lt;/p&gt;

&lt;h3 id=&quot;fab4-code&quot;&gt;Fab4 code&lt;/h3&gt;

&lt;p&gt;The basic is (to be inlined):&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.block {
    display:inline-block;
    min-width:50%;
    max-width:100%;
    width:calc((480px — 100%) * 480);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In this brief example &lt;strong&gt;480px is the brackpoint&lt;/strong&gt;: if parent width is under 480px the calc-computed .block width will be over the max-with of 100%, so the div will limit its width to the &lt;strong&gt;max-width value&lt;/strong&gt;, occupying the whole space, making multiple .block stack in a single column.&lt;/p&gt;

&lt;p&gt;If the parent width is over 480px, then the calculated width will be a negative number, so the box will shrink to the &lt;strong&gt;min-width of 50%&lt;/strong&gt;, and the .block will be arranged into a two columns layout.&lt;/p&gt;

&lt;p&gt;The method is really smart but has 2 big limits:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;calc is not supported by all clients&lt;/li&gt;
  &lt;li&gt;many webmails may strip down parenthesis or the whole calc property value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the record the final version proposed in the original article is:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;.block {
    display:inline-block;
    min-width:240px;
    width:50%;
    max-width:100%;
    min-width:-webkit-calc(50%);
    min-width:calc(50%);
    width:-webkit-calc(230400px — 48000%);
    width:calc(230400px — 48000%);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This simply introduces “-webkit-“ prefixed calc so to support older WebKits and does the math in the calc expression because some webmail removes styles with an asterisk or double brakets.&lt;/p&gt;

&lt;p&gt;So, the method proved to be solid and &lt;a href=&quot;https://medium.com/cm-engineering/coding-mobile-first-emails-1513ac4673e#.71ksp78zd&quot;&gt;Campaign Monitor&lt;/a&gt; has rewritten its responsive templates to use this technique - alongside a series of conditional comments table layout bit and other minor tricks to achieve complete Outlook compatibility.&lt;/p&gt;

&lt;h3 id=&quot;but-now-gmail-supports-media-queries&quot;&gt;But now Gmail supports media queries&lt;/h3&gt;

&lt;p&gt;So, is the Fab4 method still useful? &lt;em&gt;Maybe&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;If you look at global shares Gmail was the only email client having a need for the Fab4 method, but if you send to specific non-US markets or you also care for less used email clients then you may still need it.&lt;/p&gt;

&lt;p&gt;Here is a list of local/&lt;strong&gt;regional providers&lt;/strong&gt; that you don’t find in “global stats” but are &lt;strong&gt;big in specific countries&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Russia: Mail.ru, Yandex.ru, Rambler.ru&lt;/li&gt;
  &lt;li&gt;China: QQ.com, 163.com&lt;/li&gt;
  &lt;li&gt;India: Rediffmail.com, Sify.com&lt;/li&gt;
  &lt;li&gt;Germany: Web.de, T-online.de, GMX.de&lt;/li&gt;
  &lt;li&gt;France: Wanadoo.fr, Orange.fr, Free.fr, SFR.fr&lt;/li&gt;
  &lt;li&gt;Italy: Libero.it, Alice.it, Virgilio.it, Tiscali&lt;/li&gt;
  &lt;li&gt;Brazil: Terra, Uol, Bol&lt;/li&gt;
  &lt;li&gt;Spain: Terra, Teleline&lt;/li&gt;
  &lt;li&gt;Portugal: Sapo, Telepac&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example &lt;strong&gt;in Italy&lt;/strong&gt; (we are italian so we prefer to talk about what we know well) &lt;strong&gt;the 4 “local” providers above generate more than 30% of total email opens&lt;/strong&gt; and &lt;strong&gt;Libero.it&lt;/strong&gt; alone is the first provider with &lt;strong&gt;more users than Gmail&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;So, &lt;strong&gt;it worth testing&lt;/strong&gt; each “method” also &lt;strong&gt;against webmails or mobile apps being relevants for your target&lt;/strong&gt; and not only against the major global providers.&lt;/p&gt;

&lt;p&gt;In our tests we found that &lt;strong&gt;QQ.com, Terra, GMX, Web.de and Yandex&lt;/strong&gt; will show &lt;strong&gt;Fab4 mobile version&lt;/strong&gt;, failing to use whole desktop space, when available. 
On the same webmail systems, &lt;strong&gt;spongy technique (tested with our Versafix-1 template) works well&lt;/strong&gt;, showing full desktop version.
&lt;strong&gt;Orange.fr&lt;/strong&gt; has problem with both tecnique, but slightly minor with Versafix-1/hybrid/spongy; on &lt;strong&gt;Lotus Notes 8.5&lt;/strong&gt; Fab4 fails in bad ways, while &lt;strong&gt;Versafix-1&lt;/strong&gt; looks good.&lt;/p&gt;

&lt;p&gt;By now we know that &lt;strong&gt;Gmail transition&lt;/strong&gt; towards full media query support &lt;strong&gt;is not yet completed&lt;/strong&gt;: &lt;strong&gt;IOS client&lt;/strong&gt; seems to be stuck on “old” Gmail rendering system and also &lt;strong&gt;Gmail webmail mobile version&lt;/strong&gt; is not accepting media query so far.
On both Gmail version (IOS and Webmail mobile) &lt;strong&gt;Fab4 technique works well&lt;/strong&gt;.&lt;/p&gt;

&lt;h3 id=&quot;results&quot;&gt;Results&lt;/h3&gt;
&lt;p&gt;As said before, &lt;strong&gt;Fab 4&lt;/strong&gt; technique is born mainly to go beyond &lt;strong&gt;“old” Gmail limits&lt;/strong&gt;, and give a proper responsive email version also on non media query compatible webmail and clients.&lt;/p&gt;

&lt;p&gt;With brand new &lt;strong&gt;Gmail media query support&lt;/strong&gt; this need seems to be outdated, but so far &lt;strong&gt;transition is still uncomplete&lt;/strong&gt; and there are also &lt;strong&gt;many local webmail that are incompatible with media query&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;To sum up &lt;strong&gt;Fab4 could be a nice option&lt;/strong&gt; if you are mostly &lt;strong&gt;mobile-oriented&lt;/strong&gt;: this method renders &lt;strong&gt;slightly better&lt;/strong&gt; in mobile versions than Spongy/Hybrid technique (not so much, by the way), anyways you have also to consider that &lt;strong&gt;Spongy/Hybrid technique&lt;/strong&gt; seems to react in a &lt;strong&gt;more solid way&lt;/strong&gt; with “problematic” clients and webmails.&lt;/p&gt;
</description>
        <pubDate>Fri, 21 Oct 2016 17:57:21 +0000</pubDate>
        <link>https://mosaico.io/email-client-tricks/fab4-responsive-beyond-gmail/</link>
        <guid isPermaLink="true">https://mosaico.io/email-client-tricks/fab4-responsive-beyond-gmail/</guid>
        
        
        <category>email-client-tricks</category>
        
      </item>
    
  </channel>
</rss>
