Ігнорувати <br> із CSS?


114

Я працюю над сайтом, на якому вставлені розриви рядків, як <br>у деяких заголовках. Якщо припустити, що я не можу редагувати вихідний HTML, чи є спосіб, завдяки CSS я можу проігнорувати ці перерви?

Я мобільно оптимізую сайт, тому не дуже хочу використовувати JavaScript.


1
@Ben Johnson mk2: Відповідь на ваше запитання: "Я хотів би відповісти на відповідь @Aneesh Karthik C для firefox та опери" полягає в тому, що це неможливо з використанням brелементів! Причини вже багато разів пояснюються! У своїй відповіді я показав вам альтернативний метод досягнення мети в дійсному, надійному та крос-браузерному способі.
Нетсурфер

Відповіді:


198

За допомогою css ви можете "заховати" теги br, і вони не матимуть ефекту:

br {
    display: none;
}

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

h3 br {
    display: none;
}

11
Переконайтесь, що також подивіться на відповідь Анеєша, вона є актуальною і виправляє питання, яке енобрев не врахував у своєму.
Рік Калдер

3
Погоджена, відповідь Анееша - фантастичне доповнення. stackoverflow.com/a/18040142/14651
enobrev

2
Це рішення не працює для Firefox. Якщо <br/> не має місця навколо нього, тоді він поєднує слова навколо <br/> разом. Ось зразок. Дискусію про нього можна побачити нижче
shinesecret

1
Якщо ваша мета - чуйний дизайн, єдине крос-браузерне рішення - це @ Netsurfer's. Він не відповідає точно на запитання, але це досягає мети у всіх сучасних браузерах.
Ендрю Лундін

94

Примітка. Це рішення працює лише для веб-переглядачів Webkit, які неправильно застосовують псевдоелементи до самозакриваються тегів.

Як додаток до вищезазначених відповідей, варто зазначити, що в деяких випадках потрібно вставити пробіл, а не просто ігнорувати <br>:

Наприклад, наведені вище відповіді повернуться

Monday<br>05 August

до

Monday05 August

як я перевірив, намагаючись відформатувати свій тижневий календар подій. Пробіл після "понеділка" бажано вставити. Це легко зробити, вставивши в CSS:

br  {
    content: ' '
}
br:after {
    content: ' '
}

Це зробить

Monday<br>05 August

виглядає як

Monday 05 August

Ви можете змінити contentатрибут , br:afterщоб , ', 'якщо ви хочете розділити комами, або покласти все , що ви хочете в , ' 'щоб зробити його роздільником! До речі

Monday, 05 August

виглядає акуратно ;-)

Дивіться тут для довідки.

Як і у вищенаведених відповідях, якщо ви хочете зробити його специфічним для тегів, ви можете. Як, якщо ви хочете , щоб це властивість для роботи тега <h3>, просто додайте h3кожен , перш ніж brі br:after, наприклад.

Він працює як правило для псевдотегів.


2
так дуже геніально!
jon

1
Молодці, насправді думаючи про наслідки просто відключити його!
Рік Калдер

10
Добре, але це, здається, працює лише з веб-переглядачами Webkit (Chrome & Safari) з Firefox та IE. Ця методика не працює, перевірте jsfiddle.net/nicooprat/ZHxNA на Firefox та IE ... будь-які ідеї, як замінити бр з пробілом, щоб він працював з усіма основними халатниками?
firepol

6
@firepol: Насправді, Firefox і IE роблять все "правильним", оскільки <br />це один з елементів, над яким псевдоелемент не повинен працювати . І contentпрацює лише на псевдоелементах.
ScottS

7
Це дуже неправильне рішення, головним чином тому, що @ScottS вже писав. "Вміст" повинен працювати лише з псевдоелементами, а псевдоелемент не повинен працювати з самозакриваються тегами. Це може працювати зараз, але я б не наважувався називати це рішення стійким до майбутнього.
nd_macias

16

Якщо ви додасте в стилі

br{
    display: none;
}

Тоді це спрацює. Не впевнений, чи буде він працювати у старих версіях IE, хоча.


3
це було розміщено раніше і має менше голосів .. як це?
Mr_Green

Іноді нас просто ігнорують; (
Тім Б Джеймс,

@TimBJames це не працює в FIREFOX, ви можете перевірити мій детальний коментар вище
shinesecret

12

Ось як я це роблю:

br { 
    display: inline;
    content: ' ';
    clear:none;
}

6

Ви можете використовувати spanелементи замість того, brякщо ви хочете, щоб метод білого простору працював, оскільки це залежить від псевдоелементів, які не визначені для замінених елементів.

HTML

<p>
   To break lines<span class="line-break">in a paragraph,</span><span>don't use</span><span>the 'br' element.</span>
</p>

CSS

span {white-space: pre;}

span:after {content: ' ';}

span.line-break {display: block;}

span.line-break:after {content: none;}

DEMO

Розрив лінії досягається просто встановленням відповідного елемента прольоту display:block.

Використовуючи ідентифікатори та / або класи в розмітці HTML, ви можете легко орієнтуватися на кожен окремий або комбінацію прольотних елементів за допомогою CSS або використовувати CSS-селектори, як-от nth-child().

Таким чином, ви можете, наприклад, визначити різні точки перерви, використовуючи медіа-запити для чуйного макета.

Ви також можете просто додати / видалити / переключити класи за допомогою Javascript (jQuery).

«Перевагою» цього методу є його надійність - працює у кожному браузері, що підтримує псевдоелементи (див.: Чи можу я використовувати - Вміст, створений CSS ).

Як альтернатива також можна додати розрив рядка через псевдоелементи:

span.break:before {  
    content: "\A";
    white-space: pre;
}

DEMO


4
Ви пропустили цю частину питання: "Припустимо, я не можу редагувати вихідний html"?
ScottS

1
@ScottS: Ні, я цього не зробив. Можливо, ви пропустили цю частину: "Я хотів би вирішити відповідь @Aneesh Karthik C за firefox та оперу" (оскільки той, хто розпочав баунті, не є ОП). І відповідь на це полягає в тому, що це неможливо з <br>, принаймні, не крос-браузером. Тому я показав альтернативу.
Нецурфер

2
Ні, я не пропустив цю частину (що ОП відрізняється від щедрості та уваги до відповіді Анееша). Але відповідь Анееша полягає в контексті всього питання: "Ігнорувати <br> з CSS?" Це здається досить очевидним , що якщо один має фактичний контроль над HTML, то просто видаліть ті <br>елементи , вирішує цю проблему ( по- видимому , замінивши їх пробілами). Отже, вся проблема, якою хвилює питання в цілому, - це коли хтось не має контролю над html ; ускладнюється доданим умовою, що вони дійсно не хотіли використовувати javascript (з будь-якої причини) для його вирішення.
Скотс

Питання "Як ігнорувати <br>CSS?" вже відповіли. І лише якщо ви керуєте HTML, що не означає, що ви хочете його змінити. Але при чуйному дизайні часто бажано контролювати обриви ліній (крім автоматичного обгортання). І в таких випадках метод наявності білого простору або не керованого CSS (медіа-запитами) є принаймні "одним методом" для досягнення мети.
Нетсурфер

Це працювало для мене краще зараз, коли вищезазначені рішення більше не працюють у firefox.
Крістос Хрусіс

3

Для мене краще виглядає так:

Some text, Some text, Some text

br {
  display: inline;
  content: '';
}

br:after {
  content: ', ';
  display: inline-block;
}
<div style="display:block">
  <span>Some text</span>
  <br>
  <span>Some text</span>
  <br>
  <span>Some text</span>
</div>


1

Для цього ви можете просто так:

br{display: none;}

і якщо він знаходиться всередині якогось тегу PRE, ви можете, і якщо ви хочете, щоб тег PRE поводився як звичайний блок-елемент, ви можете використовувати цей CSS:

pre {white-space: normal;}

Або ви можете слідувати стилю Aneesh Karthik C, наприклад:

br  {content: ' '}
br:after {content: ' '}

Я думаю, ти це отримав


Я думаю, ви пропустили те, що псевдоелементи подобаються ::beforeі ::afterє принаймні "невизначеними" для "замінених елементів" br. Тож ніколи не буде послідовної поведінки браузера, на якого можна покластися! Єдине, що ви можете зробити - це не використовувати псевдоелементи з цими елементами!
Нетсурфер

1

Згідно з вашим запитанням, щоб вирішити цю проблему для Firefox та Opera за допомогою підходу Aneesh Karthik C, вам потрібно додати атрибут "float" right.

Перевірте приклад тут. Цей CSS працює у Firefox (26.0), Opera (12.15), Chrome (32.0.1700) та Safari (7.0)

br {
   content: " ";  
   float:right; 
}

Я сподіваюся, що це відповість на ваше запитання !!


Властивість вмісту впливає лише на псевдоелементи CSS. Так що це абсолютно марно у вашій демонстрації! А як «нейтралізувати» а brвже відповіли (не раз). Питання стосується умовного білого простору . Оскільки це вимагає використання псевдоелементів, це не працюєbr .
Нецурфер

Якщо ви уважно читаєте питання. Ви зрозумієте відповідь. Я бачив відповідь, що найкраще уникати, просто встановивши її для відображення: жодної. Але щодо другого питання, де він хоче з'ясувати, як він може вирішити питання, що надходять у рішення FF та Opera для Aneesh.
shinesecret

Я дуже уважно прочитав не тільки питання, але й усі відповіді та коментарі. Властивість вмісту - brце просто нісенітниця! І я досі не бачу, що решта вашої відповіді стосується "умовного білого простору та лінійних брек"? Може, ви можете пояснити це докладніше, будь ласка?
Нетсурфер

1
Ваш приклад вводить в оману, оскільки у вас є пробіли навколо brелементів. Якщо ви вилучите їх, ви побачите, що це не працює, щоб додати місця.
ScottS

1
У вашому прикладі є три brелементи з пробілами до і після першого та останнього. Саме ті простори дають зрозуміти, що ваше рішення працює, а насправді це не так. Коли ви видалите ці пробіли, як я це робив у моєму переглянутому прикладі, ви можете бачити, що ваше рішення зовсім не додає пробілу у Firefox.
ScottS

0

Хоча це питання, здається, вже вирішене, прийнята відповідь не вирішила проблему для мене на Firefox. Firefox (і можливо IE, хоча я цього не пробував) пропускає пробіли, читаючи вміст тегу "content". Хоча я повністю розумію, чому Mozilla зробила це, це приносить свою частку проблем. Найпростішим вирішенням, який я знайшов, було використання проривів, що не порушуються, а не звичайних, як показано нижче.

.noLineBreaks br:before{
content: '\a0'
}

Погляньте .


1
Чому у вашої скрипки немає beforeелемента на a br? Ви навіть не маєте brу своєму HTML-файлі на скрипці. Частина проблеми полягає в тому, що в деяких браузерах beforeне працює а br.
ScottS

Це цілком очікувана поведінка, як зазначено в специфікації: 2.5.1 Загальні
ідентифікатори

Та, звичайно, дивно, він працює, коли я застосовую його у своєму проекті. Мій текст не є всім HTML, однак зміст, який я змінюю, походить із бази даних. Вибачте, тоді мій віщун не допоміг.
Санто-Гевара

0

Так, ви можете проігнорувати це <br>. Це може знадобитися, особливо у випадку чуйного дизайну, коли потрібно усунути перерви для мобільних пристроїв.

HTML

<h2>

  Where ever you go <br class="break"> i am there.

</h2>

CSS для мобільного прикладу

/* Resize the browser window to check */

@media (max-width: 640px) 
{
  .break {display: none;}
}

Перевірте цей Codepen:
https://codepen.io/fluidbrush/pen/pojGQyM


-1

Ви можете просто перетворити його в коментар.

Або ви можете це зробити:

br {
display: none;
}

Але якщо ви цього не хочете, то чому ви туди ставите?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.