Символ Unicode як куля для елемента списку в CSS


114

Мені потрібно використовувати, наприклад, символ зірки (★) як кулю для елемента списку.

Я прочитав модуль CSS3: Списки , який описує, як використовувати нестандартний текст як кулі, але це не працює для мене. Я думаю, що браузери просто не підтримують ::markerпсевдоелемент.

Як я можу це зробити, не використовуючи зображення?


чи можете ви поставити код, який ви використовуєте? І в якому браузері ви це тестуєте?
Джоні Хейнес

1
stackoverflow.com/questions/3068199/… має декілька куль Unicode. Ні символ зірки, який у вас є вище, ні 26AB (середнє чорне коло) на моєму комп'ютері Windows, хоча вони є нормальними на Ubuntu.
Піт Кіркхем

Ця відповідь (на подібне запитання) вирішила її для мене: stackoverflow.com/a/12216973/907575
Piotr Migdal

Відповіді:


77

EDIT

Напевно, я б більше не рекомендував використовувати зображення. Я б дотримувався підходу використання символу Unicode, як-от так:

li:before {
  content: "\2605";
}

СТАРИЙ ВІДПОВІДЬ

Я, мабуть, пішов би на зображення зображення, вони набагато ефективніші універсальні та зручні для веб-переглядачів.

Ось приклад:

<style type="text/css">
  ul {list-style:none;} /* you should use a css reset too... ;) */
  ul li {background:url(images/icon_star.gif) no-repeat 0 5px;}
</style>

<ul>
  <li>List Item 1</li>
  <li>List Item 2</li>
  <li>List Item 3</li>
</ul>

47
Як це "набагато ефективніше"? Ви надсилаєте додатковий запит HTTP для отримання зображення, і загальний файл збільшується, коли ви завантажуєте зображення для чогось, що можна було б зробити лише за допомогою одного символу Unicode.
Mathias Bynens

2
Ви маєте рацію, напевно, "ефективний" - це не те слово, яке я мав би використовувати, якщо шукаєте продуктивність, але використання зображення зображення, безумовно, набагато більш універсальне, ніж використання тексту.
agbb

3
Не дуже добре змінювати розмір зображення, але персонаж ідеально підходить для кожного розміру, тому я б сказав, що персонаж є більш універсальним: PI вважає, що сумісне слово-слово або з найширшим діапазоном підтримки браузера було б слово ...
JustGoscha

Це не спрацьовує добре, коли <li>текст завершується: Куля не залишається без обмежень, і виглядає як початок абзацу тексту. Ця відповідь виправляє цю проблему: stackoverflow.com/a/14301918/1450294
Майкл

105

Використання тексту як куль

Використовуйте li:beforeзі шістнадцятковою HTML-адресою (або будь-яким простим текстом).


Приклад

Мій приклад створить списки з галочками як кулі.

CSS :

ul {
    list-style: none;
    padding: 0px;
}

ul li:before
{
    content: '\2713';
    margin: 0 1em;    /* any design */
}

Сумісність браузера

Я не перевіряв себе, але його слід підтримувати, як IE8. Принаймні ось що говорять quirksmode & css-tricks .

Ви можете використовувати умовні коментарі, щоб застосувати старіші / повільніші рішення, наприклад зображення чи сценарії. А ще краще використовувати обидва <noscript>зображення для.

HTML :

<!--[if lt IE 8]>
    *SCRIPT SOLUTION*
    <noscript>
        *IMAGE SOLUTION*
    </noscript>
<![endif]-->

Про фонові зображення

Фонові зображення справді прості в обробці, але ...

  1. Підтримка браузера для background-size насправді лише IE9.
  2. HTML кольори тексту та спеціальні ( божевільні ) шрифти можуть зробити багато, з меншою кількістю HTTP-запитів.
  3. Рішення сценарію може просто ввести HTML-об'єкт і дозволити цьому самому CSS виконати роботу.
  4. Хороший скидання CSS-коду може полегшити list-style(більш логічний вибір).

Насолоджуйтесь.


1
корисним інструментом перетворення для екранування спеціальних символів rishida.net/tools/conversion
IIZ

23
Це не працює належним чином, якщо вміст liелемента перегортає кілька рядків; ці загорнуті лінії не будуть відведені правильно.
Річард Єв

5
float: left; margin-left: -12px;on: перед тим, як подбати про це, @ RichardEverett
Дудо

1
Я працюю для одного рядка, але не працює, якщо обгортає кілька рядків.
VDarricau

1
Працює лише для однорядних списків. Багаторядкові лінії будуть опускатися під кулю, а не відступати.
Clarus Dignus

35

Ви можете побудувати його:

#modal-select-your-position li {
/* handle multiline */
    overflow: visible;
    padding-left: 17px;
    position: relative;
}

#modal-select-your-position li:before {
/* your own marker in content */
   content: "—";
   left: 0;
   position: absolute;
}

4
Це чудова техніка, тому що якщо ви не займаєтеся абсолютним розміщенням персонажа, то в кінцевому підсумку "Куля" буде врівень з рештою пункту списку. Це дуже не кулеподібна поведінка. Тож за допомогою цього виправлення ви отримуєте "кулю" зліва від елемента списку так само, як і при звичайній кулі.
Генерал Реднейк

Дякую за це! Саме те, що мені потрібно було, щоб мої кулі знову поводилися.
tubaguy50035

1
Це робить чудове дерево навігації за допомогою '\21B3'! Дякую! Це спрацювало краще, ніж інші відповіді тут. Також змінив padding-leftдизайн в моєму дизайні 1em, який добре адаптується, коли рівні вашого дерева змінюють розмір.
ndm13

23

Це рішення W3C. Ви можете використовувати його в 3012 році!

ul { list-style-type: "*"; }
/* Sets the marker to a "star" character */

https://drafts.csswg.org/css-lists/#text-markers


12
Я чую, що в 3012 році Internet Explorer нарешті працює!
Марк К Коуан

2
Це працює в Firefox 48, але не в Chromium 51 або на моєму телефоні / планшеті. Увімкнути доведеться використовувати li:beforeрозчин.
CoderGuy123

1
Працює. Ласкаво просимо в майбутнє, пані та панове.
Мікко Охтама

12

Зображення не рекомендуються, оскільки вони можуть з’являтись у піксельному форматі на деяких пристроях (пристрої Apple із дисплеєм Retina) або коли їх збільшують. З символом ваш список щоразу виглядає приголомшливо.

Ось найкраще рішення, яке я знайшов поки що. Він чудово працює, і це крос-браузер (IE 8+).

ul {
    list-style: none;
    padding-left: 1.2em;
    text-indent: -1.2em;
}

li:before {
    content: "►";
    display: block;
    float: left;
    width: 1.2em;
    color: #ff0000;
}

Важливим є розміщення символу в плаваючому блоці з фіксованою шириною, щоб текст залишався вирівняним, якщо він занадто довгий, щоб розміститися на одному рядку. 1.2em - ширина, яку ви хочете для свого персонажа, змініть його для своїх потреб. Не забудьте скинути прокладки та запаси для елементів ul та li.

РЕДАКТУВАННЯ: Будьте в курсі, що розмір "1.2em" може змінюватися, якщо ви використовуєте інший шрифт у ul та li: раніше. Безпечніше використовувати пікселі.


Можливо, додайте "висота: 1 пікс" або подібне до li: раніше? Це гарантує, що поплавок не пошириться вниз до наступного <li>, що спричинить небажане гніздування.
Алан Де Смет

Чому дисплей: блок; на li: раніше? це тому, що за замовчуванням його вбудований рядок, і ви не можете вказати ширину?
Олександр Солоник

6

Щоб додати зірку, використовуйте символ Unicode 22C6.

Я додав пробіл, щоб зробити невеликий проміжок між liзіркою та зіркою. Код для простору є A0.

li:before {
    content: '\22C6\A0';
}

4

Більш повний приклад відповіді 222 :

ul {
    list-style:none;
    padding: 0 0 0 2em;     /* padding includes space for character and its margin */

    /* IE7 and lower use default */
    *list-style: disc;
    *padding: 0 0 0 1em;
}
ul li:before {
    content: '\25BA';
    font-family: "Courier New", courier, "Lucida Sans Typewriter", "Lucida Typewriter", monospace;
    margin: 0 1em 0 -1em;   /* right margin defines spacing between bullet and text. negative left margin pushes back to the edge of the parent <ul> */

    /* IE7 and lower use default */
    *content: none;
    *margin: 0;
}
ul li {
    text-indent: -1em;      /* negative text indent brings first line back inline with the others */

    /* IE7 and lower use default */
    *text-indent: 0;
}

Я включив зіркові властивості для відновлення стилів списку за замовчуванням у старих версіях IE. Ви можете витягнути їх і включити їх за умовним включенням, якщо бажаєте, або замінити рішенням на основі фонового зображення. Моя покірна думка, що спеціальні стилі кулей, реалізовані таким чином, повинні виграшно знижуватись у кількох браузерах, які не підтримують псевдоселектори.

Тестується в Firefox, Chrome, Safari та IE8-10 і відображається правильно у всіх.


text-indent: -1em;є важливою властивістю, якщо у вас є елементи з рядкових списків. Без нього другий і наступні рядки вивільнені кулею, а не попереднім.
Андріс

3
ul {
    list-style-type: none;    
}

ul li:before {
    content:'*'; /* Change this to unicode as needed*/
    width: 1em !important;
    margin-left: -1em;
    display: inline-block;
}

1

Я пережив увесь цей список, і станом на 2020 рік є частково правильні та частково неправильні елементи.

Я виявив, що відступ і зміщення були найбільшою проблемою при використанні UTF-8, тому я розміщую це як сумісне рішення CSS 2020, використовуючи кулю "вертикальний трикутник" як мій приклад.

ul {
    list-style: none;
    text-indent: -2em; // needs to be 1 + ( 2 x margin), and the result 'negative'
}

ul li:before {
    content: "\25B2";
    margin: 0 0.5em; // 0.5 x 2 = 1, + 1 offset to get the bullet back in the right spot
}

використовувати emяк блок, щоб уникнути конфлікту із розміром шрифту



-1

Ця тема може бути давньою, але ось швидке виправлення ul {list-style:outside none square;}або ul {list-style:outside none disc;}тощо.

потім додайте ліву підкладку до елемента списку

ul li{line-height: 1.4;padding-bottom: 6px;}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.