重新计算媒体查询中的div的麻烦

时间:2019-07-15 05:55:22

标签: javascript css responsive-design

我已经在这个CSS上苦苦挣扎了很长时间,并且正在寻找一些指导。

我的问题是:我有一些选项卡以“弹性”方式执行,并且一切正常。也就是说,直到我使用媒体查询。

我有一个605px的媒体查询,当它碰到那个断点时,选择器(蓝色按钮)不会调整大小并且看起来不合适。您可以缩小Coden窗口以查看我在说的效果。关于如何使选项卡根据包装器的大小更改大小的任何想法?

这是Codepen链接:https://codepen.io/brandonleichty/pen/axNBME

非常感谢您的投入。

var tabs = $('.tabs');
var selector = $('.tabs').find('a').length;
var activeItem = tabs.find('.active');
var activeWidth = activeItem.innerWidth();
$(".selector").css({
  "left": activeItem.position.left + "px",
  "width": activeWidth + "px"
});

$(".tabs").on("click", "a", function(e) {
  e.preventDefault();
  $('.tabs a').removeClass("active");
  $(this).addClass('active');
  var activeWidth = $(this).innerWidth();
  var itemPos = $(this).position();
  $(".selector").css({
    "left": itemPos.left + "px",
    "width": activeWidth + "px"
  });
});
@import url('https://fonts.googleapis.com/css?family=Roboto');
body {
  font-family: 'Roboto', sans-serif;
}

.wrapper {
  text-align: center;
  margin: 50px auto;
}

.tabs {
  margin-top: 50px;
  font-size: 15px;
  padding: 0px;
  list-style: none;
  background: #fff;
  box-shadow: 0px 5px 20px rgba(0, 0, 0, 0.1);
  display: inline-block;
  border-radius: 50px;
  position: relative;
}

.tabs a {
  text-decoration: none;
  color: #777;
  text-transform: uppercase;
  padding: 10px 40px;
  display: inline-block;
  position: relative;
  z-index: 1;
  transition-duration: 0.6s;
}

.tabs a.active {
  color: #fff;
}

.tabs a i {
  margin-right: 5px;
}

.tabs .selector {
  height: 100%;
  display: inline-block;
  position: absolute;
  left: 0px;
  top: 0px;
  z-index: 1;
  border-radius: 50px;
  transition-duration: 0.6s;
  transition-timing-function: cubic-bezier(0.68, -0.55, 0.265, 1.55);
  background: #05abe0;
  background: -moz-linear-gradient(45deg, #05abe0 0%, #8200f4 100%);
  background: -webkit-linear-gradient(45deg, #05abe0 0%, #8200f4 100%);
  background: linear-gradient(135deg, #5ee7df, #43a4ca);
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#05abe0', endColorstr='#8200f4', GradientType=1);
}

@media (max-width: 605px) {
  .tabs {
    font-size: 12px;
  }
  .tabs a {
    padding: 10px 12px;
  }
  .tabs .selector {
    height: 110%;
    top: -5%;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="wrapper">
  <nav class="tabs">
    <div class="selector"></div>
    <a href="#" class="active"></i>Popular</a>
    <a href="#">Upcoming</a>
    <a href="#"></i>My Movies</a>
    <a href="#"></i>Search</a>
  </nav>
</div>

1 个答案:

答案 0 :(得分:0)

您可以添加jQuery函数来调整窗口大小, 但事情是超时设置,因为您使用CSS过渡时间为0.6秒。 因此,如果没有setTimeout,它将显得很奇怪。 我已经完全测试了以下代码。

$(window).resize(function() {
  setTimeout(function(){
      var activeWidth = $("a.active").innerWidth();
      var itemPos = $("a.active").position();
      $(".selector").css({
        "left":itemPos.left + "px", 
        "width": activeWidth + "px"
      });
  }, 600)
})