I want to make a menu, in which the ends of the menus overlap and they have curved borders and slightly slanting edges.
Without using a background image, is it possi
I think I've solved It.
DEMO
Here is What I've added to The Code given at: http://css-tricks.com/tabs-with-round-out-borders/
I've Just added, background-color
property to pseudo element :before
and :after
of .active
li
's css.
As follows:
.tabs li {
/* Makes a horizontal row */
float: left;
/* So the psueudo elements can be
abs. positioned inside */
position: relative;
/*Make Sure The Li's stays Inline */
display:inline-block;
/* Remove Ugly Chromes `.` */
list-styling:none;
}
.tabs .active a {
/* Colors when tab is active */
background: #aea; /* Added Green Color */
color: black;
}
.tabs li:last-child:after, .tabs li:last-child a:after,
.tabs li:first-child:before, .tabs li:first-child a:before,
.tabs .active:after, .tabs .active:before,
.tabs .active a:after, .tabs .active a:before {
content: "";
background: #afa;
}
.tabs .active:before, .tabs .active:after {
background: white;
background:#afa;
/* Squares below circles */
z-index: 1;
}
.tabs .active a:after, .tabs .active a:before {
background: #ddc385;
}
and here is another fiddle after adding some JQuery
to make it live.
Hope it helps :).
:before
and :after
pseudo elements,-
offsetborder-radius
to :before
and right-top to :after
z-index:1;
to the :after
z-index:1;
to the .active's :before
element.nav li {
display: inline-block;
border-bottom: 1px solid #8BBF50;
margin-left: -20px;
}
nav a {
text-decoration: none;
color: #fff;
background: #8BBF50;
position: relative;
display: inline-block;
margin: 0 22px;
padding: 8px 11px;
text-shadow: 0 1px 0 rgba(0, 2, 0, 0.4);
border-radius: 7px 7px 0 0; /* just to smooth the top edges */
}
nav a:before,
nav a:after {
content: " ";
position: absolute;
top: 0;
width: 23px;
height: 100%;
background-color: inherit;
}
nav a:before {
border-radius: 12px 0 0 0;
transform: skew(-24deg);
left: -13px; /* play with this one to give the LI border ~2px extrusion */
}
nav a:after {
border-radius: 0 12px 0 0;
transform: skew(24deg);
right: -13px; /* play with this one to give the LI border ~2px extrusion */
border-right: 1px solid #628E2F;
z-index: 1; /* overlap next element */
}
/* LI ACTIVE */
nav li.active {
border-bottom: 1px solid #fff;
}
nav li.active a {
color: #8BBF50;
background: #fff;
}
nav li.active a:before {
z-index: 1; /* overlap prev element */
}
nav li.active a:after {
border-bottom: 1px solid #fff;
}
<nav>
<ul>
<li><a>Home</a></li>
<li class="active"><a>About</a></li>
<li><a>Products</a></li>
<li><a>Map</a></li>
<li><a>Contact</a></li>
</ul>
</nav>
The above does not provide the concave curvature at the bottom of the tab, instead I used the LI element border-bottom 2px extrusion to give a slight feeling to the eye. Not perfect but still a nice solution.
live demo on jsBin