Проблема с некоторыми из ответов, которые я видел до сих пор, состоит в том, что текст становится перекошенным.<li>
s уже выделены курсивом, но добавление асимметрии к элементам делает эффект чрезмерно выраженным.
Мы хотим, чтобы коробки были перекошены, нотекст оставлен в покое.
Чтобы сделать это, я добавляю span
к каждому li
и отсекаю текст в обратном направлении.
/* Keep things organized and store skew value in CSS variable */
:root {
--skew-value: -20deg;
}
.ml {
list-style-type: none;
margin: 0;
padding: 0;
}
.ml li {
display: inline-block;
border: solid 1px #000;
font-style: italic;
padding: 5px 10px;
/* Skew the box */
transform: skew(var(--skew-value));
}
.ml li > span {
/* Unskew the text */
transform: skew(calc(var(--skew-value) * -1));
display: inline-block;
}
.ml li.active,
.ml li:hover {
background: #000;
color: #ffffff
}
<ul class="ml">
<li class="active"><span>day</span></li>
<li><span>week</span></li>
<li><span>month</span></li>
<li><span>year</span></li>
</ul>
http://jsfiddle.net/xftywz1h/