Добавить внутреннюю угловую границу в активное меню

Я пытаюсь создать внутреннюю изогнутую границу для активного/выбранного меню. Ниже фрагмента пока что все, что я могу сделать, квадратный угол не должен быть виден. Решения от google, похоже, не помогают... Пожалуйста, помогите мне поиграть с ним. Спасибо, парни!

FIDDLE ЗДЕСЬ.

body {
  background:#eee;width:90%;margin:20px auto
}
ul {
  margin: 0;
  padding: 0;
}
ul li {
  display: inline-block;
  list-style: none;
  position: relative;
  vertical-align:bottom;
}
ul li a {
  padding: 10px 15px;
  display: block;
  line-height: 25px;
  margin-bottom:-1px;
}
ul li.active a {
  background:#fff;
  border:1px solid #aaa;
  border-bottom:0;
  border-radius:5px 5px 0 0;
}

ul li.active:before,
ul li.active:after {
  content:"";
  position:absolute;
  bottom:-1px;
  width:10px;
  height:10px;
  border:solid #aaa;
}
ul li.active:before {
  left:-10px;
  border-radius:8px 0;
  border-width:0 1px 1px 0
}
ul li.active:after {
  right:-10px;
  border-radius: 0 8px;
  border-width:0 0 1px 1px;
}

.content {
  border:1px solid #aaa;background:#fff;height:200px
}
<ul>
    <li><a href="#">tab 1</a></li>
    <li class="active"><a href="#">tab2</a></li>
    <li><a href="#">tab3</a></li>
    <li><a href="#">tab4</a></li>
</ul>
<div class="content"></div>

Ответ 1

Это мое решение. Но я надеюсь, что там есть лучшее решение... Я использую псевдоэлемент активного a для создания белой границы, чтобы скрыть острый угол.

body {
  background:#eee;width:90%;margin:20px auto
}
ul {
  margin: 0;
  padding: 0;
}
ul li {
  display: inline-block;
  list-style: none;
  position: relative;
  vertical-align:bottom;
}
ul li a {
  padding: 10px 15px;
  display: block;
  line-height: 25px;
  margin-bottom:-1px;
}
ul li.active a {
  background:#fff;
  border:1px solid #aaa;
  border-bottom:0;
  border-radius:5px 5px 0 0;
}

ul li.active:before,
ul li.active:after {
  content:"";
  position:absolute;
  bottom:-1px;
  width:10px;
  height:10px;
  border:solid #aaa;
}
ul li.active:before {
  left:-10px;
  border-radius:50% 0;
  border-width:0 1px 1px 0;
  box-shadow: 1px 1px white;
}
ul li.active:after {
  right:-10px;
  border-radius: 0 50%;
  border-width:0 0 1px 1px;
  box-shadow: -1px 1px white;
}

.content {
  border:1px solid #aaa;background:#fff;height:200px
}
<ul>
    <li><a href="#">tab 1</a></li>
    <li class="active"><a href="#">tab2</a></li>
    <li><a href="#">tab3</a></li>
    <li><a href="#">tab4</a></li>
</ul>
  <div class="content"></div>

Ответ 2

Вы можете использовать белый квадратный блок :before и :after элемент li.active a и позиционировать его так, чтобы он находился между радиусом и li:

ul li.active a:before,
ul li.active a:after {
  content: "";
  position: absolute;
  background-color: white;
  height: 11px;
  width: 10px;
  bottom: -1px;
}

ul li.active a:before {
  left: -6px;
  z-index: 1;
}
ul li.active a:after {
  right: -6px;
  background-color: white;
  z-index: 6;
}

ul li.active:before {
  left:-10px;
  border-radius:8px 0;
  border-width:0 1px 1px 0;
  z-index: 5; // <<< This too
}
ul li.active:after {
  right:-10px;
  border-radius: 0 8px;
  border-width:0 0 1px 1px;
  z-index: 10; // <<< And here
}

http://jsfiddle.net/be5ceL9z/4/

Это, по существу, просто покрывает квадратные нижние углы элементов li.active и #content, манипулируя небольшими квадратными элементами, чтобы покрыть их, но находиться под граничным радиусом li.active:before и :after.

Более подробное объяснение (любезность atomictom ответ):

https://css-tricks.com/tabs-with-round-out-borders/

Ответ 3

Вот пример того, как это может быть достигнуто с помощью комбинации поворота и теней коробки:

Изначально у вас есть прямоугольный div/element:

    +---------+
    | ELEMENT |
    +---------+

Из этого вы можете позиционировать псевдоэлемент с обеих сторон нижних углов с радиусом границы 50% (чтобы сделать круг)

    +---------+
    | ELEMENT |
   O+---------+O

Поскольку я не задал цвет фона, вы не увидите этого.

Я установил границу для обоих, но затем установил три цвета сторон в "прозрачный" (так что вы видите только одну рамку).

Вращение означает, что вы можете сделать "изогнутую границу угла" для каждой стороны:

    +---------+
    | ELEMENT |
   )+---------+(

Использование тени окна означает, что вы можете скрыть "нижний угол элементов":

    +---------+
    | ELEMENT |
   ) --------- (

Затем установка цвета нижней границы для активного элемента elelemtn означает, что он тогда "скрыт":

    +---------+
    | ELEMENT |
    )         ( <-- rotated slightly to create your corner


DEMO

/*FOR DEMO ONLY*/


$(document).ready(function() {
  $('.menu div').click(function() {
    $('.menu div').removeClass("act");
    $(this).addClass("act");
  });
});
html {
  background: lightgray;
}
.menu div {
  display: inline-block;
  height: 50px;
  width: 100px;
  background: white;
  margin: 10px;
  position: relative;
  text-align: center;
  border-radius: 10px 10px 0 0;
  border: 2px solid black;
  cursor:pointer;
}
.menu .act {
  border-bottom-color: white;
  z-index: 40;
}
.act:before,
.act:after {
  content: "";
  position: absolute;
  bottom: -2px;
  height: 20px;
  width: 20px;
  border-radius: 50%;
  border: 2px solid transparent;
  z-index: 30;
}
.act:before {
  left: 100%;
  border-left-color: black;
  -webkit-transform: rotate(-40deg);
  -moz-transform: rotate(-40deg);
  transform: rotate(-40deg);
  box-shadow: -20px 2px 0 0 white;
}
.act:after {
  right: 100%;
  border-right-color: black;
  -webkit-transform: rotate(40deg);
  -moz-transform: rotate(40deg);
  transform: rotate(40deg);
  box-shadow: 20px 2px 0 0 white;
}
.panel {
  width: 80vw;
  margin-top: -12px;
  background: white;
  border-top: 2px solid black;
  z-index: 20;
  padding-top: 12px;
  position: relative;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="menu">
  <div>1</div>
  <div class="act">2</div>
  <div>3</div>
</div>

<div class="panel">Don't you wish Tabs could just be easy?</div>

Ответ 4

Я бы просто прокомментировал, но мне не позволено. Это эффект, который вы после?

https://css-tricks.com/tabs-with-round-out-borders/

Похоже, вам нужен еще один элемент psuedo.