Skip to content

Instantly share code, notes, and snippets.

@aldoyh
Last active June 26, 2024 08:14
Show Gist options
  • Save aldoyh/3439769f1705f6873051638fd83a0875 to your computer and use it in GitHub Desktop.
Save aldoyh/3439769f1705f6873051638fd83a0875 to your computer and use it in GitHub Desktop.
Flexbox Google Play Music Website Style
.account
ul
li.ripple Sign Out
li.ripple Switch account
li.ripple Send feedback
li.ripple Help
.side-menu
.menu-holder
button(type='menu').menu
p Google Play
span Music
ul
li Listen Now
li Top Charts
li New Releases
li.active Music Library
li Podcasts
li Browse Stations
li Shop
- for(var x = 1;x <= 10;x++)
li Lorem Ipsum...
button(type='button').cta Subscribe Now
.side-menu-overlay
header
button(type='menu').menu.ripple
h1 Music library
input(id="input" type='text' placeholder='Search').desktop-only
label(for='input').mobile-only.ripple
.profile
ul
li.ripple Playlists
li.ripple Stations
li.ripple Artists
li.ripple.active Albums
li.ripple Songs
li.ripple Genres
.slider
main
- for(var x = 1;x <= 34;x++)
.card.ripple
- for(var x = 1;x <= 12;x++)
.card.ghost
function tabSlider() {
var $li1 = $('header li:nth-child(1)').outerWidth(),
$li2 = $('header li:nth-child(2)').outerWidth(),
$li3 = $('header li:nth-child(3)').outerWidth(),
$li4 = $('header li:nth-child(4)').outerWidth(),
$li5 = $('header li:nth-child(5)').outerWidth(),
$li6 = $('header li:nth-child(6)').outerWidth();
if ($('header li:nth-child(1)').hasClass('active')) {
$('.slider').css({
'transform': 'translate(0, 0)',
'width': $li1
});
} else if ($('header li:nth-child(2)').hasClass('active')) {
$('.slider').css({
'transform': 'translate(' + $li1 + 'px, 0)',
'width': $li2
});
} else if ($('header li:nth-child(3)').hasClass('active')) {
$('.slider').css({
'transform': 'translate(' + ($li1 + $li2) + 'px, 0)',
'width': $li3
});
} else if ($('header li:nth-child(4)').hasClass('active')) {
$('.slider').css({
'transform': 'translate(' + ($li1 + $li2 + $li3) + 'px, 0)',
'width': $li4
});
} else if ($('header li:nth-child(5)').hasClass('active')) {
$('.slider').css({
'transform': 'translate(' + ($li1 + $li2 + $li3 + $li4) + 'px, 0)',
'width': $li5
});
} else if ($('header li:nth-child(6)').hasClass('active')) {
$('.slider').css({
'transform': 'translate(' + ($li1 + $li2 + $li3 + $li4 + $li5) + 'px, 0)',
'width': $li6
});
}
};
function cardHeight() {
$('.card').each(function() {
$(this).height($(this).width() + 56);
});
};
function headerPadding() {
var $headerHeight = $('header').outerHeight();
$('main').css('padding-top', $headerHeight);
};
$(function() {
"use strict";
tabSlider();
cardHeight();
// TABS
$('header li').on('click', function() {
$('header li').removeClass('active');
$(this).addClass('active');
tabSlider();
});
// CARD HEIGHT & 'MAIN' PADDING
$(window, 'main').resize(function() {
cardHeight();
headerPadding();
}).resize();
// HEADER SHADOW
$(window).scroll(function() {
if ($(this).scrollTop() >= 10) {
$("header").addClass("shadow");
} else {
$("header").removeClass("shadow");
}
});
// MENU
$('.menu, .side-menu-overlay').on('click', function() {
var $sidebarWidth = $('.side-menu').width();
$('.side-menu').toggleClass('active');
if ($('.side-menu').hasClass('active')) {
$('header, main').css('width', 'calc(100% - ' + $sidebarWidth + 'px)');
} else {
$('header, main').css('width', '100%');
}
});
// PROFILE MENU
$('.profile').on('click', function() {
$('.account').toggleClass('active');
});
$(document).on("click", function(e) {
if (($(".account").hasClass("active")) && (!$(".account, .account *, .profile").is(e.target))) {
$(".account").toggleClass("active");
}
});
$(window).scroll(function() {
$('.account').removeClass('active');
});
// MOBILE SEARCH BUTTON
$('label.mobile-only').on('click', function() {
$(this).toggleClass('close');
$('body').toggleClass('mobile-input');
})
// RIPPLE
// CODE FROM HENDRY SADRAK'S PEN - https://codepen.io/hendrysadrak/pen/yNKZWO
$(document).on('click', '.ripple', function(e) {
var $ripple = $('<span class="rippling" />'),
$button = $(this),
btnOffset = $button.offset(),
xPos = e.pageX - btnOffset.left,
yPos = e.pageY - btnOffset.top,
size = 0,
animateSize = parseInt(Math.max($button.width(), $button.height()) * Math.PI);
$ripple.css({
top: yPos,
left: xPos,
width: size,
height: size,
backgroundColor: $button.attr("ripple-color"),
opacity: $button.attr("ripple-opacity")
})
.appendTo($button)
.animate({
width: animateSize,
height: animateSize,
opacity: 0
}, 500, function() {
$(this).remove();
});
});
// IOS STUFF
if (navigator.userAgent.match(/(iPod|iPhone|iPad)/)) {
$('body').addClass('ios');
}
});
<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
// RESIZE THE WINDOW TO SEE THE MOBILE VIEW
$white: #FFF;
$black: #000;
$brand: #FF5722;
$brandContrast: #536DFE;
$text: #212121;
$background: #F5F5F5;
$font-stack: 'Roboto',
'Helvetica',
'sans-serif';
$profile: 'https://lh3.googleusercontent.com/-UOuFk3MaIyE/AAAAAAAAAAI/AAAAAAAAAAA/AOtt-yEtASpZiUmh0TBq1JxqceBZswmVVg/s32-c-mo/photo.jpg';
$cards: url(https://lh3.googleusercontent.com/f9fTwo3eV8nwjrjGtp52cOdjtfImjnSG-AmaLqmhx74G1hRD-40HtLZJ7Zt-Ig6ZZX4QYcr8hQ) url(https://lh3.googleusercontent.com/X9_1hqQ64YB2nUj8DaQ8Cq0gfTxV-8M5olNz4KZeBRyuP_xARFGq_txPoZ036JHb3zmtBNjYyw) url(https://lh3.googleusercontent.com/EReUo1F8zEmcs-zBgFVq1HqGdND8eLEMXbyFSDKTS5GD3T9pprprFbXsOJSaUXFo_L8b8w6xmKE) url(https://lh3.googleusercontent.com/ngZFFNzbUYWxfBBieWVbe1s2zqLbppu-cUA8tjWCztqlWtfFm3sHXymOchrJi2rfGVORBfSBlVs) url(https://lh3.googleusercontent.com/fUgD06Kz-yTZl-9UnTxBks6dOLwdp3tTEEhvYrT9WtN9Jaf25TklMTfNXFUSWXiz04PBdiKHoA) url(https://lh3.googleusercontent.com/ImqVw-h_GF1R26AjTr8kPwXH5cK8gYk5fFZJ6p7hFD17Cpd-BsiZudWWS-aVU2ws3wU5DiQZxg) url(https://lh3.googleusercontent.com/Vdf53IqQIkNUvq4I7B1FamSywJSjckktikYlCf1YgZb2sy9cMc8sZeBV6pbYIiyJj3iqcg5EWw) url(https://lh3.googleusercontent.com/PONxOYTAVFLbcjN41cNGN_BI6bCFFHNjOSzmCcOMrEsvqjfqR8akF4J0riKQIl89BqBWkHJThg) url(https://lh3.googleusercontent.com/3chpS1Utl_rH49pwob25TQiiafz8yFg8NMb2KWTU4PFhT7ip0wzq-YM4EuNRgClMXGdno-jAj18) url(https://lh3.googleusercontent.com/NuxebnbEsrFnHzihs_7_BPkzu-cGy1KBUqew51Srj0hqHkbuQVfB95o21kg5y2ZRD1AYF_nD) url(https://lh3.googleusercontent.com/oOBpMMGjy6DvWCs7ouK8e3gY8-UhHqvEZy5k6o49uTgjn2Xdxf_y8sBj-ey1WxNorA5yqvYFhw) url(https://lh3.googleusercontent.com/YIrKm7ypJgjquG9bPCpEUcYpGScuoIZ5J5fiqlU5VK5Ko6NamWCnyaH0ydo21Wx63q0L-6C0) url(https://lh3.googleusercontent.com/egm4NgIK-Cmh84GjVgHoATP6DYyCS0_zMvJ8DStQ_io6TPb75NKWtbIBaWPkOJ570-7ra7UKwPw) url(https://lh3.googleusercontent.com/kLRVb3qkSFvnd29cYLZWX47kXTVqVrv2rEO7j9Ogl27vwZwZKGsTnPVN-sit46tWq6i19Ri_PEc) url(https://lh3.googleusercontent.com/CZRaaeCItNnBbKLcos4zEO4EpTpxDRtPldLJ3waQB6wkz36eaIRBJh58VHeOXIj1wx--RMT5) url(https://lh3.googleusercontent.com/DGW6KDjPbsjfOmc2r-9oNfwPwvP3NB-AUv19UPzu5zGs27XEeK-q50lh0i0C1YllpAERaQNF) url(https://lh3.googleusercontent.com/YNyTvjNR26p_tgfkTEHnxj-z1SsdeP44vNzAkJ3eGgSKlQJjCs-lIEmYMv7_B1sxhp2HtpCuwog) url(https://lh3.googleusercontent.com/XKAtazwLKNM6u0--WGkZNBV6uOKZTLaZp0TV8XkIBTz0jNccHl8xOYkftW4s8PrtDlxqDmlrZmI) url(https://lh3.googleusercontent.com/LMKahLP_T6kr88DtYnpFK7IkJArbsuZNAZo6xd4WvVDBMhwXxATBUYfX6wWUYvzYwHWwxFU9Sw) url(https://lh3.googleusercontent.com/DbxZFMU64VjJdHPXFIN-ESMOUl4nmJr488scL6MftIAw2__MCPT_6R_xQnwlVNl0R2eL1__q2_Q) url(https://lh3.googleusercontent.com/uASJMQyWGjpbZ8yb6Is-8odp5oOGlfsrlB1hL5IhIfZTpz7g3yrz56X_NEmuKRKsAkXkTixMdw) url(https://lh3.googleusercontent.com/Cd8WRMaG_pDwjTC_dSPIIuf5EJEHUwPOLDreeXPx8wEZgZIZ7yhKBUBeTKsDCMcmJHgW0w7a5Q) url(https://lh3.googleusercontent.com/TFsXkyvcwPtlcBYmyl7Mae8C7DjKbsbSmr4rgIotGPyY-m56SLwC-3qZGPZGpNzETZHhxVqJ) url(https://lh3.googleusercontent.com/3MgcwzgSJ32oIbxgquneCvu3oJKVC6Pae-Saho7jfbCcRoA6KlU7qn8EUsqaTT6dsy5jbNuJ) url(https://lh3.googleusercontent.com/BbYJotljs9GKwGiepqF8nmYDQXPCr2hE0c3RmEN7SDJdtEnXVYLJb6XX0wjC9n1Plq-0VChaWWA) url(https://lh3.googleusercontent.com/JP1KT3xUA-MFA8tLRHC3CvX6nphBYLpCzxB6eIthMYXvF0dXX7I7NITpBT0E3B07CiqRzCqkPQ) url(https://lh3.googleusercontent.com/IreFr66xedOo8t8IPGfAoo2BsTZl3ZslJKQFVIePoVitbFOZgIZhvFKMrCuWoWXi2n2zjTxp) url(https://lh3.googleusercontent.com/1LASHQy0shPSJDGINtkZU6Tb6N1IJOL-GzaUEvOEM0zncK_0JvqZrC-YFvGmPBQEpLanHrft8g) url(https://lh3.googleusercontent.com/FGek_ecdpTCLFbprT7rpADyclgFOgytCXz8z29qT1NpndYfHGfBbJAtwu5TpHtD3u6tB7tHCXA) url(https://lh3.googleusercontent.com/iZ4R5KkC2FSarH6J5nr6FvjmEphjckn0jV1fYLCi3L0Mmr2cUHpDHd5m7gokYKCISxOXDXPLvA) url(https://lh3.googleusercontent.com/s0o3GbvRKoEA3hBKTooThA45XtL7WpcuZ6SOYHB54vhu-Nj6TYDgiakW20O4VPwRcsjzOVsI2g) url(https://lh3.googleusercontent.com/daoWdc25TW5w3DR-GaFuU7KKnQxXgYuP9BIShuOExSfs0Hj_83ahdOq2o3S09TVMq9uHKtZ-tsU) url(https://lh3.googleusercontent.com/E4yy2RMMtXGxVCOW7mhRpyNW3FLnSuMQziDXNgsBfDSQMxRUY8rKr4phBL29Sbx1lBKzTwLbHQ) url(https://lh3.googleusercontent.com/Usv4XpVgsaxemkOG-Na0ba8b2Mqd7houicvj1jY7l6HMOb8uuE_EPLPpzjIDUvNbAa1xD7F9GQ);
@mixin size($width, $height: $width) {
width: $width;
height: $height;
}
// RESET
*,
:before,
:after {
box-sizing: border-box;
margin: 0;
padding: 0;
-webkit-tap-highlight-color: rgba($black, 0);
}
// GENERAL
body {
background: $background;
font-family: $font-stack;
}
header,
main {
display: flex;
flex-wrap: wrap;
width: 100%;
min-width: 300px;
top: 0;
right: 0;
will-change: width;
transform: translateZ(0);
transition: .3s;
}
button,
input {
background: transparent;
border: none;
outline: none;
font-family: $font-stack;
-webkit-appearance: none;
}
.menu {
@include size(40px);
border-radius: 50%;
margin: 12px;
cursor: pointer;
transition: background-color .2s;
}
.mobile-only {
display: none;
}
.ripple {
overflow: hidden;
position: relative;
-webkit-transform: translateZ(0);
.rippling {
position: absolute;
border-radius: 50%;
background-color: #FFF;
pointer-events: none;
opacity: .4;
transform: translate3d(-50%, -50%, 0);
}
}
// HEADER
header {
align-items: center;
background: $brand;
color: $white;
position: fixed;
z-index: 5;
&.shadow {
box-shadow: 0 3px 12px rgba(0, 0, 0, 0.23), 0 3px 12px rgba(0, 0, 0, 0.16);
}
.menu {
background: url(https://cbwconline.com/IMG/Codepen/Menu.svg) center no-repeat;
&:hover {
background-color: darken($brand, 8%);
}
}
h1 {
font-weight: 400;
font-size: 20px;
}
input {
background: rgba($white, .3);
width: 50vw;
max-width: 800px;
height: 48px;
padding: 12px;
border-radius: 3px;
margin: 5px auto;
color: $white;
transition: .3s, width .01s;
&:focus,
&:active {
background: $white;
color: $black;
box-shadow: 0 8px 10px 1px rgba($black, .1);
}
}
label {
@include size(36px);
background: url(https://cbwconline.com/IMG/Codepen/Search-White.svg) center no-repeat;
border-radius: 50%;
&.close {
background: url(https://cbwconline.com/IMG/Codepen/Close-White.svg) center no-repeat;
}
}
label {
margin-left: auto;
}
.profile {
@include size(36px);
background: url($profile) center/contain no-repeat;
border-radius: 50%;
margin: 0 15px;
}
ul {
display: flex;
width: 100%;
position: relative;
overflow-x: auto;
-webkit-overflow-scrolling: touch;
}
li {
flex-shrink: 0;
list-style: none;
padding: 15px;
color: rgba($white, .8);
font-size: 14px;
font-weight: 500;
text-transform: uppercase;
user-select: none;
cursor: pointer;
&.active {
color: $white;
}
}
.slider {
height: 3px;
background: $white;
position: absolute;
bottom: 0;
left: 0;
transition: .3s;
}
}
// MAIN
main {
justify-content: center;
position: absolute;
}
// CARDS
.card {
@for $i from 1 through length($cards) {
&:nth-child(#{$i}) {
background-image: nth($cards, $i);
}
}
background-size: contain;
box-shadow: 0 1px 4px 0 rgba($black, .35);
flex: 1 1 180px;
margin: 10px;
position: relative;
transition: box-shadow .2s;
cursor: pointer;
&:hover {
box-shadow: 0 2px 2px 0 rgba(0,0,0,0.2),0 6px 10px 0 rgba(0,0,0,0.3);
}
&:after {
content: 'Lorem Ipsum...';
background: #FFF;
height: 56px;
width: 100%;
padding: 10px;
position: absolute;
bottom: 0;
left: 0;
}
&.ghost {
height: 0 !important;
margin: 0 10px;
&:after {
display: none;
}
}
}
// MENU
.side-menu {
justify-content: center;
flex-wrap: wrap;
background: $white;
height: 100%;
width: 225px;
position: fixed;
top: 0;
left: 0;
z-index: 10;
transform: translateX(-100%) translateZ(0);
transition: .3s;
overflow-y: auto;
will-change: transform;
-webkit-overflow-scrolling: touch;
&.active {
transform: translateX(0) translateZ(0);
~ header .menu {
width: 0px;
margin: 12px 8px;
}
}
.menu-holder {
display: flex;
align-items: center;
span {
color: $brand;
}
}
.menu {
background: url(https://cbwconline.com/IMG/Codepen/Menu-Black.svg) center no-repeat;
&:hover {
background-color: #EEE;
}
}
li {
list-style: none;
color: $text;
font-size: 13px;
font-weight: 500;
padding: 10px 0 10px 18px;
cursor: pointer;
white-space: nowrap;
line-height: 24px;
transition: .2s;
&:hover {
background: #EEE;
}
&.active {
color: $brand;
background: $background;
}
}
.cta {
display: block;
background: $brandContrast;
color: $white;
font-size: 16px;
text-transform: uppercase;
padding: 5px 8px;
border-radius: 3px;
cursor: pointer;
margin: 20px auto;
}
}
// OVERLAY
.side-menu-overlay {
height: 100%;
width: 100%;
background: rgba($black, .3);
position: fixed;
top: 0;
left: 0;
z-index: 9;
visibility: hidden;
opacity: 0;
transition: .3s;
}
// aCCOUNT ACTIONS
.account {
background: #EEE;
position: fixed;
top: 62px;
right: 15px;
z-index: 6;
opacity: 0;
visibility: hidden;
transform: scale(.5);
transform-origin: top right;
transition: .15s;
box-shadow: 0 1.5px 4px rgba(0, 0, 0, 0.24), 0 1.5px 6px rgba(0, 0, 0, 0.12);
&:after {
content: '';
@include size(15px);
background: inherit;
position: absolute;
top: -6px;
right: 8px;
opacity: 0;
visibility: hidden;
transform: rotate(45deg) scale(.5);
transition: .15s;
}
&.active {
&:after {
opacity: 1;
visibility: visible;
transform: rotate(45deg) scale(1)
}
opacity: 1;
visibility: visible;
transform: scale(1);
}
li {
padding: 12px 16px;
list-style: none;
font: 300 16px Roboto;
cursor: pointer;
transition: .3s;
&:hover {
background: darken(#EEE, 5%);
}
}
}
// PLACEHOLDERS
::-webkit-input-placeholder {
color: rgba($white, .7);
font-size: 16px;
}
::-moz-placeholder {
color: rgba($white, .7);
font-size: 16px;
}
:-ms-input-placeholder {
color: rgba($white, .7);
font-size: 16px;
}
// MEDIA QUERIES
@media (max-width: 1000px) {
.side-menu.active ~ header input {
width: calc(50vw - 100px);
}
}
@media (max-width: 767px) {
.side-menu.active {
~ header .menu {
margin: 12px;
width: 40px;
}
~ header,
~ main {
width: 100% !important;
}
~ header input {
width: 50vw;
}
~ .side-menu-overlay {
visibility: visible;
opacity: 1;
}
}
.card {
flex-basis: 165px;
}
}
@media (max-width: 599px) {
.desktop-only {
display: none;
}
.mobile-only {
display: inherit;
}
.profile {
margin: 16px !important;
}
header input {
display: none;
padding: 0px 12px;
font: 400 16px/18px Roboto !important;
width: calc(100vw - 130px);
}
.mobile-input {
header h1,
header .menu {
display: none;
}
input {
display: initial;
}
}
}
@media(max-width: 480px) {
.card {
flex-basis: 140px;
}
}
// IOS STUFF
.ios * {
cursor: pointer;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment