Skip to content

Instantly share code, notes, and snippets.

@kublaj
Created September 25, 2013 12:42
Show Gist options
  • Save kublaj/6699073 to your computer and use it in GitHub Desktop.
Save kublaj/6699073 to your computer and use it in GitHub Desktop.
Tabbed widget (CSS)
@import '../../shared/mixins',
'../../shared/reset',
'../../shared/about-dark';
/*
* Copyright (c) 2013 Thibaut Courouble
* http://www.cssflow.com
*
* Licensed under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*/
/* Note: this implementation is very hacky.
You may not want to use it in production. ;) */
body {
font: 12px/20px 'Lucida Grande', Verdana, sans-serif;
color: #404040;
background: #eee;
}
.widget {
position: relative;
margin: 50px auto;
width: 320px;
background: white;
border: 1px solid #ccc;
border-radius: 4px;
@include box-shadow(0 0 8px rgba(black, .07));
}
.widget-tabs {
position: absolute;
top: 0;
left: 0;
right: 0;
padding: 9px 12px 0;
text-align: left;
/* Make the last tab in the DOM the left-most tab on the screen.
That way we can activate it by default and still be able to
deactivate it later using the ~ selector. */
direction: rtl;
background: #f5f5f5;
border-bottom: 1px solid #ddd;
border-radius: 3px 3px 0 0;
}
.widget-tab,
%inactive-widget-tab {
position: relative;
display: inline-block;
vertical-align: top;
margin-top: 3px;
line-height: 36px;
font-weight: normal;
color: #999;
background: #fcfcfc;
border: solid #ddd;
border-width: 1px 1px 0;
border-radius: 5px 5px 0 0;
/* Reset %active-widget-tab */
padding-bottom: 0;
bottom: auto;
> .widget-tab-link {
margin: 0;
border-top: 0;
}
}
.widget-tab + .widget-tab { margin-right: -1px; }
.widget-tab:last-child, // The left-most tab
%active-widget-tab {
bottom: -1px;
margin-top: 0;
padding-bottom: 2px;
line-height: 34px;
font-weight: bold;
color: #555;
background: white;
border-top: 0;
> .widget-tab-link {
margin: 0 -1px;
border-top: 4px solid #4cc8f1;
}
}
/* Deactivate the default tab when a preceding tab is activated. */
%active-widget-tab ~ .widget-tab { @extend %inactive-widget-tab; }
.widget-tab-link {
display: block;
min-width: 60px;
padding: 0 15px;
color: inherit;
text-align: center;
text-decoration: none;
border-radius: 4px 4px 0 0;
}
.widget-list {
display: none;
padding-top: 50px;
> li + li { border-top: 1px solid #e8e8e8; }
/* The last list is activated (visible) by default. */
&:last-of-type { display: block; }
&:target {
display: block;
/* Hide the default list when another is activated. */
~ .widget-list { display: none; }
/* First list activates the first tab, second list activates the second tab, etc. */
&:first-of-type ~ .widget-tabs > .widget-tab:first-child { @extend %active-widget-tab; }
&:nth-of-type(2) ~ .widget-tabs > .widget-tab:nth-child(2) { @extend %active-widget-tab; }
&:last-of-type ~ .widget-tabs > .widget-tab:last-child { @extend %active-widget-tab; }
}
}
.widget-list-link {
display: block;
line-height: 18px;
padding: 10px 12px;
font-weight: bold;
color: #555;
text-decoration: none;
cursor: pointer;
&:hover { background: #f7f7f7; }
li:last-child > & { border-radius: 0 0 3px 3px; }
> img {
float: left;
width: 32px;
height: 32px;
margin: 2px 12px 0 0;
}
> span {
display: block;
font-size: 11px;
font-weight: normal;
color: #999;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment