├── .gitignore ├── Gemfile ├── Gemfile.lock ├── README.md ├── Rakefile ├── config.rb ├── data └── categories.yml └── source ├── CNAME ├── confirmation.html.erb ├── images ├── context.svg ├── envelope.png ├── envelope.svg ├── favicon.png ├── icons │ ├── icon_10612.svg │ ├── icon_11589.svg │ ├── icon_1171.svg │ ├── icon_1541.svg │ ├── icon_2835.svg │ ├── icon_7231.svg │ └── icon_8541.svg ├── shadow.png ├── source.svg └── support.png ├── index.html.erb ├── javascripts ├── all.js ├── init.js └── plugins │ ├── modernizr.js │ └── prism.js ├── layouts ├── interior.erb ├── layout.erb └── pattern.erb ├── partials ├── footer.html.erb ├── header-home.html.erb └── header.html.erb ├── patterns ├── accordions │ ├── full-to-accordion.html.erb │ └── show-more.html.erb ├── grid-blocks │ ├── double-wide-v1.html.erb │ ├── double-wide-v2.html.erb │ ├── double-wide-v3.html.erb │ └── with-title-sections.html.erb ├── layout │ ├── 2-equal-width-columns-v2.html.erb │ ├── 2-equal-width-columns.html.erb │ ├── 3-equal-width-columns.html.erb │ ├── column-drop.html.erb │ ├── image-surround.html.erb │ ├── layout-shifter.html.erb │ ├── main-column-with-sidebar.html.erb │ ├── shrink-wrap.html.erb │ └── source-order-shift.html.erb ├── lists │ ├── list-with-thumbnails-and-summary-hide.html.erb │ ├── list-with-thumbnails-and-summary-stack.erb │ ├── list-with-thumbnails-v2.erb │ └── list-with-thumbnails.erb ├── media │ ├── basic-fluid-image.html.erb │ ├── connecting-fallback.jpg │ ├── description-overlay-bottom.html.erb │ ├── description-overlay-right.html.erb │ ├── espana_alleyway.jpg │ ├── fluid-video.html.erb │ ├── image-center-crop.html.erb │ ├── image-grid.html.erb │ ├── image-left-crop.html.erb │ ├── image-right-crop.html.erb │ ├── image-vertical-crop.html.erb │ ├── lindsey.jpg │ ├── meat.jpg │ ├── souk.jpg │ ├── spain.jpg │ └── tattoos.jpg └── navigation │ ├── drop-below.html.erb │ ├── footer-anchor.html.erb │ ├── hide-everything.html.erb │ ├── reduce-v2.html.erb │ ├── reduce.html.erb │ ├── stacked-split-links.html.erb │ ├── stacked-top-links-4-up.html.erb │ ├── stacked-top-links.html.erb │ ├── toggle.html │ ├── toggle2.html │ ├── toggle3.html │ └── top-links.html.erb ├── stylesheets ├── Partials │ ├── _branding.scss │ ├── _footer.scss │ ├── _forms.scss │ ├── _grid.scss │ ├── _header.scss │ ├── _pattern.scss │ ├── _support.scss │ └── _utilities.scss ├── all.css.scss └── prism.css ├── submit-pattern.html.erb └── support.html.erb /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore all logfiles and tempfiles. 2 | /log/*.log 3 | /tmp 4 | .sass-cache 5 | .cache 6 | .bundle 7 | *.DS_Store -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # If you have OpenSSL installed, we recommend updating 2 | # the following line to use "https" 3 | source 'http://rubygems.org' 4 | 5 | gem "middleman" 6 | gem "compass-normalize" 7 | gem 'middleman-gh-pages' 8 | 9 | require 'rbconfig' -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: http://rubygems.org/ 3 | specs: 4 | activesupport (4.0.4) 5 | i18n (~> 0.6, >= 0.6.9) 6 | minitest (~> 4.2) 7 | multi_json (~> 1.3) 8 | thread_safe (~> 0.1) 9 | tzinfo (~> 0.3.37) 10 | chunky_png (1.3.0) 11 | coffee-script (2.2.0) 12 | coffee-script-source 13 | execjs 14 | coffee-script-source (1.7.0) 15 | compass (0.12.5) 16 | chunky_png (~> 1.2) 17 | fssm (>= 0.2.7) 18 | sass (~> 3.2.19) 19 | compass-import-once (1.0.4) 20 | sass (>= 3.2, < 3.5) 21 | compass-normalize (1.5) 22 | compass (>= 0.12.0) 23 | erubis (2.7.0) 24 | execjs (2.0.2) 25 | ffi (1.9.3) 26 | fssm (0.2.10) 27 | haml (4.0.5) 28 | tilt 29 | hike (1.2.3) 30 | hooks (0.4.0) 31 | uber (~> 0.0.4) 32 | i18n (0.6.9) 33 | json (1.8.1) 34 | kramdown (1.3.3) 35 | listen (1.3.1) 36 | rb-fsevent (>= 0.9.3) 37 | rb-inotify (>= 0.9) 38 | rb-kqueue (>= 0.2) 39 | middleman (3.3.1) 40 | coffee-script (~> 2.2.0) 41 | compass (>= 0.12.4) 42 | compass-import-once (~> 1.0.4) 43 | execjs (~> 2.0) 44 | haml (>= 4.0.5) 45 | kramdown (~> 1.2) 46 | middleman-core (= 3.3.1) 47 | middleman-sprockets (>= 3.1.2) 48 | sass (>= 3.2.17, < 4.0) 49 | uglifier (~> 2.5) 50 | middleman-core (3.3.1) 51 | activesupport (~> 4.0.1) 52 | bundler (~> 1.1) 53 | erubis 54 | hooks (~> 0.3) 55 | i18n (~> 0.6.9) 56 | listen (~> 1.1) 57 | padrino-helpers (~> 0.12.1) 58 | rack (>= 1.4.5, < 2.0) 59 | rack-test (~> 0.6.2) 60 | thor (>= 0.15.2, < 2.0) 61 | tilt (~> 1.4.1, < 2.0) 62 | middleman-gh-pages (0.0.3) 63 | rake (> 0.9.3) 64 | middleman-sprockets (3.3.2) 65 | middleman-core (>= 3.2) 66 | sprockets (~> 2.2) 67 | sprockets-helpers (~> 1.1.0) 68 | sprockets-sass (~> 1.0.0) 69 | minitest (4.7.5) 70 | multi_json (1.9.2) 71 | padrino-helpers (0.12.1) 72 | i18n (~> 0.6, >= 0.6.7) 73 | padrino-support (= 0.12.1) 74 | tilt (~> 1.4.1) 75 | padrino-support (0.12.1) 76 | activesupport (>= 3.1) 77 | rack (1.5.2) 78 | rack-test (0.6.2) 79 | rack (>= 1.0) 80 | rake (10.3.0) 81 | rb-fsevent (0.9.4) 82 | rb-inotify (0.9.3) 83 | ffi (>= 0.5.0) 84 | rb-kqueue (0.2.2) 85 | ffi (>= 0.5.0) 86 | sass (3.2.19) 87 | sprockets (2.12.0) 88 | hike (~> 1.2) 89 | multi_json (~> 1.0) 90 | rack (~> 1.0) 91 | tilt (~> 1.1, != 1.3.0) 92 | sprockets-helpers (1.1.0) 93 | sprockets (~> 2.0) 94 | sprockets-sass (1.0.3) 95 | sprockets (~> 2.0) 96 | tilt (~> 1.1) 97 | thor (0.19.1) 98 | thread_safe (0.3.2) 99 | tilt (1.4.1) 100 | tzinfo (0.3.39) 101 | uber (0.0.4) 102 | uglifier (2.5.0) 103 | execjs (>= 0.3.0) 104 | json (>= 1.8.0) 105 | 106 | PLATFORMS 107 | ruby 108 | 109 | DEPENDENCIES 110 | compass-normalize 111 | middleman 112 | middleman-gh-pages 113 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Responsive Email Patterns 2 | ======================= 3 | 4 | A collection of patterns and modules for responsive emails. 5 | Responsive Email Patterns Website 6 | 7 | Based on Brad Frost's 'This is Responsive' Responsive Patterns. 8 | 9 | ## Layout 10 | 21 | 22 | ## Navigation 23 | 34 | 35 | ## Lists 36 | 42 | 43 | ## Grid Blocks 44 | 50 | 51 | ## Media 52 | 62 | 63 | ## Accordion 64 | 68 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | require 'middleman-gh-pages' -------------------------------------------------------------------------------- /config.rb: -------------------------------------------------------------------------------- 1 | require 'compass-normalize' 2 | 3 | set :css_dir, 'stylesheets' 4 | set :js_dir, 'javascripts' 5 | set :images_dir, 'images' 6 | page "patterns/*", :layout => :pattern 7 | 8 | # Build-specific configuration 9 | configure :build do 10 | activate :minify_css 11 | activate :minify_javascript 12 | activate :relative_assets 13 | end -------------------------------------------------------------------------------- /data/categories.yml: -------------------------------------------------------------------------------- 1 | - name: Layout 2 | id: layout 3 | patterns: 4 | - name: "Column Drop" 5 | id: "column-drop" 6 | - name: "2 Equal-Width Columns" 7 | id: "2-equal-width-columns" 8 | - name: "2 Equal-Width Columns v2" 9 | id: "2-equal-width-columns-v2" 10 | - name: "3 Equal-Width Columns" 11 | id: "3-equal-width-columns" 12 | - name: "Shrink Wrap" 13 | id: "shrink-wrap" 14 | - name: "Main Column w/ Sidebar" 15 | id: "main-column-with-sidebar" 16 | - name: "Image Surround" 17 | id: "image-surround" 18 | - name: "Layout Shifter" 19 | id: "layout-shifter" 20 | - name: "Source Order Shift" 21 | id: "source-order-shift" 22 | 23 | - name: Navigation 24 | id: navigation 25 | patterns: 26 | - name: "Top Links" 27 | id: "top-links" 28 | - name: "Stacked Split Links" 29 | id: "stacked-split-links" 30 | - name: "Drop Below" 31 | id: "drop-below" 32 | - name: "Footer Anchor" 33 | id: "footer-anchor" 34 | - name: "Reduce" 35 | id: "reduce" 36 | - name: "Reduce v2" 37 | id: "reduce-v2" 38 | - name: "Hide Everything" 39 | id: "hide-everything" 40 | - name: "Stacked Top Links" 41 | id: "stacked-top-links" 42 | - name: "Stacked Top Links 4-Up" 43 | id: "stacked-top-links-4-up" 44 | 45 | - name: Lists 46 | id: lists 47 | patterns: 48 | - name: "List w/ Thumbnails" 49 | id: "list-with-thumbnails" 50 | - name: "List w/ Thumbnails v2" 51 | id: "list-with-thumbnails-v2" 52 | - name: "List w/ Thumbnails & Summary Stack" 53 | id: "list-with-thumbnails-and-summary-stack" 54 | - name: "List w/ Thumbnails & Summary Hide" 55 | id: "list-with-thumbnails-and-summary-hide" 56 | 57 | - name: Grid Blocks 58 | id: grid-blocks 59 | patterns: 60 | - name: "With Title Sections" 61 | id: "with-title-sections" 62 | - name: "Double Wide v1" 63 | id: "double-wide-v1" 64 | - name: "Double Wide v2" 65 | id: "double-wide-v2" 66 | - name: "Double Wide v3" 67 | id: "double-wide-v3" 68 | 69 | - name: Media 70 | id: media 71 | patterns: 72 | - name: "Basic Fluid Image" 73 | id: "basic-fluid-image" 74 | - name: "Image Center Crop" 75 | id: "image-center-crop" 76 | - name: "Image Vertical Crop" 77 | id: "image-vertical-crop" 78 | - name: "Image Right Crop" 79 | id: "image-right-crop" 80 | - name: "Image Left Crop" 81 | id: "image-left-crop" 82 | - name: "Description Overlay Bottom" 83 | id: "description-overlay-bottom" 84 | - name: "Image Grid" 85 | id: "image-grid" 86 | - name: "Fluid Video" 87 | id: "fluid-video" 88 | 89 | - name: Accordions 90 | id: accordions 91 | patterns: 92 | - name: "Show More" 93 | id: "show-more" 94 | - name: "Full to Accordion" 95 | id: "full-to-accordion" 96 | -------------------------------------------------------------------------------- /source/CNAME: -------------------------------------------------------------------------------- 1 | responsiveemailpatterns.com -------------------------------------------------------------------------------- /source/confirmation.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: interior 4 | buttons: false 5 | --- 6 | 7 |
8 |

Thanks for submitting your Pattern!

9 |
10 | Submit Another Pattern 11 |
12 |
-------------------------------------------------------------------------------- /source/images/context.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /source/images/envelope.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/images/envelope.png -------------------------------------------------------------------------------- /source/images/envelope.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | ]> 6 | 10 | 11 | 12 | 17 | 18 | -------------------------------------------------------------------------------- /source/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/images/favicon.png -------------------------------------------------------------------------------- /source/images/icons/icon_10612.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /source/images/icons/icon_11589.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /source/images/icons/icon_1171.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | </> 9 | -------------------------------------------------------------------------------- /source/images/icons/icon_1541.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /source/images/icons/icon_2835.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /source/images/icons/icon_7231.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /source/images/icons/icon_8541.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /source/images/shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/images/shadow.png -------------------------------------------------------------------------------- /source/images/source.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 9 | 11 | 13 | 14 | </> 15 | 16 | -------------------------------------------------------------------------------- /source/images/support.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/images/support.png -------------------------------------------------------------------------------- /source/index.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | desc: "A collection of patterns & modules for responsive emails" 4 | submit: true 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /source/javascripts/all.js: -------------------------------------------------------------------------------- 1 | 2 | (function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=self.Prism={util:{type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var n=t.util.type(e);switch(n){case"Object":var r={};for(var i in e)e.hasOwnProperty(i)&&(r[i]=t.util.clone(e[i]));return r;case"Array":return e.slice()}return e}},languages:{extend:function(e,n){var r=t.util.clone(t.languages[e]);for(var i in n)r[i]=n[i];return r},insertBefore:function(e,n,r,i){i=i||t.languages;var s=i[e],o={};for(var u in s)if(s.hasOwnProperty(u)){if(u==n)for(var a in r)r.hasOwnProperty(a)&&(o[a]=r[a]);o[u]=s[u]}return i[e]=o},DFS:function(e,n){for(var r in e){n.call(e,r,e[r]);t.util.type(e)==="Object"&&t.languages.DFS(e[r],n)}}},highlightAll:function(e,n){var r=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code');for(var i=0,s;s=r[i++];)t.highlightElement(s,e===!0,n)},highlightElement:function(r,i,s){var o,u,a=r;while(a&&!e.test(a.className))a=a.parentNode;if(a){o=(a.className.match(e)||[,""])[1];u=t.languages[o]}if(!u)return;r.className=r.className.replace(e,"").replace(/\s+/g," ")+" language-"+o;a=r.parentNode;/pre/i.test(a.nodeName)&&(a.className=a.className.replace(e,"").replace(/\s+/g," ")+" language-"+o);var f=r.textContent;if(!f)return;f=f.replace(/&/g,"&").replace(/e.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; 3 | Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; 4 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; 5 | Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g}; 6 | ; 7 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|get|set|new|with|typeof|try|throw|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}});; 8 | 9 | 10 | $(document).ready(function(){ 11 | var Str = $('code.language-markup').text(); 12 | var trimStr = $.trim(Str); 13 | $('code.language-markup').text(trimStr); 14 | 15 | $('#context').click(function(e) { 16 | e.preventDefault(); 17 | $(this).toggleClass('active'); 18 | $('.pattern-header, .pattern-footer').toggleClass('active'); 19 | }); 20 | 21 | $('#source').click(function(e) { 22 | e.preventDefault(); 23 | $('#patternSource').slideToggle(); 24 | }); 25 | }); -------------------------------------------------------------------------------- /source/javascripts/init.js: -------------------------------------------------------------------------------- 1 | Modernizr.load([ 2 | { 3 | test : Modernizr.mq('only all'), 4 | nope : 'http://cdnjs.cloudflare.com/ajax/libs/respond.js/1.1.0/respond.min.js' 5 | } 6 | ]); -------------------------------------------------------------------------------- /source/javascripts/plugins/modernizr.js: -------------------------------------------------------------------------------- 1 | /* Modernizr 2.6.2 (Custom Build) | MIT & BSD 2 | * Build: http://modernizr.com/download/#-shiv-mq-cssclasses-teststyles-load 3 | */ 4 | ;window.Modernizr=function(a,b,c){function w(a){j.cssText=a}function x(a,b){return w(prefixes.join(a+";")+(b||""))}function y(a,b){return typeof a===b}function z(a,b){return!!~(""+a).indexOf(b)}function A(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:y(f,"function")?f.bind(d||b):f}return!1}var d="2.6.2",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k,l={}.toString,m={},n={},o={},p=[],q=p.slice,r,s=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["­",'"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},t=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return s("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},u={}.hasOwnProperty,v;!y(u,"undefined")&&!y(u.call,"undefined")?v=function(a,b){return u.call(a,b)}:v=function(a,b){return b in a&&y(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=q.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(q.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(q.call(arguments)))};return e});for(var B in m)v(m,B)&&(r=B.toLowerCase(),e[r]=m[B](),p.push((e[r]?"":"no-")+r));return e.addTest=function(a,b){if(typeof a=="object")for(var d in a)v(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},w(""),i=k=null,function(a,b){function k(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x",d.insertBefore(c.lastChild,d.firstChild)}function l(){var a=r.elements;return typeof a=="string"?a.split(" "):a}function m(a){var b=i[a[g]];return b||(b={},h++,a[g]=h,i[h]=b),b}function n(a,c,f){c||(c=b);if(j)return c.createElement(a);f||(f=m(c));var g;return f.cache[a]?g=f.cache[a].cloneNode():e.test(a)?g=(f.cache[a]=f.createElem(a)).cloneNode():g=f.createElem(a),g.canHaveChildren&&!d.test(a)?f.frag.appendChild(g):g}function o(a,c){a||(a=b);if(j)return a.createDocumentFragment();c=c||m(a);var d=c.frag.cloneNode(),e=0,f=l(),g=f.length;for(;e",f="hidden"in a,j=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){f=!0,j=!0}})();var r={elements:c.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",shivCSS:c.shivCSS!==!1,supportsUnknownElements:j,shivMethods:c.shivMethods!==!1,type:"default",shivDocument:q,createElement:n,createDocumentFragment:o};a.html5=r,q(b)}(this,b),e._version=d,e.mq=t,e.testStyles=s,g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+p.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;fe.length)break e;if(p instanceof i)continue;a.lastIndex=0;var d=a.exec(p);if(d){l&&(c=d[1].length);var v=d.index-1+c,d=d[0].slice(c),m=d.length,g=v+m,y=p.slice(0,v+1),b=p.slice(g+1),w=[h,1];y&&w.push(y);var E=new i(u,f?t.tokenize(d,f):d);w.push(E);b&&w.push(b);Array.prototype.splice.apply(s,w)}}}return s},hooks:{all:{},add:function(e,n){var r=t.hooks.all;r[e]=r[e]||[];r[e].push(n)},run:function(e,n){var r=t.hooks.all[e];if(!r||!r.length)return;for(var i=0,s;s=r[i++];)s(n)}}},n=t.Token=function(e,t){this.type=e;this.content=t};n.stringify=function(e,r,i){if(typeof e=="string")return e;if(Object.prototype.toString.call(e)=="[object Array]")return e.map(function(t){return n.stringify(t,r,e)}).join("");var s={type:e.type,content:n.stringify(e.content,r,i),tag:"span",classes:["token",e.type],attributes:{},language:r,parent:i};s.type=="comment"&&(s.attributes.spellcheck="true");t.hooks.run("wrap",s);var o="";for(var u in s.attributes)o+=u+'="'+(s.attributes[u]||"")+'"';return"<"+s.tag+' class="'+s.classes.join(" ")+'" '+o+">"+s.content+""};if(!self.document){self.addEventListener("message",function(e){var n=JSON.parse(e.data),r=n.language,i=n.code;self.postMessage(JSON.stringify(t.tokenize(i,t.languages[r])));self.close()},!1);return}var r=document.getElementsByTagName("script");r=r[r.length-1];if(r){t.filename=r.src;document.addEventListener&&!r.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)}})();; 6 | Prism.languages.markup={comment:/<!--[\w\W]*?-->/g,prolog:/<\?.+?\?>/,doctype:/<!DOCTYPE.+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|\w+))?\s*)*\/?>/gi,inside:{tag:{pattern:/^<\/?[\w:-]+/i,inside:{punctuation:/^<\/?/,namespace:/^[\w-]+?:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/gi,inside:{punctuation:/=|>|"/g}},punctuation:/\/?>/g,"attr-name":{pattern:/[\w:-]+/g,inside:{namespace:/^[\w-]+?:/}}}},entity:/&#?[\da-z]{1,8};/gi};Prism.hooks.add("wrap",function(e){e.type==="entity"&&(e.attributes.title=e.content.replace(/&/,"&"))});; 7 | Prism.languages.css={comment:/\/\*[\w\W]*?\*\//g,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*{))/gi,inside:{punctuation:/[;:]/g}},url:/url\((["']?).*?\1\)/gi,selector:/[^\{\}\s][^\{\};]*(?=\s*\{)/g,property:/(\b|\B)[\w-]+(?=\s*:)/ig,string:/("|')(\\?.)*?\1/g,important:/\B!important\b/gi,ignore:/&(lt|gt|amp);/gi,punctuation:/[\{\};:]/g};Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<|<)style[\w\W]*?(>|>)[\w\W]*?(<|<)\/style(>|>)/ig,inside:{tag:{pattern:/(<|<)style[\w\W]*?(>|>)|(<|<)\/style(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.css}}});; 8 | Prism.languages.clike={comment:{pattern:/(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])\/\/.*?(\r?\n|$))/g,lookbehind:!0},string:/("|')(\\?.)*?\1/g,"class-name":{pattern:/((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/ig,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/g,"boolean":/\b(true|false)\b/g,"function":{pattern:/[a-z0-9_]+\(/ig,inside:{punctuation:/\(/}}, number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/g,operator:/[-+]{1,2}|!|<=?|>=?|={1,3}|(&){1,2}|\|?\||\?|\*|\/|\~|\^|\%/g,ignore:/&(lt|gt|amp);/gi,punctuation:/[{}[\];(),.:]/g}; 9 | ; 10 | Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(var|let|if|else|while|do|for|return|in|instanceof|function|get|set|new|with|typeof|try|throw|catch|finally|null|break|continue)\b/g,number:/\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?|NaN|-?Infinity)\b/g});Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/g,lookbehind:!0}});Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<|<)script[\w\W]*?(>|>)[\w\W]*?(<|<)\/script(>|>)/ig,inside:{tag:{pattern:/(<|<)script[\w\W]*?(>|>)|(<|<)\/script(>|>)/ig,inside:Prism.languages.markup.tag.inside},rest:Prism.languages.javascript}}});; 11 | -------------------------------------------------------------------------------- /source/layouts/interior.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | <%= data.page.title || "Responsive Email Patterns" %> 12 | 13 | <%= stylesheet_link_tag "all" %> 14 | <%= javascript_include_tag "plugins/modernizr","init" %> 15 | 16 | 17 | 18 | <%= partial "partials/header" %> 19 | 20 |
21 |
22 | <%= yield %> 23 |
24 |
25 | 26 | <%= partial "partials/footer" %> 27 | 28 | 29 | <%= javascript_include_tag "all" %> 30 | 31 | 32 | -------------------------------------------------------------------------------- /source/layouts/layout.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | <%= data.page.title || "Responsive Email Patterns" %> 12 | 13 | <%= stylesheet_link_tag "all" %> 14 | <%= javascript_include_tag "plugins/modernizr","init" %> 15 | 16 | 17 | 18 | <%= partial "partials/header-home" %> 19 | 20 |
21 |
22 | <%= yield %> 23 |
24 |
25 | 26 | <%= partial "partials/footer" %> 27 | 28 | 29 | <%= javascript_include_tag "all" %> 30 | 31 | 32 | -------------------------------------------------------------------------------- /source/layouts/pattern.erb: -------------------------------------------------------------------------------- 1 | <% wrap_layout :interior do %> 2 |
3 |
type-navigation<% end %>"> 4 | 7 |
8 | <% 5.times do %> 9 | Navigation Item 10 | <% end %> 11 |
12 |
13 | 14 | 15 | <% content_for :source do %> 16 | <%= yield %> 17 | <% end %> 18 | 19 | <%= yield_content :source %> 20 | 21 | 28 |
29 | 30 |
31 |

<%= current_page.data.pattern_name %>

32 |

<%= current_page.data.pattern_desc %>

33 |
34 | 35 |
36 |
37 |             
38 |                 <%= escape_html(yield_content :source) %>
39 |             
40 |         
41 |
42 | <% end %> 43 | -------------------------------------------------------------------------------- /source/partials/footer.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | name: Footer 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /source/partials/header-home.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | name: Header Home 3 | --- 4 | 5 |
6 | 7 | 8 | 9 |

<%= data.page.title || "Responsive Email Patterns" %>

10 |

<%= data.page.desc %>

11 | 12 | <% if data.page.submit == true %> 13 | Submit A Pattern 14 | <% end %> 15 |
-------------------------------------------------------------------------------- /source/partials/header.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | name: Interior Header 3 | --- 4 | 5 |
6 |
7 | 11 | 12 | <% if data.page.layout == "pattern" %> 13 | 17 | 18 | 19 |

Context

20 |
21 | <% end %> 22 | 23 |
24 |
-------------------------------------------------------------------------------- /source/patterns/accordions/full-to-accordion.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Full To Accordion" 5 | pattern_desc: "A container is used to truncate description text based on screen size. Once text has been truncated, a cta is used to allow for the truncated content to be viewed on request in accordion like approach." 6 | --- 7 | 8 | 37 | 38 | 39 | 40 | 47 | 48 | 49 | 56 | 57 | 58 | 65 | 66 |
41 |

Story 1

42 |

43 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 44 |

45 | 46 |
50 |

Story 2

51 |

52 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 53 |

54 | 55 |
59 |

Story 3

60 |

61 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 62 |

63 | 64 |
-------------------------------------------------------------------------------- /source/patterns/accordions/show-more.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Show More" 5 | pattern_desc: "A container is used to truncate text based on screen size. Once text has been truncated, a cta is used to allow for the truncated content to be viewed on request." 6 | --- 7 | 8 | 59 | 60 | 61 | 62 | 69 | 70 | 71 | 78 | 79 | 80 | 87 | 88 |
63 |

Story 1

64 |

65 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 66 |

67 | 68 |
72 |

Story 2

73 |

74 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 75 |

76 | 77 |
81 |

Story 3

82 |

83 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 84 |

85 | 86 |
-------------------------------------------------------------------------------- /source/patterns/grid-blocks/double-wide-v1.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Double Wide v1" 5 | pattern_desc: "A grid block that reflows as appropriate as the screen size shrinks." 6 | --- 7 | 8 | 39 | 40 | 41 | 42 | 120 | 121 |
43 | 44 | 45 | 64 | 65 | 66 | 79 | 80 | 81 | 102 | 103 | 104 | 117 | 118 |
46 | 47 | 50 | 51 | 54 | 55 | 58 | 59 | 62 |
48 | 1 49 |   52 | 2 53 |   56 | 3 57 |   60 | 4 61 |
63 |
67 | 68 | 69 | 72 | 73 | 76 | 77 |
70 | 5 71 |   74 | 6 75 |
78 |
82 | 83 | 84 | 87 | 88 | 91 | 92 | 95 | 96 | 99 | 100 |
85 | 7 86 |   89 | 8 90 |   93 | 9 94 |   97 | 10 98 |
101 |
105 | 106 | 107 | 110 | 111 | 114 | 115 |
108 | 11 109 |   112 | 12 113 |
116 |
119 |
-------------------------------------------------------------------------------- /source/patterns/grid-blocks/double-wide-v2.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Double Wide v2" 5 | pattern_desc: "A grid block that reflows as appropriate as the screen size shrinks." 6 | --- 7 | 8 | 39 | 40 | 41 | 42 | 122 | 123 |
43 | 44 | 45 | 62 | 63 | 64 | 81 | 82 | 83 | 100 | 101 | 102 | 119 | 120 |
46 | 47 | 48 | 51 | 52 | 55 | 56 | 59 | 60 |
49 | 1 50 |   53 | 2 54 |   57 | 3 58 |
61 |
65 | 66 | 67 | 70 | 71 | 74 | 75 | 78 | 79 |
68 | 4 69 |   72 | 5 73 |   76 | 6 77 |
80 |
84 | 85 | 86 | 89 | 90 | 93 | 94 | 97 | 98 |
87 | 7 88 |   91 | 8 92 |   95 | 9 96 |
99 |
103 | 104 | 105 | 108 | 109 | 112 | 113 | 116 | 117 |
106 | 10 107 |   110 | 11 111 |   114 | 12 115 |
118 |
121 |
-------------------------------------------------------------------------------- /source/patterns/grid-blocks/double-wide-v3.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Double Wide v3" 5 | pattern_desc: "A grid block that reflows as appropriate as the screen size shrinks." 6 | --- 7 | 8 | 45 | 46 | 47 | 48 | 105 | 106 |
49 | 50 | 51 | 68 | 69 | 70 | 83 | 84 | 85 | 102 | 103 |
52 | 53 | 54 | 57 | 58 | 61 | 62 | 65 | 66 |
55 | 1 56 |   59 | 2 60 |   63 | 3 64 |
67 |
71 | 72 | 73 | 76 | 77 | 80 | 81 |
74 | 4 75 |   78 | 5 79 |
82 |
86 | 87 | 88 | 91 | 92 | 95 | 96 | 99 | 100 |
89 | 7 90 |   93 | 8 94 |   97 | 9 98 |
101 |
104 |
-------------------------------------------------------------------------------- /source/patterns/grid-blocks/with-title-sections.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "With Title Sections" 5 | pattern_desc: "A grid block with title that reflows as appropriate as the screen size shrinks." 6 | --- 7 | 8 | 46 | 47 | 48 | <% 3.times do %> 49 | 50 | 77 | 78 | <% end %> 79 |
51 | 52 | 53 | 56 | 57 | 74 | 75 |
54 | Section Title 55 |   58 | 59 | 60 | 63 | 64 | 67 | 68 | 71 | 72 |
61 | 1 62 |   65 | 2 66 |   69 | 3 70 |
73 |
76 |
-------------------------------------------------------------------------------- /source/patterns/layout/2-equal-width-columns-v2.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "2 Equal Width Columns v2" 5 | pattern_desc: "A layout that starts as 2 equal width columns and ends as a single column layout, stacking the left column on top of the right as the screen sizes get narrower." 6 | --- 7 | 26 | 27 | 28 | 29 | 76 | 77 |
30 | 31 | 32 | 52 | 53 | 73 | 74 |
33 | 34 | 35 | 36 | 37 | 38 | 41 | 42 | 43 | 46 | 47 | 48 | 49 | 50 |
39 | This is a story headline 40 |
44 | Virtual computing via the cloud is all the rage these days but blade servers, which make up the bulk of the infrastructure for cloud computing systems, require specific fusing for high reliability and uptime. The Littelfuse 456 Series--- NANO2 Subminature Surface Mount Fuse - is perfect for this. 45 |
Learn More
51 |
  54 | 55 | 56 | 57 | 58 | 59 | 62 | 63 | 64 | 67 | 68 | 69 | 70 | 71 |
60 | This is a story headline 61 |
65 | Virtual computing via the cloud is all the rage these days but blade servers, which make up the bulk of the infrastructure for cloud computing systems, require specific fusing for high reliability and uptime. The Littelfuse 456 Series--- NANO2 Subminature Surface Mount Fuse - is perfect for this. 66 |
Learn More
72 |
75 |
-------------------------------------------------------------------------------- /source/patterns/layout/2-equal-width-columns.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "2 Equal Width Columns" 5 | pattern_desc: "A layout that starts as 2 equal width columns and ends as a single column layout, stacking the left column on top of the right as the screen sizes get narrower." 6 | --- 7 | 8 | 34 | 35 | 36 | 124 | 125 |
37 | 38 | 39 | 79 | 80 | 81 | 121 | 122 |
40 | 41 | 42 | 67 | 76 | 77 |
43 | 44 | 45 | 64 | 65 |
46 | 47 | 48 | 51 | 52 | 53 | 56 | 57 | 58 | 61 | 62 |
49 | This is a Headline 50 |
54 | Neyla of indie band The Lumineers swings by our office to meet her namesake dress! 55 |
59 | Check It Out » 60 |
63 |
66 |
68 | 69 | 70 | 73 | 74 |
71 | 72 |
75 |
78 |
82 | 83 | 84 | 109 | 118 | 119 |
85 | 86 | 87 | 106 | 107 |
88 | 89 | 90 | 93 | 94 | 95 | 98 | 99 | 100 | 103 | 104 |
91 | This is a Headline 92 |
96 | Neyla of indie band The Lumineers swings by our office to meet her namesake dress! 97 |
101 | Check It Out » 102 |
105 |
108 |
110 | 111 | 112 | 115 | 116 |
113 | 114 |
117 |
120 |
123 |
-------------------------------------------------------------------------------- /source/patterns/layout/column-drop.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Column Drop" 5 | pattern_desc: "A multi-column layout that ends up as a single column layout, dropping columns along the way as the screen sizes get narrower." 6 | --- 7 | 19 | 20 | 21 | 27 | 28 | 29 | 35 | 41 | 42 |
22 |

Column 1

23 |

24 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 25 |

26 |
30 |

Column 2

31 |

32 | Nunc tempus felis vitae urna. Vivamus porttitor, neque at volutpat rutrum, purus nisi eleifend libero, a tempus libero lectus feugiat felis. Morbi diam mauris, viverra in, gravida eu, mattis in, ante. Morbi eget arcu. Morbi porta, libero id ullamcorper nonummy, nibh ligula pulvinar metus, eget consectetuer augue nisi quis lacus. Ut ac mi quis lacus mollis aliquam. Curabitur iaculis tempus eros. Curabitur vel mi sit amet magna malesuada ultrices. Ut nisi erat, fermentum vel, congue id, euismod in, elit. Fusce ultricies, orci ac feugiat suscipit, leo massa sodales velit, et scelerisque mi tortor at ipsum. Proin orci odio, commodo ac, gravida non, tristique vel, tellus. Pellentesque nibh libero, ultricies eu, sagittis non, mollis sed, justo. Praesent metus ipsum, pulvinar pulvinar, porta id, fringilla at, est. 33 |

34 |
36 |

Column 3

37 |

38 | Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In posuere felis nec tortor. Pellentesque faucibus. Ut accumsan ultricies elit. Maecenas at justo id velit placerat molestie. Donec dictum lectus non odio. Cras a ante vitae enim iaculis aliquam. Mauris nunc quam, venenatis nec, euismod sit amet, egestas placerat, est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras id elit. Integer quis urna. Ut ante enim, dapibus malesuada, fringilla eu, condimentum quis, tellus. Aenean porttitor eros vel dolor. Donec convallis pede venenatis nibh. Duis quam. Nam eget lacus. Aliquam erat volutpat. Quisque dignissim congue leo. 39 |

40 |
43 | 44 | -------------------------------------------------------------------------------- /source/patterns/layout/image-surround.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Image Surround" 5 | pattern_desc: "A layout that provides placement for a headline in the center, wrapped with images arround the sides. As screen size narrows, certain images are dropped and others rearrange. Decent for promotional layouts containing product images." 6 | --- 7 | 46 | 47 | 48 | 49 | 124 | 125 |
50 | 51 | 52 | 62 | 63 | 64 | 109 | 110 | 111 | 121 | 122 |
53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 |
61 |
65 | 66 | 67 | 77 | 96 | 106 | 107 |
68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 |
76 |
78 | 79 | 80 | 83 | 84 | 85 | 88 | 89 | 90 | 93 | 94 |
81 | This is a Headline 82 |
86 | Nam sollicitudin dapibus nisi quis varius. Ut posuere volutpat erat, pellentesque iaculis velit eleifend vitae. 87 |
91 | 92 |
95 |
97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 |
105 |
108 |
112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 |
120 |
123 |
-------------------------------------------------------------------------------- /source/patterns/layout/layout-shifter.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Layout Shifter" 5 | pattern_desc: "A layout that starts as a single row left column and a multi-row right column. The layout shifts, stacking columns from left to right, top to bottom as the screen size gets narrower." 6 | --- 7 | 19 | 20 | 21 | 22 | 23 | 24 | 30 | 50 | 51 |
25 |

Column 1

26 |

27 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 28 |

29 |
31 | 32 | 33 | 39 | 40 | 41 | 47 | 48 |
34 |

Column 2

35 |

36 | Nunc tempus felis vitae urna. Vivamus porttitor, neque at volutpat rutrum, purus nisi eleifend libero, a tempus libero lectus feugiat felis. Morbi diam mauris, viverra in, gravida eu, mattis in, ante. Morbi eget arcu. Morbi porta, libero id ullamcorper nonummy, nibh ligula pulvinar metus, eget consectetuer augue nisi quis lacus. Ut ac mi quis lacus mollis aliquam. Curabitur iaculis tempus eros. Curabitur vel mi sit amet magna malesuada ultrices. Ut nisi erat, fermentum vel, congue id, euismod in, elit. Fusce ultricies, orci ac feugiat suscipit, leo massa sodales velit, et scelerisque mi tortor at ipsum. Proin orci odio, commodo ac, gravida non, tristique vel, tellus. Pellentesque nibh libero, ultricies eu, sagittis non, mollis sed, justo. Praesent metus ipsum, pulvinar pulvinar, porta id, fringilla at, est. 37 |

38 |
42 |

Column 3

43 |

44 | Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In posuere felis nec tortor. Pellentesque faucibus. Ut accumsan ultricies elit. Maecenas at justo id velit placerat molestie. Donec dictum lectus non odio. Cras a ante vitae enim iaculis aliquam. Mauris nunc quam, venenatis nec, euismod sit amet, egestas placerat, est. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Cras id elit. Integer quis urna. Ut ante enim, dapibus malesuada, fringilla eu, condimentum quis, tellus. Aenean porttitor eros vel dolor. Donec convallis pede venenatis nibh. Duis quam. Nam eget lacus. Aliquam erat volutpat. Quisque dignissim congue leo. 45 |

46 |
49 |
-------------------------------------------------------------------------------- /source/patterns/layout/main-column-with-sidebar.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Main Column With Sidebar" 5 | pattern_desc: "A multi-column layout with one main column and a sidebar that ends up as a single column layout, stacking the main column on top of the sidebar as the screen size gets smaller." 6 | --- 7 | 17 | 18 | 19 | 20 | 72 | 73 |
21 | 22 | 23 | 36 | 69 | 70 |
24 | 25 | 26 | 33 | 34 |
27 |

Main Column

28 |

29 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 30 |

31 | 32 |
35 |
37 | 38 | 39 | 66 | 67 |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
Sidebar
Bullet 1
Bullet 2
Bullet 3
Bullet 4
Bullet 5
65 |
68 |
71 |
-------------------------------------------------------------------------------- /source/patterns/layout/shrink-wrap.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Shrink Wrap" 5 | pattern_desc: "The simplesest layout is one that is mostly fluid. The layout does not shift with screen size changes. Text simply reflows and images scale." 6 | --- 7 | 19 | 20 | 21 | 22 | 46 | 47 |
23 | 24 | 25 | 28 | 29 | 30 | 33 | 34 | 35 | 38 | 39 | 40 | 43 | 44 |
26 | 27 |
31 |

Header Text

32 |
36 | Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam cursus. Morbi ut mi. Nullam enim leo, egestas id, condimentum at, laoreet mattis, massa. Sed eleifend nonummy diam. Praesent mauris ante, elementum et, bibendum at, posuere sit amet, nibh. Duis tincidunt lectus quis dui viverra vestibulum. Suspendisse vulputate aliquam dui. Nulla elementum dui ut augue. Aliquam vehicula mi at mauris. Maecenas placerat, nisl at consequat rhoncus, sem nunc gravida justo, quis eleifend arcu velit quis lacus. Morbi magna magna, tincidunt a, mattis non, imperdiet vitae, tellus. Sed odio est, auctor ac, sollicitudin in, consequat vitae, orci. Fusce id felis. Vivamus sollicitudin metus eget eros. 37 |
41 | CTA 42 |
45 |
-------------------------------------------------------------------------------- /source/patterns/layout/source-order-shift.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Source Order Shift" 5 | pattern_desc: "A layout that starts as 2 equal width columns and ends as a single column layout, stacking the right column on top of the left as the screen sizes get narrower." 6 | --- 7 | 37 | 38 | 39 | 40 | 71 | 72 |
41 | 42 | <% 4.times do %> 43 | 44 | 67 | 68 | <% end %> 69 |
45 | 46 | 47 | 50 | 51 | 52 | 63 | 64 | 65 |
53 | 54 | 55 | 60 | 61 |
56 | This is a Product Title
57 | $XXXX.XX
58 | product description here 59 |
62 |
66 |
70 |
-------------------------------------------------------------------------------- /source/patterns/lists/list-with-thumbnails-and-summary-hide.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "List With Thumbnails & Summary Hide" 5 | pattern_desc: "List items start out as a single column with a thumbnail on the left and description on the right, at a specified breakpoint the description text is hidden leaving only the title and cta. The thumbnail images also scale down as the screen size shrinks." 6 | --- 7 | 8 | 29 | 30 | 31 | 32 | 90 | 91 |
33 | 34 | 35 | 51 | 52 | 53 | 69 | 70 | 71 | 87 | 88 |
36 | 37 | 38 | 41 | 48 | 49 |
39 | 40 | 42 | Title of Content 43 |

44 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis at nibh nulla, sed vestibulum mauris. Maecenas et justo et massa adipiscing pretium. Aliquam erat volutpat. 45 |

46 | Read More » 47 |
50 |
54 | 55 | 56 | 59 | 66 | 67 |
57 | 58 | 60 | Title of Content 61 |

62 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis at nibh nulla, sed vestibulum mauris. Maecenas et justo et massa adipiscing pretium. Aliquam erat volutpat. 63 |

64 | Read More » 65 |
68 |
72 | 73 | 74 | 77 | 84 | 85 |
75 | 76 | 78 | Title of Content 79 |

80 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis at nibh nulla, sed vestibulum mauris. Maecenas et justo et massa adipiscing pretium. Aliquam erat volutpat. 81 |

82 | Read More » 83 |
86 |
89 |
-------------------------------------------------------------------------------- /source/patterns/lists/list-with-thumbnails-and-summary-stack.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "List With Thumbnails & Summary Stack" 5 | pattern_desc: "List items start out as a single column with a thumbnail on the left and description on the right, at a specified breakpoint the summary stacks below the thumbnail. The thumbnail images also scale down as the screen size shrinks." 6 | --- 7 | 8 | 43 | 44 | 45 | 46 | 104 | 105 |
47 | 48 | 49 | 65 | 66 | 67 | 83 | 84 | 85 | 101 | 102 |
50 | 51 | 52 | 55 | 62 | 63 |
53 | 54 | 56 | Title of Content 57 |

58 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis at nibh nulla, sed vestibulum mauris. Maecenas et justo et massa adipiscing pretium. Aliquam erat volutpat. 59 |

60 | Read More » 61 |
64 |
68 | 69 | 70 | 73 | 80 | 81 |
71 | 72 | 74 | Title of Content 75 |

76 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis at nibh nulla, sed vestibulum mauris. Maecenas et justo et massa adipiscing pretium. Aliquam erat volutpat. 77 |

78 | Read More » 79 |
82 |
86 | 87 | 88 | 91 | 98 | 99 |
89 | 90 | 92 | Title of Content 93 |

94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis at nibh nulla, sed vestibulum mauris. Maecenas et justo et massa adipiscing pretium. Aliquam erat volutpat. 95 |

96 | Read More » 97 |
100 |
103 |
-------------------------------------------------------------------------------- /source/patterns/lists/list-with-thumbnails-v2.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "List With Thumbnails v2" 5 | pattern_desc: "List items start out as a two column layout and stack to a single column. The thumbnail images also scale down as the screen size shrinks." 6 | --- 7 | 8 | 43 | 44 | 45 | 46 | 106 | 107 |
47 | 48 | 49 | 62 | 75 | 76 | 77 | 90 | 103 | 104 |
50 | 51 | 52 | 55 | 59 | 60 |
53 | 54 | 56 | Title of Content
57 | Summary of content 58 |
61 |
63 | 64 | 65 | 68 | 72 | 73 |
66 | 67 | 69 | Title of Content
70 | Summary of content 71 |
74 |
78 | 79 | 80 | 83 | 87 | 88 |
81 | 82 | 84 | Title of Content
85 | Summary of content 86 |
89 |
91 | 92 | 93 | 96 | 100 | 101 |
94 | 95 | 97 | Title of Content
98 | Summary of content 99 |
102 |
105 |
-------------------------------------------------------------------------------- /source/patterns/lists/list-with-thumbnails.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "List With Thumbnails" 5 | pattern_desc: "List items start out as a single row and reflow to a two column layout. The thumbnail images also scale down as the screen size shrinks." 6 | --- 7 | 8 | 51 | 52 | 53 | 54 | 112 | 113 |
55 | 56 | 57 | 70 | 83 | 96 | 109 | 110 |
58 | 59 | 60 | 61 | 62 | 63 | 67 | 68 |
64 | Title of Content
65 | Summary of content 66 |
69 |
71 | 72 | 73 | 74 | 75 | 76 | 80 | 81 |
77 | Title of Content
78 | Summary of content 79 |
82 |
84 | 85 | 86 | 87 | 88 | 89 | 93 | 94 |
90 | Title of Content
91 | Summary of content 92 |
95 |
97 | 98 | 99 | 100 | 101 | 102 | 106 | 107 |
103 | Title of Content
104 | Summary of content 105 |
108 |
111 |
-------------------------------------------------------------------------------- /source/patterns/media/basic-fluid-image.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Basic Fluid Image" 5 | pattern_desc: "The simplest tactic for dealing with responsive images. The image is set to a maximum width of 100% of it's container and simply scales down as the screen size shrinks." 6 | --- 7 | 8 | 17 | 18 | Spain -------------------------------------------------------------------------------- /source/patterns/media/connecting-fallback.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/patterns/media/connecting-fallback.jpg -------------------------------------------------------------------------------- /source/patterns/media/description-overlay-bottom.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Description Overlay Bottom" 5 | pattern_desc: "An image with a description overlayed on the bottom of the image. As the screen size narrows the image scales and the text in the description container reflows." 6 | --- 7 | 8 | 23 | 24 | 25 | 26 | 58 | 59 |
27 | 32 | 33 | 34 | 35 | 36 | 37 | 51 | 52 |
 
38 | 39 | 40 | 43 | 44 | 45 | 48 | 49 |
41 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sequi, nisi, quis, at, magnam magni maiores pariatur eos ullam consectetur excepturi alias sed! Debitis, iusto, minima atque reiciendis in aut eaque! 42 |
46 | CTA > 47 |
50 |
53 | 57 |
-------------------------------------------------------------------------------- /source/patterns/media/description-overlay-right.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Description Overlay Right" 5 | pattern_desc: "" 6 | --- 7 | 8 | 25 | 26 | 27 | 28 | 33 | 53 | 54 |
29 |
30 | 31 |
32 |
34 | 35 | 36 | 50 | 51 |
37 | 38 | 39 | 42 | 43 | 44 | 47 | 48 |
40 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Libero repellat placeat excepturi omnis quae laboriosam nesciunt. 41 |
45 | CTA > 46 |
49 |
52 |
-------------------------------------------------------------------------------- /source/patterns/media/espana_alleyway.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/patterns/media/espana_alleyway.jpg -------------------------------------------------------------------------------- /source/patterns/media/fluid-video.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Fluid Video" 5 | pattern_desc: "An embedded HTML5 video that scales appropriately according to screen size. Will also fallback safely to a linked image for clients that don't support embedded video." 6 | --- 7 | 8 | 19 | 20 |
21 | 28 |
-------------------------------------------------------------------------------- /source/patterns/media/image-center-crop.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Image Center Crop" 5 | pattern_desc: "An image that stays it's original size and is simply cropped equaly from the left and right as the width of it's parent container changes." 6 | --- 7 | 8 | 25 | 26 |
27 | Tattoo & Piercing 28 |
-------------------------------------------------------------------------------- /source/patterns/media/image-grid.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Image Grid" 5 | pattern_desc: "A grid of equal size images that scale equaly as the viewport width changes." 6 | --- 7 | 8 | 28 | 29 | 30 | 31 | 42 | 43 |
32 | 33 | <% 3.times do %> 34 | 35 | <% 4.times do %> 36 | 37 | <% end %> 38 | 39 | <% end %> 40 |
Moroccan souk
41 |
-------------------------------------------------------------------------------- /source/patterns/media/image-left-crop.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Image Left Crop" 5 | pattern_desc: "An image that stays it's original size and is cropped from the left as the width of it's parent container changes." 6 | --- 7 | 8 | 24 | 25 |
26 | Spain 27 |
-------------------------------------------------------------------------------- /source/patterns/media/image-right-crop.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Image Right Crop" 5 | pattern_desc: "An image that stays it's original size and is cropped from the right as the width of it's parent container changes." 6 | --- 7 | 8 | 24 | 25 |
26 | Spain 27 |
-------------------------------------------------------------------------------- /source/patterns/media/image-vertical-crop.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Image Vertical Crop" 5 | pattern_desc: "An image that stays it's original size and is simply cropped from the bottom as the height of the screen gets shorter." 6 | --- 7 | 8 | 41 | 42 | 43 | 44 | 49 | 50 |
45 |
46 | Espana 47 |
48 |
-------------------------------------------------------------------------------- /source/patterns/media/lindsey.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/patterns/media/lindsey.jpg -------------------------------------------------------------------------------- /source/patterns/media/meat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/patterns/media/meat.jpg -------------------------------------------------------------------------------- /source/patterns/media/souk.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/patterns/media/souk.jpg -------------------------------------------------------------------------------- /source/patterns/media/spain.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/patterns/media/spain.jpg -------------------------------------------------------------------------------- /source/patterns/media/tattoos.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/briangraves/ResponsiveEmailPatterns/99c12fd3bb2a74abf869cdc47408c18c8ec9db46/source/patterns/media/tattoos.jpg -------------------------------------------------------------------------------- /source/patterns/navigation/drop-below.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Drop Below" 5 | pattern_desc: "Navigation begins as a single row at the top of the layout. At a specified breakpoint, the entire nav drops from the top and moves down to a stacked layout below the main message." 6 | type: "navigation" 7 | --- 8 | 31 | 32 | 33 | 34 | 58 | 59 | 60 | 63 | 64 |
61 | 62 |
-------------------------------------------------------------------------------- /source/patterns/navigation/footer-anchor.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Footer Anchor" 5 | pattern_desc: "Navigation begins as a single row at the top of the layout. At a specified breakpoint, the entire nav drops from the top and moves down to a stacked layout below the main message. A menu or hamburger button is added at the top of the layout that anchors to the stacked menu." 6 | type: "no-header" 7 | --- 8 | 50 | 51 | 52 | 53 | 63 | 64 | 65 | 89 | 90 | 91 | 94 | 95 |
92 | 93 |
-------------------------------------------------------------------------------- /source/patterns/navigation/hide-everything.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Hide Everything" 5 | pattern_desc: "Navigation begins as a single row at the top of the layout and the entire menu is hidden below a specified breakpoint." 6 | type: "navigation" 7 | --- 8 | 17 | 18 | 19 | 20 | 44 | 45 | 46 | 49 | 50 |
47 | 48 |
-------------------------------------------------------------------------------- /source/patterns/navigation/reduce-v2.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Reduce v2" 5 | pattern_desc: "Navigation begins as a single row at the top of the layout and items are removed from right to left as the viewport shrinks." 6 | type: "navigation" 7 | --- 8 | 28 | 29 | 30 | 31 | 55 | 56 | 57 | 60 | 61 |
58 | 59 |
-------------------------------------------------------------------------------- /source/patterns/navigation/reduce.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Reduce" 5 | pattern_desc: "Navigation begins as a single row at the top of the layout and specific items are removed as the viewport shrinks." 6 | type: "navigation" 7 | --- 8 | 27 | 28 | 29 | 30 | 54 | 55 | 56 | 59 | 60 |
57 | 58 |
-------------------------------------------------------------------------------- /source/patterns/navigation/stacked-split-links.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Stacked Split Links" 5 | pattern_desc: "Navigation begins as a single row at the top of the layout. As screen size narrows, certain items drop from the top and move down to a stacked layout below the main message." 6 | type: "navigation" 7 | --- 8 | 9 | 54 | 55 | 56 | 57 | 87 | 88 | 89 | 92 | 93 | 94 | 123 | 124 |
90 | 91 |
-------------------------------------------------------------------------------- /source/patterns/navigation/stacked-top-links-4-up.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Stacked Top Links 4-Up" 5 | pattern_desc: "Navigation begins as a single row at the top of the layout. At a specified breakpoint, the nav stacks into a two column grid at the top." 6 | type: "navigation" 7 | --- 8 | 9 | 38 | 39 | 40 | 41 | 59 | 60 | 61 | 64 | 65 |
62 | 63 |
-------------------------------------------------------------------------------- /source/patterns/navigation/stacked-top-links.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Stacked Top Links" 5 | pattern_desc: "Navigation begins as a single row at the top of the layout. At a specified breakpoint, the entire nav stacks at the top." 6 | type: "navigation" 7 | --- 8 | 9 | 25 | 26 | 27 | 28 | 46 | 47 | 48 | 51 | 52 |
49 | 50 |
-------------------------------------------------------------------------------- /source/patterns/navigation/top-links.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Responsive Email Patterns 3 | layout: pattern 4 | pattern_name: "Top Links" 5 | pattern_desc: "One of the easiest-to-implement solutions for navigation. Links stay at the top of the screen and wrap as the viewport shrinks. Can however cause height issues if too many links are used." 6 | type: "navigation" 7 | --- 8 | 18 | 19 | 20 | 21 | 51 | 52 | 53 | 56 | 57 |
54 | 55 |
-------------------------------------------------------------------------------- /source/stylesheets/Partials/_branding.scss: -------------------------------------------------------------------------------- 1 | $color-brand: rgb(182,21,40); 2 | $color-text: rgb(106,114,125); 3 | $color-text-header: rgb(255,255,255); 4 | $color-link: rgb(106,114,125); 5 | 6 | $color-footer: rgb(245,245,245); -------------------------------------------------------------------------------- /source/stylesheets/Partials/_footer.scss: -------------------------------------------------------------------------------- 1 | .footer { 2 | @include clearfix; 3 | padding: 2em 0; 4 | background: $color-footer; 5 | a { 6 | font-size: .8em; 7 | &.brand { font-size: 1em; } 8 | } 9 | li { 10 | margin-top: 1.5em; 11 | &:first-child { margin-top: 0; } 12 | } 13 | @media only screen and (min-width: 46em) { 14 | text-align: center; 15 | li { 16 | margin: 1em 1em 0 1em; 17 | display: inline-block; 18 | &:first-child { display: block; } 19 | } 20 | } 21 | @media only screen and (min-width: 70em) { 22 | padding: 1.5em 0; 23 | li { 24 | margin: 0 1.5em; 25 | &:first-child { display: inline-block; } 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /source/stylesheets/Partials/_forms.scss: -------------------------------------------------------------------------------- 1 | label, input { 2 | display: block; 3 | } 4 | 5 | label { 6 | cursor: pointer; 7 | margin-top: 1.5em; 8 | } 9 | 10 | select, 11 | input[type=text], 12 | input[type=url], 13 | input[type=email] { 14 | font-size: .8em; 15 | width: 100%; 16 | padding: .75em; 17 | margin-top: .75em; 18 | color: $color-text; 19 | } 20 | 21 | button, 22 | input[type=submit], 23 | .button { 24 | display: inline-block; 25 | padding: .5em 1em; 26 | background: darken($color-link, 20%); 27 | color: rgb(255,255,255); 28 | border: 0; 29 | &:hover { 30 | color: rgb(255,255,255); 31 | background: darken($color-link, 30%); 32 | } 33 | } 34 | 35 | .form { 36 | @include clearfix; 37 | h1 { margin: 0; } 38 | fieldset { 39 | @include clearfix; 40 | padding: 1em 0 3em 0; 41 | margin: 0; 42 | border: 0; 43 | border-bottom: 1px solid lighten($color-text, 40%); 44 | &:first-child { 45 | padding-top: 0; 46 | } 47 | 48 | &:last-of-type { 49 | padding-bottom: 0; 50 | border: 0; 51 | } 52 | } 53 | .submit { 54 | clear: both; 55 | padding: 3em 0 2em 0; 56 | } 57 | } 58 | @media only screen and (min-width: 40em) { 59 | .form { 60 | h1 { padding: 0 1em; } 61 | fieldset { 62 | float: left; 63 | width: 50%; 64 | padding: 1em 2em; 65 | border: 0; 66 | &:first-child { padding-top: 1em; } 67 | } 68 | .submit { 69 | padding: 2em; 70 | } 71 | } 72 | } 73 | @media only screen and (min-width: 60em) { 74 | .form { 75 | h1 { 76 | font-size: 3em; 77 | padding: 0 .65em; 78 | } 79 | } 80 | button, 81 | input[type=submit] { 82 | font-size: 1.2em; 83 | } 84 | select, 85 | input[type=text], 86 | input[type=url], 87 | input[type=email] { 88 | font-size: .8em; 89 | width: 100%; 90 | padding: .75em; 91 | margin-top: .75em; 92 | color: $color-text; 93 | } 94 | } -------------------------------------------------------------------------------- /source/stylesheets/Partials/_grid.scss: -------------------------------------------------------------------------------- 1 | .grid { 2 | vertical-align: top; 3 | width: 100%; 4 | margin-bottom: 2em; 5 | &:last-child { margin-bottom: 0; } 6 | ul { 7 | padding: .25em 0 .5em 0; 8 | li { 9 | margin: .75em 0; 10 | font-size: 1.1em; 11 | } 12 | } 13 | @media only screen and (min-width: 40em) { 14 | display: inline-block; 15 | width: 50%; 16 | padding: 0 2em; 17 | &:nth-last-child(2) { margin-bottom: 0; } 18 | } 19 | @media only screen and (min-width: 60em) { 20 | width: 33.33%; 21 | &:nth-last-child(3) { margin-bottom: 0; } 22 | } 23 | } -------------------------------------------------------------------------------- /source/stylesheets/Partials/_header.scss: -------------------------------------------------------------------------------- 1 | .header { 2 | @include clearfix; 3 | padding: .75em 0; 4 | background: $color-brand; 5 | color: $color-text-header; 6 | a { color: #fff; &:hover { color: #fff; }} 7 | &.home { 8 | padding: 3em 0; 9 | text-align: center; 10 | 11 | .logo { 12 | padding-bottom: .5em; 13 | display: block; 14 | margin: 0 auto; 15 | } 16 | 17 | h1 { 18 | font-size: 2em; 19 | margin: .5em 0; 20 | } 21 | p { 22 | margin: 0; 23 | font-weight: 600; 24 | } 25 | p + a { margin: 2.5em 0 0 0; } 26 | 27 | span { 28 | display: block; 29 | font-size: .8em; 30 | font-weight: 300; 31 | color: #BEC2C7; 32 | margin-top: 1em; 33 | } 34 | @media only screen and (min-width: 40em) { 35 | padding: 3.5em 0; 36 | .logo { 37 | width: 9.25em; 38 | } 39 | h1 { font-size: 3em; } 40 | } 41 | @media only screen and (min-width: 60em) { font-size: 1.2em; } 42 | } 43 | 44 | &.interior { 45 | a { 46 | color: #fff; 47 | &.logo { line-height: 2.38em; display: block;float: left; } 48 | &:hover { color: #fff; } 49 | &.button { 50 | font-size: .9em; 51 | margin: 0 0 0 1em; 52 | display: inline-block; 53 | float: right; 54 | h1 { display: none; } 55 | } 56 | } 57 | @media only screen and (min-width: 36em) { 58 | a { 59 | &.button { 60 | font-size: 1em; 61 | h1 { display: inline-block; } 62 | } 63 | } 64 | } 65 | @media only screen and (min-width: 40em) { 66 | .wrap { 67 | padding: 0 2em; 68 | } 69 | } 70 | img { 71 | display: inline-block; 72 | vertical-align: middle; 73 | margin-top: -3px; 74 | } 75 | h1 { 76 | font-size: 1em; 77 | display: inline-block; 78 | margin: 0 0 0 .5em; 79 | font-weight: 600; 80 | } 81 | } 82 | } 83 | 84 | -------------------------------------------------------------------------------- /source/stylesheets/Partials/_pattern.scss: -------------------------------------------------------------------------------- 1 | .pattern-desc, 2 | .pattern-source { 3 | max-width: 60em; 4 | margin: 3.5em auto 0; 5 | h1 { padding-top: .75em; border-top: 1px solid #E6E6E6; } 6 | @media only screen and (min-width: 40em) { 7 | margin: 5.5em auto 0; 8 | padding: 0 1.5em; 9 | } 10 | } 11 | 12 | .pattern-source { 13 | margin: 1.5em auto 0; 14 | pre[class*="language-"] { 15 | margin: 0; 16 | padding: 0; 17 | background: none; 18 | } 19 | code { 20 | font-size: .9em; 21 | display: block; 22 | margin: 0; 23 | padding: 1.5em; 24 | max-height: 22em; 25 | overflow: scroll; 26 | background: whitesmoke; 27 | } 28 | } 29 | 30 | .pattern-wrap { 31 | font-size: 12px; 32 | margin: 0 auto; 33 | max-width: 600px; 34 | color: #000; 35 | font-family: arial,sans-serif; 36 | color: #999; 37 | @media only screen and (min-width: 40em) { 38 | margin-top: 1.5em; 39 | } 40 | } 41 | 42 | .pattern-header, 43 | .pattern-footer { 44 | height: 0; 45 | overflow: hidden; 46 | -webkit-transition: all .5s ease; 47 | -moz-transition: all .5s ease; 48 | transition: all .5s ease; 49 | } 50 | 51 | .pattern-header { 52 | &.active { 53 | height: 117px; 54 | &.type-navigation { 55 | height: 45px; 56 | } 57 | &.type-no-header { 58 | display: none; 59 | height: 0; 60 | } 61 | } 62 | @include clearfix; 63 | .pattern-nav { 64 | overflow: hidden; 65 | height: 51px; 66 | margin-bottom: 20px; 67 | text-align: center; 68 | border-bottom: 1px solid #ccc; 69 | a { 70 | display: inline-block; 71 | padding: 18px 14px; 72 | font-weight: bold; 73 | color: #999; 74 | } 75 | } 76 | } 77 | .patterns_navigation_footer-anchor { 78 | .pattern-header { 79 | &.active { 80 | display: none; 81 | height: 0; 82 | } 83 | } 84 | } 85 | 86 | .pattern-footer { 87 | &.active { height: 97px; } 88 | @include clearfix; 89 | p { 90 | margin-top: 20px; 91 | margin-bottom: 0; 92 | padding-top: 20px; 93 | border-top: 1px solid #ccc; 94 | } 95 | } -------------------------------------------------------------------------------- /source/stylesheets/Partials/_support.scss: -------------------------------------------------------------------------------- 1 | .pattern-support { 2 | max-width: 60em; 3 | margin: 0 auto; 4 | table { 5 | width: 100%; 6 | tr:hover td { background: whitesmoke; } 7 | th { vertical-align: bottom; } 8 | td { vertical-align: top; } 9 | th, td { 10 | width: 50%; 11 | padding: 1em 0.5em; 12 | text-align: left; 13 | border-bottom: 1px solid whitesmoke; 14 | &:first-child { padding-right: 2em; } 15 | &:last-child { text-align: right; } 16 | } 17 | .support-level { 18 | position: relative; 19 | padding-right: 2.75em; 20 | &:after { 21 | display: block; 22 | position: absolute; 23 | top: 1em; 24 | right: 0.5em; 25 | width: 1.4em; 26 | height: 1.4em; 27 | background: url('../images/support.png') no-repeat; 28 | border-radius: 1em; 29 | text-align: center; 30 | font-weight: bold; 31 | color: #fff; 32 | } 33 | } 34 | .support-level.full:after { 35 | content: ''; 36 | background-color: #7ebd26; 37 | background-position: -1px -1px; 38 | } 39 | .support-level.working:after { 40 | content: ''; 41 | background-color: #72d0eb; 42 | background-position: center center; 43 | } 44 | .support-level.none:after { 45 | content: ''; 46 | background-color: $color-brand; 47 | background-position: center -51px; 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /source/stylesheets/Partials/_utilities.scss: -------------------------------------------------------------------------------- 1 | @mixin unset-list { 2 | margin: 0; 3 | padding: 0; 4 | list-style-type: none; 5 | } 6 | 7 | @mixin animation($name, $duration, $timing-function: ease, $delay: 0, $iteration-count: 1, $direction: both) { 8 | -o-animation: $name $duration $timing-function $delay $iteration-count $direction; 9 | -moz-animation: $name $duration $timing-function $delay $iteration-count $direction; 10 | -webkit-animation: $name $duration $timing-function $delay $iteration-count $direction; 11 | animation: $name $duration $timing-function $delay $iteration-count $direction; 12 | } 13 | 14 | @mixin keyframes($name) { 15 | @-webkit-keyframes #{$name} { 16 | @content; 17 | } 18 | @-moz-keyframes #{$name} { 19 | @content; 20 | } 21 | @-ms-keyframes #{$name} { 22 | @content; 23 | } 24 | @keyframes #{$name} { 25 | @content; 26 | } 27 | } 28 | 29 | @mixin destroyList { 30 | display: block; 31 | list-style: none; 32 | padding: 0; 33 | margin: 0; 34 | li, 35 | dd, 36 | dt { 37 | @include inline-block(middle); 38 | list-style: none; 39 | padding: 0; 40 | margin: 0; 41 | } 42 | } 43 | 44 | @mixin destroyLinks { 45 | text-decoration: none; 46 | color: inherit; 47 | } -------------------------------------------------------------------------------- /source/stylesheets/all.css.scss: -------------------------------------------------------------------------------- 1 | @import "normalize"; 2 | @import "compass/utilities/general/clearfix"; 3 | @import "compass/css3"; 4 | @import "compass/css3/inline-block"; 5 | 6 | @import "Partials/utilities"; 7 | @import "Partials/branding"; 8 | @import "Partials/header"; 9 | @import "Partials/footer"; 10 | @import "Partials/forms"; 11 | @import "Partials/grid"; 12 | @import "Partials/pattern"; 13 | @import "Partials/support"; 14 | 15 | @import "prism"; 16 | 17 | @import url(http://fonts.googleapis.com/css?family=Open+Sans:400,300,600); 18 | 19 | * { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } 20 | 21 | body { 22 | font-size: 1em; 23 | font-family: 'Open Sans', sans-serif; 24 | font-weight: 300; 25 | color: $color-text; 26 | background: $color-footer; 27 | display: flex; 28 | min-height: 100vh; 29 | flex-direction: column; 30 | } 31 | 32 | h1, h2, h3, h4, h5, h6 { font-weight: 300; } 33 | 34 | 35 | h2 { 36 | border-bottom: 1px solid lighten($color-link, 40%); 37 | margin: 0; 38 | padding: 0 0 .25em 0; 39 | } 40 | 41 | a { 42 | color: $color-link; 43 | text-decoration: none; 44 | transition: color 0.25s; 45 | &:hover { 46 | color: $color-brand; 47 | } 48 | &.brand { 49 | color: $color-brand; 50 | font-weight: 600; 51 | &:hover { color: darken($color-brand, 10%); } 52 | } 53 | } 54 | 55 | ul { 56 | @include unset-list; 57 | } 58 | 59 | .wrap { 60 | max-width: 60em; 61 | margin: 0 auto; 62 | @include clearfix; 63 | } 64 | .index, .submit-pattern, .confirmation { 65 | .wrap { 66 | max-width: 70em; 67 | } 68 | } 69 | 70 | .main { 71 | padding: 2em 0; 72 | background: #fff; 73 | flex: 1; 74 | @media only screen and (min-width: 60em) { padding: 3em 0 4em 0; } 75 | 76 | } 77 | 78 | .header, 79 | .header.home, 80 | .main, 81 | .footer { 82 | padding-left: 1.5em; 83 | padding-right: 1.5em; 84 | } 85 | 86 | @media only screen and (min-width: 40em) { 87 | .header.home, 88 | .footer, 89 | .pattern-support { 90 | padding-left: 2em; 91 | padding-right: 2em; 92 | } 93 | .header, 94 | .main { 95 | padding-left: 0; 96 | padding-right: 0; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /source/stylesheets/prism.css: -------------------------------------------------------------------------------- 1 | /** 2 | * prism.js default theme for JavaScript, CSS and HTML 3 | * Based on dabblet (http://dabblet.com) 4 | * @author Lea Verou 5 | */ 6 | 7 | code[class*="language-"], 8 | pre[class*="language-"] { 9 | color: black; 10 | text-shadow: 0 1px white; 11 | font-family: Consolas, Monaco, 'Andale Mono', monospace; 12 | direction: ltr; 13 | text-align: left; 14 | white-space: pre; 15 | word-spacing: normal; 16 | word-break: normal; 17 | 18 | 19 | -moz-tab-size: 4; 20 | -o-tab-size: 4; 21 | tab-size: 4; 22 | 23 | -webkit-hyphens: none; 24 | -moz-hyphens: none; 25 | -ms-hyphens: none; 26 | hyphens: none; 27 | } 28 | 29 | pre[class*="language-"]::-moz-selection, pre[class*="language-"] ::-moz-selection, 30 | code[class*="language-"]::-moz-selection, code[class*="language-"] ::-moz-selection { 31 | text-shadow: none; 32 | background: #b3d4fc; 33 | } 34 | 35 | pre[class*="language-"]::selection, pre[class*="language-"] ::selection, 36 | code[class*="language-"]::selection, code[class*="language-"] ::selection { 37 | text-shadow: none; 38 | background: #b3d4fc; 39 | } 40 | 41 | @media print { 42 | code[class*="language-"], 43 | pre[class*="language-"] { 44 | text-shadow: none; 45 | } 46 | } 47 | 48 | /* Code blocks */ 49 | pre[class*="language-"] { 50 | padding: 1em; 51 | margin: .5em 0; 52 | overflow: auto; 53 | } 54 | 55 | :not(pre) > code[class*="language-"], 56 | pre[class*="language-"] { 57 | background: #f5f2f0; 58 | } 59 | 60 | /* Inline code */ 61 | :not(pre) > code[class*="language-"] { 62 | padding: .1em; 63 | border-radius: .3em; 64 | } 65 | 66 | .token.comment, 67 | .token.prolog, 68 | .token.doctype, 69 | .token.cdata { 70 | color: slategray; 71 | } 72 | 73 | .token.punctuation { 74 | color: #999; 75 | } 76 | 77 | .namespace { 78 | opacity: .7; 79 | } 80 | 81 | .token.property, 82 | .token.tag, 83 | .token.boolean, 84 | .token.number, 85 | .token.constant, 86 | .token.symbol { 87 | color: #905; 88 | } 89 | 90 | .token.selector, 91 | .token.attr-name, 92 | .token.string, 93 | .token.builtin { 94 | color: #690; 95 | } 96 | 97 | .token.operator, 98 | .token.entity, 99 | .token.url, 100 | .language-css .token.string, 101 | .style .token.string, 102 | .token.variable { 103 | color: #a67f59; 104 | background: hsla(0,0%,100%,.5); 105 | } 106 | 107 | .token.atrule, 108 | .token.attr-value, 109 | .token.keyword { 110 | color: #07a; 111 | } 112 | 113 | 114 | .token.regex, 115 | .token.important { 116 | color: #e90; 117 | } 118 | 119 | .token.important { 120 | font-weight: bold; 121 | } 122 | 123 | .token.entity { 124 | cursor: help; 125 | } 126 | 127 | -------------------------------------------------------------------------------- /source/submit-pattern.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Responsive Email Patterns: Submit Pattern" 3 | layout: interior 4 | buttons: false 5 | --- 6 | 7 |
8 |

Submit a Pattern

9 | 10 | 11 |
12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 | 32 | 33 | 34 | 35 |
36 | 37 |
38 | 39 |
40 |
41 |
42 | -------------------------------------------------------------------------------- /source/support.html.erb: -------------------------------------------------------------------------------- 1 | --- 2 | title: Pattern Support 3 | desc: "All patterns have been tested using either Litmus or with real devices in the email clients listed below. 4 | Full = Fully Responsive, Working = Renders Correctly at Full Width but Not Responsive, None = Either the Pattern Doesn't Work or Has Yet to be Tested." 5 | --- 6 | 7 |
8 | 9 | 10 | 11 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 |
Email Client 12 | Support Level 13 |
iPhone 3GS iOS5Full
iPhone 4S iOS6Full
iPhone 5 iOS6Full
iPhone 5s iOS7Full
iPad iOS6Full
iPad (Retina) iOS7Full
iPad Mini iOS7Full
Apple Mail 5 OS X 10.7Full
Apple Mail 6 OS X 10.8Full
Android 2.3 Native ClientFull
Android 4.0 Native ClientFull
Android Outlook Exchange via Native ClientWorking
Android Gmail AppWorking
Outlook 2000Working
Outlook 2007Working
Outlook 2010Working
Outlook 2011 OS X 10.7Working
Outlook 2013Working
Gmail ChromeWorking
Gmail IEWorking
Gmail FirefoxWorking
Hotmail/Outlook.com ChromeWorking
Hotmail/Outlook.com IEWorking
Hotmail/Outlook.com FirefoxWorking
Yahoo! Mail ChromeWorking
Yahoo! Mail IEWorking
Yahoo! Mail FirefoxWorking
Windows Phone 7Working
Windows Mobile 6.1None
BlackBerry OS4None
BlackBerry OS5None
140 |
--------------------------------------------------------------------------------