CSS: değil (: son çocuk): seçiciden sonra


369

Ben böyle stil öğeleri, bir listesi var:

ul {
    list-style-type: none;
    text-align: center;
}

li {
    display: inline;
}

li:not(:last-child):after {
    content:' |';
}
<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li>Five</li>
</ul>

Çıkışlar One | Two | Three | Four | Five |yerineOne | Two | Three | Four | Five

Herkes nasıl CSS son öğe dışında tümünü seçmek biliyor?

:not()Seçicinin tanımını burada görebilirsiniz


1
Bu davranış Chrome 10'da bir hata gibi görünüyor. Firefox 3.5'te benim için çalışıyor.
— duri

6
Aslında snippet'i 2018'de en son Chrome ile çalıştırdı ve beklendiği gibi çalıştı.
— atoth

Yanıtlar:


433

Seçici ile ilgili bir sorun varsa, hepsini ayarlayabilir ve sonuncuyu geçersiz kılabilirsiniz

li:after
{
  content: ' |';
}
li:last-child:after
{
  content: '';
}

veya daha önce kullanabiliyorsanız, son çocuğa gerek yok

li+li:before
{
  content: '| ';
}

12
Bu aslında geri IE8 kadar çalışmak için tek yolu (üzgünüm, IE7 ve öncesi için hiçbir cheetos). li:not(:first-child):beforeInternet Explorer'ın eski sürümlerinin üstesinden gelmek için biraz korkutucu.
— Sandy Gifford

240

Her şey doğru görünüyor. Kullandığınız şey yerine aşağıdaki css seçiciyi kullanmak isteyebilirsiniz.

ul > li:not(:last-child):after

4
@ScottBeeson Bu, modern tarayıcı için en iyi uyarıcıdır, ancak eski tarayıcılarla kabul edilen cevap çalışmasıdır. (Sana katılıyorum, bu kabul edilen olmalı)
— Arthur

25

Yazdığınız örnek, Chrome 11'de benim için mükemmel çalışıyor. Belki de tarayıcınız :not()seçiciyi desteklemiyordur ?

Bu çapraz tarayıcıyı gerçekleştirmek için JavaScript veya benzeri bir şey kullanmanız gerekebilir. jQuery , selector API'sinde değil () uygular .


8
Bunu daha li:not(:first-child):beforeönce dikey çubuğu ekleyerek ve ekleyerek çözdüm. Chrome'u son çocuğu desteklemeyen kararlı bir sürümle çalışıyordum. Kanarya inşa ediyor. Cevap için teşekkürler tho.
— Matt Clarkson

Chrome 2013'te bile desteklemiyor mu?
— MikkoP

20

CSS kullanan bir örnek

  ul li:not(:last-child){
        border-right: 1px solid rgba(153, 151, 151, 0.75);
    }

20

Benim için iyi çalışıyor

&:not(:last-child){
            text-transform: uppercase;
        }

1
Bu cevap CSS yerine SCSS ile ilgili olabilir.
— Chris Walsh

10

Örneğiniz benim için IE'de çalışmıyor , sayfanızı IE'de içerik CSS özelliğini kullanmak için standart şekilde oluşturmak için belgenizde Doctype üstbilgisini belirtmeniz gerekiyor :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<head>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<html>

<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li>Five</li>
</ul>

</html>

İkinci yol CSS 3 seçicileri kullanmaktır

li:not(:last-of-type):after
{
    content:           " |";
}

Ancak yine de Doctype'i belirtmeniz gerekiyor

Ve üçüncü yol JQuery aşağıdaki gibi bir komut dosyası ile kullanmaktır:

<script type="text/javascript" src="jquery-1.4.1.js"></script>
<link href="style2.css" rel="stylesheet" type="text/css">
</head>
<html>

<ul>
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
    <li>Four</li>
    <li>Five</li>
</ul>

<script type="text/javascript">
  $(document).ready(function () {
      $("li:not(:last)").append(" | ");
    });
</script>

Üçüncü yolun avantajı, doküman türünü belirtmenize gerek olmamasıdır ve jQuery uyumluluğa dikkat edecektir.


6
<! DOCTYPE html> yeni HTML5 standardıdır.
— Matt Clarkson

1
Bu, bununla başa çıkmanın harika ve modern bir yoludur. Son çocukla mücadele ediyordum, sonra cevabını buldum. Bu mükemmel! : not (: türün son
— örneği

1

Son çocuktan önce ve: çocuktan sonra ve kullanılmış

 ul li:not(last-child){
 content:' |';
}

Umarım, işe yaramalı


-2

Bunu deneyebilirsiniz, aradığınız cevaplar değil, konsept aynı.

Tüm çocuklar için stilleri ayarladığınız ve daha sonra son çocuktan kaldıracağınız yer.

Kod Parçacığı

li
  margin-right: 10px

  &:last-child
    margin-right: 0

görüntü

resim açıklamasını buraya girin


2
Merhaba, lütfen bu düzenleyicinin ne olduğunu öğrenebilir miyim? Güzel görünüyor.
— Zanecat

Küçük bir kod parçasıdır ve herkes kolayca ezberleyebilir ve yazabilir.
— Yashu Mittal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.