/ Mobile Menu

SVG and CSS3 animations Navigation Concept

SVG and CSS3 animations Navigation Concept

SVG UI Navigation Concept

Just SVG & CSS3 animations, without any animation libraries.

Made with

Html
Css
JavaScript

html

<div class="phone">
	<div class="topbar">
		<div class="topbarbutton"></div>
		<h3>City News</h3>
		<div class="search"></div>
	</div>

	<div class="item">
		<div class="check">
			<div class="bg"></div>
			<svg width="32" height="32">
				<g fill="#ffffff">
					<path d="M8.48499124,6.449827 C8.48499124,6.449827 6.42021586,5.43771624 5.4369895,6.449827 C4.45376313,7.46193776 5.4369895,9.58737036 5.4369895,9.58737036 L14.5809947,17.9541526 C14.5809947,17.9541526 15.5826082,19 15.5969949,19 C16.5986087,19 17.6289965,17.9541526 17.6289965,17.9541526 L25.7570011,9.58737036 C25.7570011,9.58737036 26.3037486,7.01263642 25.7570011,6.449827 C25.2102536,5.88701759 22.7089994,6.449827 22.7089994,6.449827 L15.5969953,13.7707615 L8.48499124,6.449827 Z">
						<animate fill="freeze" attributeName="d" begin="indefinite" dur="200ms" to="M8.48499124,6.449827 C8.48499124,6.449827 6.42021586,5.43771624 5.4369895,6.449827 C4.45376313,7.46193776 5.4369895,9.58737036 5.4369895,9.58737036 L14.5809947,17.9541526 C14.5809947,17.9541526 15.5826082,19 15.5969949,19 C16.5986087,19 17.6289965,17.9541526 17.6289965,17.9541526 L25.7570011,9.58737036 C25.7570011,9.58737036 26.3037486,7.01263642 25.7570011,6.449827 C25.2102536,5.88701759 22.7089994,6.449827 22.7089994,6.449827 L15.5969953,13.7707615 L8.48499124,6.449827 Z" />
						<animate fill="freeze" attributeName="d" begin="indefinite" dur="200ms" to="M2.87499998,10.0000003 C2.87499998,10.0000003 0.999999989,11.1094933 1,12.2292387 C1.00000001,13.2292383 2.875,14.1833914 2.875,14.1833914 L14.6696825,14.1833913 C14.6696825,14.1833913 15.9865124,14.1833916 16,14.1833916 C16.939013,14.1833916 17.5271842,14.1833913 17.5271842,14.1833913 L30.0625,14.1833916 C30.0625,14.1833916 31,13.2292387 31,12.2292383 C31,11.2292379 29.125,10 29.125,10 L15.6221831,10.0000002 L2.87499998,10.0000003 Z" />
					</path>
				</g>
			</svg>	
		</div>
		
		<div class="button"></div>
		<div class="content slideRight">
			<div class="title">Night life</div>
			<div class="details">
				<div class="c">
					<div class="n">517</div>
					<div class="label">FOLLOWERS</div>
				</div>
				<div class="c">
					<div class="n">315</div>
					<div class="label">FAVORITES</div>
				</div>
				<div class="c">
					<div class="n">7815</div>
					<div class="label">VIEWS</div>
				</div>
			</div>
		</div>
		<svg class="svgmenu" width="400" height="400">
			<path fill="#E6365F" d="M0,60 L113,60 C113,60 228,59 229,60 C230,61 279,60 300,60 C321,60 371,61 371,60 L371,0 L0,0 L0,60 Z">
				<animate fill="freeze" attributeName="d" begin="indefinite" dur="100ms" to="M0,60 L113,60 C113,60 228,59 229,60 C230,61 279,60 300,60 C321,60 371,61 371,60 L371,0 L0,0 L0,60 Z" />
				<animate fill="freeze" attributeName="d" begin="indefinite" dur="100ms" to="M0,60 L113,60 C113,60 214.336411,103.306838 228,109 C240,114 279,129 300,131 C321,133 371,89 371,82 L371,0 L0,0 L0,60 Z" />
				<animate fill="freeze" attributeName="d" begin="indefinite" dur="200ms" to="M0,60 L85.9157895,60 C85.9157895,60 152,58 204,139 C253.616309,216.286943 281,205 299,209 C317,213 371,184 371,177 L371,0 L0,0 L0,60 Z" />
				<animate fill="freeze" attributeName="d" begin="indefinite" dur="250ms" to="M0,60 L85.9157895,60 C85.9157895,60 159,60 200,139 C241.386531,218.744779 261,222 294,225 C327,228 371,201 371,194 L371,0 L0,0 L0,60 Z" />
			</path>

			<defs>
				<pattern id="image1" width="44" height="44">
					<image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC4AAAAtCAMAAADm86mrAAAAq1BMVEXgFEfjH07kOGDmP2bnKVXpL1vrM1/sSm/uOGLuVnjuZYXwb43xPmjxeZXxucbyrsDzX3/zi6L0lan0m6/0o7T07vP1bI32Q2z3e5n3prj35uv4dZX4rr34ssH4uMb4xNH4ytT4z9j43+b5vMn5v8z6tsb7gpv92+L9/f39///+ytX+ztj+1d3+4Ob+5On+6u7++/3+/fr/6en/7/H/8/X/+Pn//f3//f/////AT4wpAAAB0UlEQVR42pWVa3ebMAyGaWhrAWLltpZubSB0gXQjoR0m8f//ZRvmUKhsLn0/+eCH98iyZBm3X5KCo+WG++R3so1iDxdw8MKSi168iGyYxsHe1+Kz+C8HJnAWSZiIP1k6HOw/Z6FV4YCCg3sSU6p9IDjEtZgWl/wId6pXMcfnmzHuHcW8KnuE48tFLGjHPvBN3tDdN+VDCD3OChL4JfUT+kNl9bhPt2pmmDSv5wg6/GGnHMw0bjJBdGQdbnMNfq3kqnElDoFY5S6eoMUxEavcRYEtzrKV7rXV4l610p3ft7jdDMnaRVLBjXEVdMvkfbgpV+JDmf9gBtWmGMziFr8f/s9MFS+HaHISzOHF7XRtXDnd6q4hwXjjxniVao+aydWne5JHZWoOvv9P5HEikZhqE6nm/YgtDqGKa923IEvMaVa5v+VdRbJylXvFOhyCs9oem0xXkLKbLOp0+OY8NtTc65sPArp34Qfae4/Q47csFUsqrNGzZP9doGt3/IqBX8/STQA9LoUBn6MjJA82zvjzCJVxYMbZWU+ffNQMG/C2XBdIYoN+lGGccgrvcjY9KJn7fOIDe9rGbH4Mo/UzeE7Lokz3oWuhOoZVoYnI0ISlIb+sfxpdHHNJS+qbAAAAAElFTkSuQmCC" width="44" height="44" />
				</pattern>

				<pattern id="image2" width="44" height="44">
					<image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAuCAMAAACLUGAGAAAArlBMVEXgFEfjH07kOGDmP2bnKVXpL1vrM1/sSm/uOGLuVnjuZYXwb43xPmjxeZXxucbypr7yrsDzX3/zi6LzydT0lan0m6/0o7T07vP3e5n3prj35uv4rr34ssH4uMb4xNH4ytT4z9j43+b4+Pn5vMn5v8z6+v76///7gpv92+L9/f39//z9///+ztj+1d3+4Ob+5On+6u7++/3+/fr/7/H/8/X/+Pn//f3//f////3///9LRslMAAAB7klEQVR4AaXV+3aTMAAGcChoEhJqwYStdrYg1aEdg8il5v1fTGCruXDhePr9yfmd8CWQxPr4P7lTQ4J8yiIWYkTWNHk8lxfxFp4cMFnQIKqEniQkM5pQaRXvwymNYjGVP/wAxhqXYi4xMvVjLeaTBbrG9UUscaRqVIrlnIjU5CRW0kbwnw5bsZbKu2kw6sHz0aSP5F0zYea8oebravymSWHiOrCczHyYwkH7XBjZ2pY9mkuJBv00MbRlOYm5LM+9hq/6Q863dqdt2nB9+KdeI2X6VZzuqe/02trgkH09KnPKnU5jWfsSugOUcT35Fxeg088/1ZWzDE2/y+mgTodC5vfO1bAdKjWbwNCCRyq3/Qdh6qvKv1FbYq/UFrbXxsdJNlKn2k9f9b29Zlbr3y0DnQb6Ts9dqSNt7BPsNHzR9Ge7dx+G9toCXKPhP2GaTjvr0PgT6t7h/1CXBA86UIu3OxewpBW/Hnae62sVwaChtiuL7Zfbip1jpXfL3vcO5mIy2hwL1OuVLS+Hhrc979WrOgfy9GF8BVdYOatIuowbCtVzECxW53uin7Hg2M6PPGCpe35o5jpTOL4bYFhMtsgxnLyl0KEybfvKwNydBoN91sj+1/qFosXbFeDomJVVXRV5Sj2yfnNDABBCgMB77/m/y1ESIzbGKqIAAAAASUVORK5CYII=" width="44" height="44" />
				</pattern>

				<pattern id="image3" width="44" height="44">
					<image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC8AAAAuCAMAAACPpbA7AAAArlBMVEXgFEfjH07kOGDmP2bnKVXpL1vrM1/sSm/uOGLuVnjuZYXwb43xPmjxeZXyrsDzX3/zi6LzydT0lan0m6/0o7T07vP1bI32Q2z3e5n3prj35uv4rr34ssH4uMb4xNH4ytT4z9j43+b4+Pn5vMn5v8z7gpv8k6n92+L9/f39///+ytX+ztj+1d3+4Ob+5On+6u7++/3+/fr/xtH/6en/7/H/8/X/+Pn//f3//f////9QMYrpAAACA0lEQVR42qWW23KbMBBABdiVxMWoUtoEO7FJHBcnxkBbBOj/f6zUYpwFBG4n54EZmAO7q4UV6Mv/8Xmf+NQ7MM6ZF2Jy0/e/iziX1VHVRVUmmwdM5nz8sJMK8FYlgpIpn3i7Sg0pzhybfSxKZUJuQ5NPX38qM00SkJFPT42aolkfyMDH72qOddD3/adGzZKE0Ce8UvM0Wwx8mqtbVJxcffI0WnVZqwFnevVdObBj5u5HjxCk88mmHzkObISoHJWMOx9n8JVJDzZqcUf+y6HzgwKWZaMLbNztR0f7EbgWW0izZJkpodb3d+BaukAdFn0t+n4ZXnx8hkkG6MpS9GuQQeuDZoEAGov1biiY9is1EQBZd7BtNTf4Kl624qIr23lWAKF9qYYBFqvA0gEimA/X9eaDZbOR+yJXug8M9oZpP+n7x3TVZlF/xaglgOvjXXyyVQPqy2HXRrD4m7qSU91foYwc7yy0gG/6CWvfrZSRzEbOGpxHRPt+ava/YcQG6evvRdRG/+zY8SAd7dPMPERcOAYk+/h+JwJIWNg7/pgPOFW3KAM4rzx5Qy8iH/qEF7N6vcX9+elHs35Mh/PZj2Yi7MLx/Hd+yKnc99S0vxDPvEo5v5/Y77D4Pe7BPiST+yOhPIFl1Pmj68/v19gVv5KyqguZnTYBJv/wP+Dc079gh3z+/+EPDoYbaDLTr/YAAAAASUVORK5CYII=" width="44" height="44" />
				</pattern>
			</defs>

			<circle id="icon1" r="22" style="fill: url(#image3);">
				<animateMotion dur="0.6s" begin="indefinite" fill="freeze" repeatCount="1" calcMode="spline" keyTimes="0; 1" keyPoints="0; 1" keySplines="0.35 0 1 1" path="M125,26 C170,26 191,51 222,91 C253,131 269.184608,182.272934 306,185 C333,187 338,177 338,177" rotate="auto" />

				<animateTransform attributeName="transform" calcMode="spline" keyTimes="0; 1" keySplines="0.7 0 1 1" begin="indefinite" dur="0.6s" type="rotate" from="0" to="360" repeatCount="1" />
			</circle>

			<circle id="icon2" r="22" style="fill: url(#image2);">
				<animateMotion dur="0.6s" begin="indefinite" fill="freeze" repeatCount="1" calcMode="spline" keyTimes="0; 1" keyPoints="0; 1" keySplines="0.35 0 1 1" path="M125,26 C170,26 191,51 222,91 C244.666619,120.247251 265,174 279,180" rotate="auto" />

				<animateTransform attributeName="transform" calcMode="spline" keyTimes="0; 1" keySplines="0.7 0 1 1" begin="indefinite" dur="0.6s" type="rotate" from="0" to="360" repeatCount="1" />
			</circle>

			<circle id="icon3" r="22" style="fill: url(#image1);">
				<animateMotion dur="0.6s" begin="indefinite" fill="freeze" repeatCount="1" calcMode="spline" keyTimes="0; 1" keyPoints="0; 1" keySplines="0.35 0 1 1" path="M125,26 C170,26 189.45981,51.9517711 222,91 C232,103 242,131 242,131" rotate="auto" />

				<animateTransform attributeName="transform" calcMode="spline" keyTimes="0; 1" keySplines="0.7 0 1 1" begin="indefinite" dur="0.6s" type="rotate" from="0" to="360" repeatCount="1" />
			</circle>
		</svg>
	</div>
	<div class="item">
		<div class="check">
			<div class="bg"></div>
			<svg width="32" height="32">
				<g fill="#ffffff">
					<path d="M8.48499124,6.449827 C8.48499124,6.449827 6.42021586,5.43771624 5.4369895,6.449827 C4.45376313,7.46193776 5.4369895,9.58737036 5.4369895,9.58737036 L14.5809947,17.9541526 C14.5809947,17.9541526 15.5826082,19 15.5969949,19 C16.5986087,19 17.6289965,17.9541526 17.6289965,17.9541526 L25.7570011,9.58737036 C25.7570011,9.58737036 26.3037486,7.01263642 25.7570011,6.449827 C25.2102536,5.88701759 22.7089994,6.449827 22.7089994,6.449827 L15.5969953,13.7707615 L8.48499124,6.449827 Z">
						<animate fill="freeze" attributeName="d" begin="indefinite" dur="200ms" to="M8.48499124,6.449827 C8.48499124,6.449827 6.42021586,5.43771624 5.4369895,6.449827 C4.45376313,7.46193776 5.4369895,9.58737036 5.4369895,9.58737036 L14.5809947,17.9541526 C14.5809947,17.9541526 15.5826082,19 15.5969949,19 C16.5986087,19 17.6289965,17.9541526 17.6289965,17.9541526 L25.7570011,9.58737036 C25.7570011,9.58737036 26.3037486,7.01263642 25.7570011,6.449827 C25.2102536,5.88701759 22.7089994,6.449827 22.7089994,6.449827 L15.5969953,13.7707615 L8.48499124,6.449827 Z" />
						<animate fill="freeze" attributeName="d" begin="indefinite" dur="200ms" to="M2.87499998,10.0000003 C2.87499998,10.0000003 0.999999989,11.1094933 1,12.2292387 C1.00000001,13.2292383 2.875,14.1833914 2.875,14.1833914 L14.6696825,14.1833913 C14.6696825,14.1833913 15.9865124,14.1833916 16,14.1833916 C16.939013,14.1833916 17.5271842,14.1833913 17.5271842,14.1833913 L30.0625,14.1833916 C30.0625,14.1833916 31,13.2292387 31,12.2292383 C31,11.2292379 29.125,10 29.125,10 L15.6221831,10.0000002 L2.87499998,10.0000003 Z" />
					</path>
				</g>
			</svg>	
		</div>
		<div class="button"></div>
		<div class="content">
			<div class="title">Art &amp; Culture</div>
			<div class="details">
				<div class="c">
					<div class="n">437</div>
					<div class="label">FOLLOWERS</div>
				</div>
				<div class="c">
					<div class="n">245</div>
					<div class="label">FAVORITES</div>
				</div>
				<div class="c">
					<div class="n">5432</div>
					<div class="label">VIEWS</div>
				</div>
			</div>
		</div>
	</div>
	<div class="item">
		<div class="check">
			<div class="bg"></div>
			<svg width="32" height="32">
				<g fill="#ffffff">
					<path d="M8.48499124,6.449827 C8.48499124,6.449827 6.42021586,5.43771624 5.4369895,6.449827 C4.45376313,7.46193776 5.4369895,9.58737036 5.4369895,9.58737036 L14.5809947,17.9541526 C14.5809947,17.9541526 15.5826082,19 15.5969949,19 C16.5986087,19 17.6289965,17.9541526 17.6289965,17.9541526 L25.7570011,9.58737036 C25.7570011,9.58737036 26.3037486,7.01263642 25.7570011,6.449827 C25.2102536,5.88701759 22.7089994,6.449827 22.7089994,6.449827 L15.5969953,13.7707615 L8.48499124,6.449827 Z">
						<animate fill="freeze" attributeName="d" begin="indefinite" dur="200ms" to="M8.48499124,6.449827 C8.48499124,6.449827 6.42021586,5.43771624 5.4369895,6.449827 C4.45376313,7.46193776 5.4369895,9.58737036 5.4369895,9.58737036 L14.5809947,17.9541526 C14.5809947,17.9541526 15.5826082,19 15.5969949,19 C16.5986087,19 17.6289965,17.9541526 17.6289965,17.9541526 L25.7570011,9.58737036 C25.7570011,9.58737036 26.3037486,7.01263642 25.7570011,6.449827 C25.2102536,5.88701759 22.7089994,6.449827 22.7089994,6.449827 L15.5969953,13.7707615 L8.48499124,6.449827 Z" />
						<animate fill="freeze" attributeName="d" begin="indefinite" dur="200ms" to="M2.87499998,10.0000003 C2.87499998,10.0000003 0.999999989,11.1094933 1,12.2292387 C1.00000001,13.2292383 2.875,14.1833914 2.875,14.1833914 L14.6696825,14.1833913 C14.6696825,14.1833913 15.9865124,14.1833916 16,14.1833916 C16.939013,14.1833916 17.5271842,14.1833913 17.5271842,14.1833913 L30.0625,14.1833916 C30.0625,14.1833916 31,13.2292387 31,12.2292383 C31,11.2292379 29.125,10 29.125,10 L15.6221831,10.0000002 L2.87499998,10.0000003 Z" />
					</path>
				</g>
			</svg>	
		</div>
		<div class="button"></div>
		<div class="content">
			<div class="title">Food festivals</div>
			<div class="details"></div>
		</div>
	</div>
</div>

Css

@import url(https://fonts.googleapis.com/css?family=Roboto:400,700);

$color_celeste_approx: #ccc;
$color_dolly_approx: #fff985;
$color_fiord_approx: #395373;
$white: white;
$color_wild_watermelon_approx: #f64c73;
$color_java_approx: #20d2bb;
$color_heliotrope_approx: #c873f4;
$color_crimson_approx: #db1a46;
$color_cerise_red_approx: #e6365f;
$color_caribbean_green_approx: #10bba7;
$color_fuchsia_pink_approx: #b752eb;
$color_sundown_approx: #fbaabc;
$color_riptide_approx: #91f0e0;

$font_0: Roboto;
$font_1: Arial;
$font_2: sans-serif;

$url_0: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAaCAMAAAB1owf/AAAAJ1BMVEU5U3M8VnZCXn9DW3lHY4ZZdpdlgKFyjq2DnLmKpMaQrM2Ur9GVsdN7EtFkAAAAYUlEQVR42rXPQQ6AIAxEUdpiYcD7n9eF1NiJKxMeXdFA8stfIpYn7o/O/N4oToZ6v2kYGZqt7yqTsoMYk7XwDjou3z1zjqcHGGlafKc10109Sl49WXeLHhY9DuYWPWRDzwWW4Ae416kXYQAAAABJRU5ErkJggg==);
$url_1: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABsAAAAbCAMAAAC6CgRnAAAAM1BMVEU5U3M8VnZCXn9DW3lHY4ZKapBTbZBXaINZcI9ZdpdlgKFyjq2DnLmKpMaQrM2Ur9GVsdOusR5GAAAAtElEQVR42rWSwRLDIAhEm2isiLD8/9cWp0lDnPSYPakP1pXx9ayWoVuSKnPnVm7o1tWGlPOMSACoKsz6NnWJQVrJlcXheknBfpKXsSoOW7zzDZPDidQkNjYz/nl0QwmMDRQK0S7MSjS5MrRYSIER0I9sq5jmwMZ+D77yt+5Ug8Pso87uCLoOmgEIcxez+PbdaowaLoXpBBN1UVVh4hOeNBPVnNzfIQUYNUedkvX6/+ckb3tGH63FCR54WeN8AAAAAElFTkSuQmCC);
$url_2: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAeCAMAAAAfOR5kAAAAdVBMVEX2THP2XYD2YYT2ZYj2aov3T3X3VHn3WXz3aIj3g5z4ZIP4lKr5bIz5cY75dZL5eZX5fZn5i6P6m7H7orX7s8P72+L8prr8qr38rsD8ytX8ztj81d389f39t8f9vcv9wc79xtL94Ob95On96u7+7/H+8/X/+Pn5WFucAAAA6klEQVR4Aa2P23KDIBCGQbOLRKFdPGik4kHs+z9ibekkO81NO9PfC3c+/mU+xJ8D+Ss+02sZgnnGdnCTg7THMCqk6Xoy4zpn+UkxkQAKTdcEQrbgaiymUoEsg2V1JQVe1DnIpoS7oR5THGBd4x1PR+vPxBvK4dHGcUEAwGEtiD0h29q+O78xWk0PQ7vf+s/Mkbg2xZev/2WrGYV6z5NmG1gbg5dpmEfJsJ9TCfot43jBNCxesbv73XwbddzEbp4KzPS4VoIFtD+2dj1app3UdD83lIvfRWoi0hlHyeF4f4v0E2NljKmU+Nd8AOqPD0OjBHsPAAAAAElFTkSuQmCC);
$url_3: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAdCAMAAABopjdHAAAAbFBMVEUg0rsg07sp1sQq1L012MU31b5F2sZI3tFT39FW2sVW4tNi49Nm4Mps5dR14dB26+B55tWG7eKI6dmN8eWS8N6T6dyU8uWj7eip8O248ezX8+jb+fbp+frz/P35/fr6///9/f39/////f3///8SbmWeAAABFklEQVR4Ab2P4Q6bMAwG7ToYN6kHnlcPBnTreP93XKCoQlr/bvcnUk656IP/QYPwERyft8/mvj5bOINHon/+Hs41VrOuMII81qU5iTZctfMwndf16zmlIQRAbPOyTHQ2qQtLADj8HH/171tqhROxKwJPj2Wy4w0Wj4p7SHMfbuNcIr9MjtIytzkzjsu8NFfsDPeUqXh0W4Dm718eAiCx51KI9eKym2n+cdkW7IaDrbBv6es0DVxPeZviYQ1RjVPa1qvjXrOCzJTdC6GG8/bzsd5S9aElOEWxDiX4WO9KtZmS54tZlFQlvJDQRGbmCVhLa7VxgOImrWptUCrfDnEEezfNkrULLwRnkIu5W52c4C+QEhH8K/4AJtQQGpIOSSoAAAAASUVORK5CYII=);
$url_4: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAMAAACelLz8AAAATlBMVEXIc/TKdfXLevXOg/XQlvjRfPXSifbXl/jYpvnfsvnhqfjjufrkwPvrxf3rzPvs1Pzxz/rx2/zz4/327P748v/4+Pn89f3++/3//f////8ag7p9AAAAr0lEQVR42rWR2w6DIAxAoXWFCsiqW9X//9GZ6AYY9+gJNE0OvSSYe4ATleHU0NviyHWuuliMH064X79RpwbNcCg3e9MQlI4sTdgqUt4TnJK1FqwpQUbY38w9xJw9hCGz5WdmiLorlJdoyFuIg8o7JRUd4GidhAGTBMAoASFILMORmi3qrZib3fv/yp8VdZ0jvKySZVnXdF3lNuhc5SMVXHSVenDzk2AqAIm+B625hw9kZAp4LnzHSwAAAABJRU5ErkJggg==);

%extend_1 {
	height: 100%;
	background: $color_dolly_approx;
	font-family: $font_0, $font_1, $font_2;
	letter-spacing: 1px;
	user-select: none;
}
%extend_2 {
	left: 0;
	transition-property: left;
	transition-duration: 350ms;
}

html {
	@extend %extend_1;
}
body {
	@extend %extend_1;
}
@keyframes falldown {
	0% {
		top: 52px;
		left: 0;
	}
	100% {
		top: calc(100% - 50px - 18px);
		left: calc(100% - 50px - 20px);
	}
}
.phone {
	box-sizing: border-box;
	padding-top: 60px;
	position: relative;
	width: 370px;
	height: 570px;
	margin: 40px auto 0 auto;
	overflow: hidden;
	.topbar {
		position: absolute;
		top: 0;
		left: 0;
		width: 100%;
		height: 62px;
		line-height: 62px;
		background: $color_fiord_approx;
		color: $white;
		text-align: center;
		.topbarbutton {
			position: absolute;
			left: 13px;
			bottom: 13px;
			width: 25px;
			height: 26px;
			background-image: $url_0;
			cursor: pointer;
		}
		h3 {
			font-weight: normal;
			margin-top: 6px;
			font-size: 18px;
		}
		.search {
			position: absolute;
			right: 13px;
			bottom: 12px;
			width: 25px;
			height: 26px;
			background-image: $url_1;
			cursor: pointer;
		}
	}
	.item {
		width: 100%;
		height: 200px;
		position: relative;
		overflow: hidden;
		&:nth-of-type(2) {
			background: $color_wild_watermelon_approx;
			overflow: hidden;
			position: relative;
			.title::before {
				background: $url_2 0 0 no-repeat;
				top: 7px;
			}
			.button {
				background: $color_cerise_red_approx;
				&.expanded {
					background: $color_crimson_approx;
					animation: bubbleScale 300ms cubic-bezier(.76, .01, 1, .93);
				}
				&.collapsed {
					animation: bubbleScale 300ms cubic-bezier(.76, .01, 1, .93);
				}
			}
		}
		&:nth-of-type(3) {
			background: $color_java_approx;
			.title::before {
				background: $url_3 0 0 no-repeat;
				top: 7px;
				left: -4px;
			}
			.button {
				background: $color_caribbean_green_approx;
			}
			.details .c .label {
				color: $color_riptide_approx;
			}
		}
		&:nth-of-type(4) {
			background: $color_heliotrope_approx;
			height: 105px;
			.title::before {
				background: $url_4 0 0 no-repeat;
				top: 9px;
				left: -4px;
			}
			.button {
				background: $color_fuchsia_pink_approx;
			}
		}
		.button {
			position: absolute;
			right: -70px;
			top: -70px;
			width: 140px;
			height: 140px;
			border-radius: 50%;
			z-index: 1;
			cursor: pointer;
			transition-property: background;
			transition-duration: 500ms;
		}
		.check {
			position: absolute;
			top: 15px;
			right: 10px;
			z-index: 2;
			border-radius: 50%;
			padding-top: 5px;
			cursor: pointer;
			.bg {
				position: absolute;
				top: 0;
				left: 0;
				width: 32px;
				height: 32px;
				border-radius: 50%;
			}
			svg {
				position: relative;
				transform: scale(0.9);
				z-index: 1;
			}
			&.expanded .bg {
				animation: fade 500ms;
			}
			&.collapsed .bg {
				animation: fade 500ms;
			}
		}
	}
	.details {
		position: relative;
		margin-top: 22px;
		.c {
			cursor: pointer;
			float: left;
			width: 28%;
			font-size: 12px;
			.n {
				font-weight: bold;
			}
			&:nth-child(1) {
				margin-left: 8%;
			}
			.label {
				position: relative;
        top: 2px;
				font-size: 10px;
				color: $color_sundown_approx;
			}
		}
	}
}

.svgmenu {
	position: absolute;
	left: 0;
	top: -60px;
}

.item {
	.content {
		position: relative;
		left: 0;
		padding-top: 60px;
		color: $white;
		text-align: center;
		.title {
			@extend %extend_2;
		}
		.details {
			@extend %extend_2;
		}
		&.slideLeft {
			.title {
				left: -100px;
				transition-delay: 0;
				transition-timing-function: cubic-bezier(.03, .7, .4, 1);
			}
			.details {
				left: -100px;
				transition-delay: 70ms;
				transition-timing-function: cubic-bezier(.03, .7, .4, 1);
			}
		}
		&.slideRight {
			.title {
				transition-delay: 240ms;
				transition-timing-function: cubic-bezier(.76, .01, 1, .93);
			}
			.details {
				transition-delay: 200ms;
				transition-timing-function: cubic-bezier(.76, .01, 1, .93);
			}
		}
	}
	.title {
		font-size: 21px;
		font-weight: bold;
		position: relative;
		cursor: pointer;
	}
	.title::before {
		content: '';
		position: relative;
		display: inline-block;
		width: 30px;
		height: 30px;
	}
}

@keyframes bubbleScale {
	0% {
		width: 140px;
		height: 140px;
	}
	50% {
		width: 145px;
		height: 145px;
	}
	100% {
		width: 140px;
		height: 140px;
	}
}

@keyframes fade {
	0% {
		background: $color_celeste_approx;
		transform: scale(1.0);
	}
	10% {
		background: $color_celeste_approx;
	}
	25% {
		transform: scale(0.8);
	}
	100% {
		background: none;
		transform: scale(1.3);
	}
}

circle {
	cursor: pointer;
}

JavaScript

document.body.addEventListener('click', (e) => {
		let el = e.target;
		let check = getAncestor(el, 'check') || el;
		
		if (!el.classList.contains('button') && !check.classList.contains('check')) {
			return;
		}

		let button = getAncestor(el, 'item').querySelector('.button');
		buttonClickHandler(button);
	});

	let getAncestor = (el, cls) => {
		if (el.closest) {
			return el.closest('.' + cls);
		} else {
			while ((el = el.parentElement) && !el.classList.contains(cls));
    		return el;
		}
	};

	let buttonClickHandler = (button) => {
		scaleButton(button);
		let contentEl = button.nextElementSibling;
		let svgmenu = contentEl.nextElementSibling;

		contentEl.classList.toggle('slideRight');
		if (contentEl.classList.toggle('slideLeft')) {
			expandMenu(svgmenu);
		} else {
			collapseMenu(svgmenu);
		}
	};

	let scaleButton = (button) => {
		let check = button.previousElementSibling;
		let animates = check.querySelectorAll('animate');
		
		if (button.classList.contains('expanded')) {
			[button, check].forEach(el => {
				el.classList.remove('expanded');
				setTimeout(() => el.classList.add('collapsed'), 20);
			});

			animates[0].beginElement();
		} else {
			[button, check].forEach(el => {
				el.classList.remove('collapsed');
				setTimeout(() => el.classList.add('expanded'), 20);
			});

			animates[1].beginElement();
		}
	};

	let expandMenu = (svgmenu) => {
		let animates = svgmenu.querySelectorAll('animate');
		let firstDuration = parseInt(animates[1].getAttribute('dur'));
		let secondDuration = parseInt(animates[2].getAttribute('dur'));

		animates[1].beginElement();
		setTimeout(() => animates[2].beginElement(), firstDuration);
		setTimeout(() => animates[3].beginElement(), firstDuration + secondDuration);
		animateItems(svgmenu, {
			dur: "0.6s",
			keyPoints: "0; 1",
			keySplines: "0.35 0 1 1",
			from: "0",
			to: "360"
		});
	};

	let collapseMenu = (svgmenu) => {
		let animates = svgmenu.querySelectorAll('animate');
		let firstDuration = parseInt(animates[2].getAttribute('dur'));
		let secondDuration = parseInt(animates[1].getAttribute('dur'));

		animates[2].beginElement();
		setTimeout(() => animates[1].beginElement(), firstDuration);
		setTimeout(() => animates[0].beginElement(), firstDuration + secondDuration);
		animateItems(svgmenu, {
			dur: "0.4s",
			keyPoints: "1; 0",
			keySplines: "0 0 0.65 1",
			from: "360",
			to: "0"
		});
	};

	let animateItems = (svgmenu, cfg) => {
		let circles = [].slice.call(svgmenu.querySelectorAll('circle'));

		circles.forEach(circle => {
			let animateTransform = circle.querySelector('animateTransform');
			let animateMotion = circle.querySelector('animateMotion');
			
			animateMotion.setAttribute('dur', cfg.dur);
			animateMotion.setAttribute('keyPoints', cfg.keyPoints);
			animateMotion.setAttribute('keySplines', cfg.keySplines);

			animateTransform.setAttribute('dur', cfg.dur);
			animateTransform.setAttribute('from', cfg.from);
			animateTransform.setAttribute('to', cfg.to);

			animateTransform.beginElement();
			animateMotion.beginElement();
		});
	};
	setTimeout(() => document.querySelector('.button').click(), 1e3);
	setTimeout(() => document.querySelector('.button').click(), 3e3);

Demo

See the Pen SVG UI Navigation Concept by Alex Permyakov (@alexdevp) on CodePen.

CodeTea

A Nice collection of often useful examples done in HTML JavaScript CSS.

Read More