Як видалити відступи від не упорядкованого елемента списку?


260

Я хочу видалити всі відступи від ul. Я спробував встановити margin, padding, text-indentдо 0, але безрезультатно. Здається, що встановлення text-indentна від'ємне число робить трюк - але чи справді це єдиний спосіб видалити відступ?


Важко сказати з використанням HTML та CSS, але за допомогою Скидання / нормалізації CSS, що складається з правил ul {padding: 0; маржа: 0;} робить фокус у більшості випадків. Я впевнений, що текст-відступ не має нічого спільного.
Джавад

Не бачачи, що ти насправді робиш, важко сказати, в чому проблема. Встановлення як маржу, так і прокладки на ul до 0 повинно працювати між браузером.
кінакута

6
"Не вдалося. І не можу використовувати скидання CSS. Мої зміни є частиною гігантської веб-структури, в якій понад 60 людей працюють над цим ха-ха" - Дійсно. Тоді ви чітко не ставили своє запитання!
Джавад

Відповіді:


416

Встановіть стиль списку і залиште прокладку нічого.

ul {
    list-style: none;
    padding-left: 0;
}​

Для підтримки кулі ви можете замінити list-style: noneз list-style-position: insideабо стенографії list-style: inside:

ul {
  list-style-position: inside;
  padding-left: 0;
}


18
Ви можете видалити відступи та зберегти нумерацію / кулі за: ul {list-style-position: всередині; padding-left: 0;}
Myforwik

4
Отже, тепер, коли ви відредагували свою відповідь, кулі зберігаються, але все ще існує проблема, що <li> s з декількома рядками тексту неправильно відступають усі рядки. Якщо ви продовжуєте редагувати, ви, нарешті, зможете вирішити моє рішення. : D
Jpsy

Друге рішення, яке зберігає кулю, здається, більше не працює (Chrome 55 в Windows). Будь-які альтернативи?
Том Пажурек

2
@ TomPažourek Спробуйте list-style-position: outside; padding-left: 1em;на<ul>
j08691

1
@ j08691: Так, це працює, хоча 1emріч має трохи магічної цінності ... І насправді залишається крихітний відступ.
Том Пажурек

93

Моє найкраще рішення для видалення <ul> відступу - це простий CSS-один вкладиш:

ul { padding-left: 1.2em; }
<p>A leading line of paragraph text</p>
<ul>
    <li>Bullet points align with paragraph text above.</li>
    <li>Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. </li>
    <li>List item 3</li>
</ul>
<p>A trailing line of paragraph text</p>

Це рішення не тільки легке, але має ряд переваг:

  • Це добре вирівнює ліву точку <ul> вказує навколишній звичайний текст абзацу (= відступ <ul> видалено).
  • Текстові блоки в елементах <li> залишаються правильно відступними, якщо вони загортаються в кілька рядків.

Інформація про спадщину:
для версій IE 8 і нижче ви повинні використовувати замість поля:

    ul { margin-left: 1.2em; }

Я пояснив усі проблеми вже у своєму дописі, @aioobe. Але тут ще раз: прийнята відповідь (статус станом на даний момент, оскільки після мого оригінального повідомлення було відредаговано кілька разів, щоб вдосконалити її) тепер зберігає кулі (якщо ви використовуєте другий наведений приклад), але вона неправильно відступає відміченим багаторядковим рядком текст. Ось загадка другого прикладу прийнятої відповіді, модифікованої для показу ефекту: jsfiddle.net/v6nyuq6f/88 І ось та сама загадка, виправлена ​​з моїм підходом: jsfiddle.net/v6nyuq6f/89
Jpsy

Отже, це 2016 рік, і покладатися на якусь цінність, яка "не ідеальна для всіх браузерів", є найчистішим рішенням цієї досить поширеної проблеми. Чи є спосіб отримати точну ширину символу елемента, можливо, використовуючи функції CSS3?
F30

Тільки для того, щоб бути в безпеці:ul { padding-left:1.2em; margin-left: 0; }
Ендрю Мерфі

1
Єдине рішення на цій сторінці, яке коректно працює з елементами довгого списку (правильно обгортайте) - Дякую!
FredyWenger

8

Додайте це до свого CSS:

ul { list-style-position: inside; }

Це помістить елементи li в той самий відступ, що й інші абзаци та текст.

Посилання: http://www.w3schools.com/cssref/pr_list-style-position.asp


6
На <li> s з декількома рядками тексту list-style-position: insideвирівнюється текст другого та всіх наступних рядків з буквою. Це, звичайно, не бажано.
Jpsy



4

Чи можете ви надати посилання? дякую, я можу поглянути Найімовірніше, ваш селектор css не досить сильний або ви можете спробувати

padding:0!important;


1
Розміри не потрібні, вказуючи 0.
raam86

11
!importantце ЗЛО
Madbreaks

@Madbreaks Це може спрацювати, якщо селектор правильний, а випадок використання правильний, але ваш правильний запит не цей, можливо, у цьому випадку є головне правило css, яке потрібно змінити зі зміною базового файлу, щоб він залишився в так, як не зламати ядро? Я не знаю, можливо, я помиляюся
naeluh

4

У мене така ж проблема із колонтитулом, який я намагаюся розділити. Я виявив, що це спрацювало для мене, спробувавши кілька перерахованих вище пропозицій разом:

footer div ul {
    list-style-position: inside;
    padding-left: 0;
}

Це, здається, тримає його ліворуч під моєю h1 і кулею вказує всередині div, а не наліво зліва.


3

Демо-версія: https://jsfiddle.net/h8uxmoj4/

ol, ul {
  padding-left: 0;
}

li {
  list-style: none;
  padding-left: 1.25rem;
  position: relative;
}

li::before {
  left: 0;
  position: absolute;
}

ol {
  counter-reset: counter;
}

ol li::before {
  content: counter(counter) ".";
  counter-increment: counter;
}

ul li::before {
  content: "●";
}

Оскільки оригінальне запитання не є чітким щодо його вимог, я спробував вирішити цю проблему в рамках керівних принципів, встановлених іншими відповідями. Зокрема:

  • Вирівняйте кулі списку з текстом поза абзацу
  • Вирівняйте кілька рядків у межах одного елемента списку

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


-1

Роблячи цей рядок, я встановлюю поле на 0 (ul style = "margin: -0px"). Кулі вирівнюються з абзацом без накиду.


Я не розумію, чому ви були голосовані за винятком негативного знаку перед нулем. Я спробував це на Google Chrome, і це спрацювало, тоді як рішення padding-left: 0 не зробило. Це на версії Google Chrome 79.0.3945.88 WinX, 64 біт.
MrPotatoHead

Додаючи до свого коментаря вище ... оскільки я не можу його відредагувати ... я пограв з цим трохи більше, а на останньому Firefox (71.0) поведінка така ж. Однак це з упорядкованими списками (ul). Використовуючи упорядковані списки (ol), 1.2em, схоже, вирівнює лівий край списку з лівим полем іншого тексту (за відповіді Jpsy вище).
MrPotatoHead
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.