Изменить значок активной ссылки на полукруг - PullRequest
2 голосов
/ 03 марта 2020

У меня есть список ссылок li, и я хочу добавить значок полукруга ниже активной ссылки. Как я могу добавить этот значок или, по крайней мере, изменить стрелку на полукруг.

HTML

<ul>
  <li class="current">Home</li>
  <li>About</li>
  <li>Location</li>
</ul>

S CSS

ul {
  li {
    display:inline;
    background-color:#e5e5e5;
    padding:20px 30px;
    position:relative;
    &:hover {
      background-color:#c0c0c0;
      cursor:pointer;
      &:after {
        border-top:#c0c0c0;
      }
    }
    &.current {
      &:after {
      width: 0;
      height: 10px;
      border-left: 15px solid transparent;
      border-right: 15px solid transparent;
      border-top: 15px solid #FFFFFF;
      content:" ";
      border-radius: 100% 100% 100% 100%;
      position: absolute;
      bottom: -20px;
      left: 35%;
      }
    }
  }
}

JS

$('ul li').click(function() {
  $('.current').removeClass('current');
  $(this).addClass('current');
});

рабочий фрагмент:

$('ul li').click(function() {
  $('.current').removeClass('current');
  $(this).addClass('current');
});
ul li {
  display: inline;
  background-color: #e5e5e5;
  padding: 20px 30px;
  position: relative;
}

ul li:hover {
  background-color: #c0c0c0;
  cursor: pointer;
}

ul li:hover:after {
  border-top: #c0c0c0;
}

ul li.current:after {
  width: 0;
  height: 10px;
  border-left: 15px solid transparent;
  border-right: 15px solid transparent;
  border-top: 15px solid #FFFFFF;
  content: " ";
  border-radius: 100% 100% 100% 100%;
  position: absolute;
  bottom: -20px;
  left: 35%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="current">Home</li>
  <li>About</li>
  <li>Location</li>
</ul>

Ответы [ 4 ]

0 голосов
/ 03 марта 2020

Если бы мне пришлось это сделать, я бы сделал это так:

&.current {
  &:after {
    font-size: 32px;
    content: " \25D6";
    position: absolute;
    bottom: -20px;
    left: 35px;
    color: white;
    transform: rotate(90deg);
  }
}
0 голосов
/ 03 марта 2020

Вы уже сделали это очень хорошо. Все, что я сделал, это изменил свой sass на обычный CSS, чтобы он работал в сниппете, а затем немного запутался с позиционированием.

Редактировать: Добавлен лучший полукруг.

$('ul li').click(function() {
  $('.current').removeClass('current');
  $(this).addClass('current');
});
body {
    background-color: yellow;
}
ul li {
    display:inline;
    background-color:#e5e5e5;
    padding:20px 30px;
    position:relative;
}
ul li:hover {
    background-color:#c0c0c0;
    cursor:pointer;
}
ul li:hover::after {
    border-top:#c0c0c0;
}
ul li.current::after {
    background-color: #fff;
    content: " ";
    position: absolute;
    bottom: 0px;
    left: calc(50% - 15px);
    height: 15px;
    width: 30px;
    border-top-left-radius: 30px;
    border-top-right-radius: 30px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="current">Home</li>
  <li>About</li>
  <li>Location</li>
</ul>
0 голосов
/ 03 марта 2020

Я изменил ваш CSS и добавил комментарии, чтобы вы могли видеть, какие свойства затронуты.

Вы можете настроить в соответствии со своими предпочтениями.

$('ul li').click(function() {
  $('.current').removeClass('current');
  $(this).addClass('current');
});
li {
  display: inline;
  background-color: #e5e5e5;
  font-family: calibri, helvetica, arial;
  padding: 20px 30px;
  position: relative;
}

li:hover {
  background-color: #c0c0c0;
  cursor: pointer;
}

li.current:after {
  content: " ";
  
  /* positioning */
  position: absolute;
  bottom: -8px;
  left: 50%;
  transform: translateX(-50%);
  
  /* half circle */
  background: #0f9def;
  border-radius: 0 0 15px 15px; /* half of the width */
  height: 15px; /* half of the width */
  width: 30px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<ul>
  <li class="current">Home</li>
  <li>About</li>
  <li>Location</li>
</ul>
0 голосов
/ 03 марта 2020

Я не знаю, соответствует ли это вашим требованиям и правильно ли я понял, но иметь полукруг на активном элементе класса. Вы можете просто добавить в li overflow: hidden;, чтобы убедиться, что круг не из контейнера. Тогда вы просто добавляете стилизацию к псевдоклассу :: after, как этот

width: 30px;
height: 30px;
bottom: 0;
left: 50%;
transform: translate(-50%, 50%);

Вы просто создаете круг радиусом 15px, половина которого вне коробки с переполнением: скрыто и все. У вас есть полукруг внизу ур.

Конечно, этот стиль должен быть добавлен к тому, что у вас есть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...