: nth-child не работает со стилем списка: нет; - PullRequest
0 голосов
/ 17 сентября 2018

Я делаю плейлист.Я хочу, чтобы песни появлялись в чередующемся списке.

, чтобы сделать это, я использую эту CSS

.track-list > ul > li{
  list-style: none;

}    

div ul li:nth-child(even) {
       background-color: #ccc;
    }

, это не работает вообще, но этот код ниже работает.

  .track-list > ul > li{
  list-style: none;

}
    div ul li:nth-child(even) {
      color: #ccc;
    }

Но если я удаляю .track-list > ul > li{list-style: none;},

div ul li:nth-child(even) {
   background-color: #ccc;
}

работает правильно.

вот скриншот из моего браузера screenshot

это озадачивает меня, и каждый совет будет приветствоваться

Запустите фрагмент кода на весь экран, чтобы увидеть проблему, цвет фона исчезнет

@import url("//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css");


.wrapper{
  height: 100vh;
}

.box-item{
  position: relative;
  width: 100%;
  background-color: red;
  color: blue;
  height: 10vh;
  margin-top: 40px;

}

footer > .listen{
  position: absolute;
  margin-right: 20px;
  bottom: 0;
  right: 0;
}

.playlist-dropdown{
  border: solid 1px #dedede;
}

.interface{
  border-bottom: solid 3px #dedede;
  padding-bottom: 10px;
  padding-top:10px;
}
.name-of-song{
  margin-bottom: 10px;
}

.track-list{
   padding-top: 10px;
}

.track-list > ul > li{
  list-style: none;

}

div ul li:nth-child(even) {
   background-color: #ccc !important;
}



#play, #pause, #mute, #unmute {
  position: relative;
   display: block;
}

#play {
    position: absolute;

}

#pause:before {
    position: absolute;

}

#pause:after {
    position: absolute;

}



#mute{
    position: absolute;

}

#unmute:before {
    position: absolute;

}

#unmute:after {
    position: absolute;
    
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>playlist</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

    <link rel="stylesheet" href="css/custom.css">
  </head>
  <body>

     <div class="wrapper">
       <div class="container">
         <div class="box-item ">
           <footer>
             <a class="listen" data-toggle="collapse" href="#playlist-collapse"><span class="glyphicon glyphicon-headphones" aria-hidden="true"></span></a>
           </footer>
         </div>

        <div id="playlist-collapse" class="playlist-dropdown">
          <div class="interface clearfix">

            <div class="col-md-12 name-of-song">
              Name of track being played
            </div>
              <div class="col-md-2">
                <a href="#" id="play"><span class="glyphicon glyphicon-play"></span></a>
              <a href="#" id="pause" style="display: none;"><span class="glyphicon glyphicon-pause"></span></a>
              </div>
              <div class="col-md-6">
                progress bar
              </div>
              <div class="col-md-1">
                <a href="#" id="mute"><span class="glyphicon glyphicon-volume-off"></span></a>
              <a href="#" id="unmute" style="display: none;"><span class="glyphicon glyphicon-volume-up"></span></a>
              </div>
              <div class="col-md-3">
                volume-bar
              </div>

          </div> <!--interface ends -->
          <div class="track-list clearfix">
          <ul>
            <li class="track-row">
              <div class="col-md-2 track-number">
                01
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name
              </div>
              <div class="col-md-1 track-copyright">
                	&copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
            <li>
              <div class="col-md-2 track-number">
                02
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name 02
              </div>
              <div class="col-md-1 track-copyright">
                  &copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
            <li>
              <div class="col-md-2 track-number">
                03
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name03
              </div>
              <div class="col-md-1 track-copyright">
                  &copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
          </ul>
        </div>


     </div>

   </div><!--container-->

   <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>


<script>
$('#play').on('click', function(event) {
		console.log('play click clicked');
    //currentPlayingTrack.play();

    $('#pause').show();
    $('#play').hide();
});

$('#pause').on('click', function(event) {
    //currentPlayingTrack.pause();
    $('#pause').hide();
    $('#play').show();
});

$('#unmute').on('click', function(event) {
		console.log('play click clicked');
    //currentPlayingTrack.play();

    $('#mute').show();
    $('#unmute').hide();
});

$('#mute').on('click', function(event) {
    //currentPlayingTrack.pause();
    $('#mute').hide();
    $('#unmute').show();
});
</script>
 </div> <!--wrapper -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </body>
</html>

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Эта проблема, вызванная тем, что li имеет height 0, когда размер больше 991px из-за floated div имеет col-* класс.
Вы используете bootstrap и col-md-x имеют свойство float, когда размер экрана превышает 991px.
Поэтому вам нужно установить для свойства overflow:hidden значение li, чтобы обернуть плавающий дочерний контент.
Попробуйтеиспользуя как это.

.track-list > ul > li{
  list-style: none;
  overflow:hidden;
 }

Ниже приведен фиксированный код.

@import url("//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css");


.wrapper{
  height: 100vh;
}

.box-item{
  position: relative;
  width: 100%;
  background-color: red;
  color: blue;
  height: 10vh;
  margin-top: 40px;

}

footer > .listen{
  position: absolute;
  margin-right: 20px;
  bottom: 0;
  right: 0;
}

.playlist-dropdown{
  border: solid 1px #dedede;
}

.interface{
  border-bottom: solid 3px #dedede;
  padding-bottom: 10px;
  padding-top:10px;
}
.name-of-song{
  margin-bottom: 10px;
}

.track-list{
   padding-top: 10px;
}

.track-list > ul > li{
  list-style: none;
  overflow:hidden;
}

div ul li:nth-child(even) {
   background-color: #ccc !important;
}



#play, #pause, #mute, #unmute {
  position: relative;
   display: block;
}

#play {
    position: absolute;

}

#pause:before {
    position: absolute;

}

#pause:after {
    position: absolute;

}



#mute{
    position: absolute;

}

#unmute:before {
    position: absolute;

}

#unmute:after {
    position: absolute;
    
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>playlist</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

    <link rel="stylesheet" href="css/custom.css">
  </head>
  <body>

     <div class="wrapper">
       <div class="container">
         <div class="box-item ">
           <footer>
             <a class="listen" data-toggle="collapse" href="#playlist-collapse"><span class="glyphicon glyphicon-headphones" aria-hidden="true"></span></a>
           </footer>
         </div>

        <div id="playlist-collapse" class="playlist-dropdown">
          <div class="interface clearfix">

            <div class="col-md-12 name-of-song">
              Name of track being played
            </div>
              <div class="col-md-2">
                <a href="#" id="play"><span class="glyphicon glyphicon-play"></span></a>
              <a href="#" id="pause" style="display: none;"><span class="glyphicon glyphicon-pause"></span></a>
              </div>
              <div class="col-md-6">
                progress bar
              </div>
              <div class="col-md-1">
                <a href="#" id="mute"><span class="glyphicon glyphicon-volume-off"></span></a>
              <a href="#" id="unmute" style="display: none;"><span class="glyphicon glyphicon-volume-up"></span></a>
              </div>
              <div class="col-md-3">
                volume-bar
              </div>

          </div> <!--interface ends -->
          <div class="track-list clearfix">
          <ul>
            <li class="track-row">
              <div class="col-md-2 track-number">
                01
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name
              </div>
              <div class="col-md-1 track-copyright">
                	&copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
            <li>
              <div class="col-md-2 track-number">
                02
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name 02
              </div>
              <div class="col-md-1 track-copyright">
                  &copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
            <li>
              <div class="col-md-2 track-number">
                03
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name03
              </div>
              <div class="col-md-1 track-copyright">
                  &copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
          </ul>
        </div>


     </div>

   </div><!--container-->

   <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>


<script>
$('#play').on('click', function(event) {
		console.log('play click clicked');
    //currentPlayingTrack.play();

    $('#pause').show();
    $('#play').hide();
});

$('#pause').on('click', function(event) {
    //currentPlayingTrack.pause();
    $('#pause').hide();
    $('#play').show();
});

$('#unmute').on('click', function(event) {
		console.log('play click clicked');
    //currentPlayingTrack.play();

    $('#mute').show();
    $('#unmute').hide();
});

$('#mute').on('click', function(event) {
    //currentPlayingTrack.pause();
    $('#mute').hide();
    $('#unmute').show();
});
</script>
 </div> <!--wrapper -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </body>
</html>
0 голосов
/ 17 сентября 2018

Проблема с плавающей точкой.li становится совмещенным (height:0), потому что внутри вы используете класс col-* без row.Вам необходимо учитывать row, чтобы элементы с плавающей точкой (col-*) были правильно очищены, а затем row внутри container, чтобы получить правильный запас (https://getbootstrap.com/docs/3.3/css/#grid)

@import url("//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css");


.wrapper{
  height: 100vh;
}

.box-item{
  position: relative;
  width: 100%;
  background-color: red;
  color: blue;
  height: 10vh;
  margin-top: 40px;

}

footer > .listen{
  position: absolute;
  margin-right: 20px;
  bottom: 0;
  right: 0;
}

.playlist-dropdown{
  border: solid 1px #dedede;
}

.interface{
  border-bottom: solid 3px #dedede;
  padding-bottom: 10px;
  padding-top:10px;
}
.name-of-song{
  margin-bottom: 10px;
}

.track-list{
   padding-top: 10px;
}

.track-list > ul > li{
  list-style: none;

}

div ul li:nth-child(even) {
   background-color: #ccc !important;
}



#play, #pause, #mute, #unmute {
  position: relative;
   display: block;
}

#play {
    position: absolute;

}

#pause:before {
    position: absolute;

}

#pause:after {
    position: absolute;

}



#mute{
    position: absolute;

}

#unmute:before {
    position: absolute;

}

#unmute:after {
    position: absolute;
    
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>playlist</title>

    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <link href="//netdna.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">

    <link rel="stylesheet" href="css/custom.css">
  </head>
  <body>

     <div class="wrapper">
       <div class="container">
         <div class="box-item ">
           <footer>
             <a class="listen" data-toggle="collapse" href="#playlist-collapse"><span class="glyphicon glyphicon-headphones" aria-hidden="true"></span></a>
           </footer>
         </div>

        <div id="playlist-collapse" class="playlist-dropdown">
          <div class="interface clearfix">

            <div class="col-md-12 name-of-song">
              Name of track being played
            </div>
              <div class="col-md-2">
                <a href="#" id="play"><span class="glyphicon glyphicon-play"></span></a>
              <a href="#" id="pause" style="display: none;"><span class="glyphicon glyphicon-pause"></span></a>
              </div>
              <div class="col-md-6">
                progress bar
              </div>
              <div class="col-md-1">
                <a href="#" id="mute"><span class="glyphicon glyphicon-volume-off"></span></a>
              <a href="#" id="unmute" style="display: none;"><span class="glyphicon glyphicon-volume-up"></span></a>
              </div>
              <div class="col-md-3">
                volume-bar
              </div>

          </div> <!--interface ends -->
          <div class="track-list clearfix">
          <ul class="container-fluid">
            <li class="track-row row">
              <div class="col-md-2 track-number">
                01
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name
              </div>
              <div class="col-md-1 track-copyright">
                	&copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
            <li class="row">
              <div class="col-md-2 track-number">
                02
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name 02
              </div>
              <div class="col-md-1 track-copyright">
                  &copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
            <li class="row">
              <div class="col-md-2 track-number">
                03
              </div>
              <div class="col-md-7 track-name">
                Track name/ song name03
              </div>
              <div class="col-md-1 track-copyright">
                  &copy;
              </div>
              <div class="col-md-2 track-duration">
                00:25s
              </div>
            </li>
          </ul>
        </div>


     </div>

   </div><!--container-->

   <script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>


<script>
$('#play').on('click', function(event) {
		console.log('play click clicked');
    //currentPlayingTrack.play();

    $('#pause').show();
    $('#play').hide();
});

$('#pause').on('click', function(event) {
    //currentPlayingTrack.pause();
    $('#pause').hide();
    $('#play').show();
});

$('#unmute').on('click', function(event) {
		console.log('play click clicked');
    //currentPlayingTrack.play();

    $('#mute').show();
    $('#unmute').hide();
});

$('#mute').on('click', function(event) {
    //currentPlayingTrack.pause();
    $('#mute').hide();
    $('#unmute').show();
});
</script>
 </div> <!--wrapper -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  </body>
</html>

Почему list-style влияет на это?

Когда list-style отличается от none, мыиметь маркеры, которые добавляют высоту по умолчанию к элементу li, даже если этот элемент пуст или содержит элементы с плавающей запятой без clearfix.Использование none удалит эту высоту, и у нас возникнут проблемы:

ul {
  border: 1px solid;
}

span {
  float: left;
}

li:nth-child(even) {
  background: red;
  color: blue;
}
<ul>
  <li>element 1</li>
  <li></li>
  <li>element 3</li>
</ul>

<ul style="list-style:none">
  <li>element 1</li>
  <li></li>
  <li>element 3</li>
</ul>

<ul>
  <li><span>float element 1</span></li>
  <li><span>float element 1</span></li>
  <li><span>float element 1</span></li>
</ul>

<ul style="list-style:none">
  <li><span>float element 1</span></li>
  <li><span>float element 1</span></li>
  <li><span>float element 1</span></li>
</ul>
...