Проблема с полями при подчеркивании при наведении курсора

#javascript #html #css #nav #underline

#javascript #HTML #css #навигация #подчеркивание

Вопрос:

Недавно я пытался создать эффект подчеркивания при наведении курсора. Я использовал некоторые предыдущие JavaScript, но проблема, похоже, в том, что при наведении курсора на ссылку она останавливается преждевременно. Я считаю, что должна быть проблема с левым полем, которое я установил в JS, но я не уверен, что делать дальше

 $(".underline-nav").css("width", $("#one").width());
$(".underline-nav").css("margin-left", $("#one").css("margin-left"));
var unav = $(".underline-nav");
$('nav a').mouseover(function() {
  $(".underline-nav").css("transition", "all ease 0.43s");
  var position = $(this).position();
  unav.css({
    "width": $(this).width(),
    "margin-left": $(this).css("margin-left"),
    "left": position.left
  });
})
$('nav').mouseleave(function() {
  $(".underline-nav").css("transition", "all ease 0.7s");
  var firstChild = $(this).find('a:first-child');
  var position = firstChild.position();
  unav.css({

    "width": firstChild.width(),
    "margin-left": firstChild.css("margin-left"),
    "left": position.left
  });
}) 
 html {
  background-color: blue;
}

.underline-nav {
  background: tomato;
  height: .25rem;
  position: absolute;
  top: 6vh;
  transition: all ease 0.37s;
  z-index: 0;
}

.mainnav {
  padding-top: 1vh;
  width: 100%;
  position: absolute;
  z-index: 4;
  font-size: 0.8vw;
  text-align: center;
  display: flex;
  justify-content: center;
  align-items: center;
}

nav img {
  padding-left: 4vw;
  height: 3.5vw;
}

a {
  color: #fff;
  text-decoration: none;
  font-weight: 700;
  padding-left: 4vw;
  letter-spacing: 0.4em;
}

.sectionone {
  height: 100vh;
  background: url('media/bg.jpg') no-repeat center center fixed;
  background-size: cover;
  color: #fff;
  font-family: 'Raleway';
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav>
  <div class="mainnav">
    <a id="one" href="#">HOME</a>
    <a href="#">LINK 1</a>
    <a href="#">LINK 2</a>
    <img src="/media/Asset 1.png" alt="logo">
    <a href="#">LINK 3</a>
    <a href="#">LINK 4</a>
    <a href="#">LINK 5</a>
    <div class="underline-nav">
    </div>
  </div>
</nav> 

CODEPEN:
https://codepen.io/anon/pen/xeYGbK

Спасибо, ребята

Ответ №1:

Вы также должны учитывать отступы в ваших ссылках и, в конечном счете, высоту строки. Обновление css может быть :

 .underline-nav {
  margin-top:1.2vw;/* set underline under the link */
  transform : translatex(4vw);/* padding value */
}
 

демо
-версия https://codepen.io/anon/pen/ZZrGvd

 $(".underline-nav").css("width", $("#one").width());
$(".underline-nav").css("margin-left", $("#one").css("margin-left"));
var unav = $(".underline-nav");
$('nav a').mouseover(function() {
  $(".underline-nav").css("transition", "all ease 0.43s");
  var position = $(this).position();
  unav.css({
    "width": $(this).width(),
    "margin-left": $(this).css("margin-left"),
    "left": position.left
  });
})
$('nav').mouseleave(function() {
  $(".underline-nav").css("transition", "all ease 0.7s");
  var firstChild = $(this).find('a:first-child');
  var position = firstChild.position();
  unav.css({

    "width": firstChild.width(),
    "margin-left": firstChild.css("margin-left"),
    "left": position.left
  });
}) 
 html {
  background-color: blue;
}

body {
  margin: 0;
}

.underline-nav {
  background: tomato;
  height: .25rem;
  position: absolute;
  top: 6vh;
  margin-top: 1.2vw;
  transform: translatex(4vw);
  transition: all ease 0.37s;
  z-index: 0;
}

.mainnav {
  padding-top: 1vh;
  width: 100%;
  position: absolute;
  z-index: 4;
  font-size: 0.8vw;
  text-align: center;
  display: flex;
  justify-content: center;
  align-items: center;
}

nav img {
  padding-left: 4vw;
  height: 3.5vw;
}

a {
  color: #fff;
  text-decoration: none;
  font-weight: 700;
  padding-left: 4vw;
  letter-spacing: 0.4em;
}

.sectionone {
  height: 100vh;
  background: url('media/bg.jpg') no-repeat center center fixed;
  background-size: cover;
  color: #fff;
  font-family: 'Raleway';
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav>
  <div class="mainnav">
    <a id="one" href="#">HOME</a>
    <a href="#">LINK 1</a>
    <a href="#">LINK 2</a>
    <img src="/media/Asset 1.png" alt="logo">
    <a href="#">LINK 3</a>
    <a href="#">LINK 4</a>
    <a href="#">LINK 5</a>
    <div class="underline-nav">
    </div>
  </div>
</nav> 

Ответ №2:

Я сменил padding-left a его на margin-left , и, похоже, он работает отлично. Я надеюсь, что это то, что вы хотите

 $(".underline-nav").css("width", $("#one").width());
$(".underline-nav").css("margin-left", $("#one").css("margin-left"));
var unav = $(".underline-nav");
$('nav a').mouseover(function() {
  $(".underline-nav").css("transition", "all ease 0.43s");
  var position = $(this).position();
  unav.css({
    "width": $(this).width(),
    "margin-left": $(this).css("margin-left"),
    "left": position.left
  });
})
$('nav').mouseleave(function() {
  $(".underline-nav").css("transition", "all ease 0.7s");
  var firstChild = $(this).find('a:first-child');
  var position = firstChild.position();
  unav.css({

    "width": firstChild.width(),
    "margin-left": firstChild.css("margin-left"),
    "left": position.left
  });
}) 
 html {
  background-color: blue;
}

.underline-nav {
  background: tomato;
  height: .25rem;
  position: absolute;
  top: 6vh;
  transition: all ease 0.37s;
  z-index: 0;
}

.mainnav {
  padding-top: 1vh;
  width: 100%;
  position: absolute;
  z-index: 4;
  font-size: 0.8vw;
  text-align: center;
  display: flex;
  justify-content: center;
  align-items: center;
}

nav img {
  padding-left: 4vw;
  height: 3.5vw;
}

a {
  color: #fff;
  text-decoration: none;
  font-weight: 700;
  margin-left: 4vw;
  letter-spacing: 0.4em;
}

.sectionone {
  height: 100vh;
  background: url('media/bg.jpg') no-repeat center center fixed;
  background-size: cover;
  color: #fff;
  font-family: 'Raleway';
} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav>
  <div class="mainnav">
    <a id="one" href="#">HOME</a>
    <a href="#">LINK 1</a>
    <a href="#">LINK 2</a>
    <img src="/media/Asset 1.png" alt="logo">
    <a href="#">LINK 3</a>
    <a href="#">LINK 4</a>
    <a href="#">LINK 5</a>
    <div class="underline-nav">
    </div>
  </div>
</nav> 

Ответ №3:

В CSS для a элемента измените отступ на поле (чтобы сохранить интервал, не влияя на размер элемента) и выровняйте текст по центру:

 a {
    color:#fff;
    text-decoration: none;
    font-weight: 700;
    letter-spacing: 0.4em;
    margin-left: 4vw;
    text-align:center;
}
 

Демонстрация: https://codepen.io/glhr/pen/JVpdMX