Как условно отменить текстовый отступ в теге абзаца

У меня есть класс CSS .content с отступом 55px. В некоторых случаях я хочу включить ссылку в начале абзаца, но эту ссылку я не хочу делать отступом.

Помимо создания нового класса .content2, который не включает отступ, можно ли отменить отступ, используя классы, применяемые непосредственно к ссылке?

Я пытался использовать отрицательное значение отступа, применяемое к ссылке через классы, которые вызываются для форматирования ссылки, но это, кажется, только изменяет текст в собственном поле ссылки, когда на самом деле я хочу, чтобы поле ссылки не было отступом.

рассматриваемая страница: http://www.fccorp.us/development/index.jfx.php

Большое спасибо за графику snaplemouton!

Это поднимает новый, но связанный с этим вопрос: каков порядок каскадирования для нескольких классов, которые противоречат друг другу? Я тестирую в Firefox (текущая версия 19.0.2, не бета-версия), и ссылки обычно используют два класса, но некоторые используют третий.

--Обновить--

Мое редактирование, которое удалило класс (хотя в моем файле css потребовалось девять дополнительных строк), сработало. Однако это не решило мою проблему с маржей:

Первый класс настраивает внешний вид «коробки» ссылки (модель коробки), включая поля, а также настраивает внешний вид текста ссылки (ссылка, посещено, активно). (ранее третий) теперь второй класс, который используется только тогда, когда эти ссылки помещаются в абзац, используется для отрицания значений, которые больше не применяются, поскольку ссылка находится внутри абзаца. Я устанавливаю верхнее и нижнее поля через первый класс, который применяется (почти) к каждой кнопке. С (теперь) вторым классом я попытался свести на нет эти поля для нескольких ссылок, размещенных внутри абзаца. Но по какой-то причине те значения, которые отрицаются за счет использования значений поля 0px (ноль) через второй класс, не изменяются. Они сохраняют свое значение, присвоенное первым классом.

(Когда я набирал это, я понял, как удалить ключ, который настраивает атрибуты link/visited/active, так что сейчас это изменяется. Но я сомневаюсь, что это что-то изменит. Если это произойдет, я обновлю это.) - Как Я сказал в обновлении, что это изменение не решило проблему неустранения полей.

Однако вместо того, чтобы пытаться отменить существующие поля, мне нужно фактически свести их на нет, используя отрицательное число? Это должно работать, но я думал, что каскад CSS означает, что одни стили перезаписывают другие, если они противоречат друг другу. Или они складываются вместе?


person J.D.    schedule 26.03.2013    source источник
comment
Пробовали ли вы добавить минус margin-left или минус padding-left к ссылке?   -  person Luke Shaheen    schedule 26.03.2013
comment
Итак, для абзацев, начинающихся с вложенной ссылки, вы не хотите, чтобы текст обычного абзаца был с отступом? Это то, что вы спрашиваете?   -  person Matt Coughlin    schedule 26.03.2013
comment
Мэтт, меня не волнует отступ обычного текста. Я просто не хочу, чтобы сама ссылка была с отступом.   -  person J.D.    schedule 26.03.2013
comment
@JD: я добавил в свой ответ краткий обзор каскадного порядка (возможно, лучше всего рассмотреть его как отдельный вопрос). Я до сих пор не совсем понимаю, что именно вы пытаетесь сделать. Если оставить text-indent в тексте обычного абзаца для абзацев с вложенной ссылкой, это может выглядеть визуально неуклюжим (в этом случае отступ может не иметь полезной цели). Было бы полезно, если бы вы могли предоставить пример того, как именно вы хотите, чтобы он выглядел (в макете или демонстрации), чтобы избежать путаницы.   -  person Matt Coughlin    schedule 26.03.2013
comment
img46.imageshack.us/img46/2735/buttondemo.png   -  person J.D.    schedule 26.03.2013
comment
Смотрите мое редактирование в моем ответе   -  person snaplemouton    schedule 26.03.2013


Ответы (3)


Есть несколько способов сделать это. Либо переопределив поля или отступы (см. ссылку на редактирование 3), установив отступ равным 0, либо, как я предпочитаю, используя элемент div шириной 100% для вашего контента и перемещая его влево.

<div style="float:left; width:100%;">
     <a style="float:left">stuff</a>
</div>

Изменить: он также должен исправить этот текст, имеющий одну строку рядом с вашим якорем. Если вы действительно хотите, чтобы текст располагался справа от вашего баннера, вы можете удалить div и просто разместить привязку слева.

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

Редактировать 2: я даже сделал изображение краски, чтобы показать вам разницу. :)

введите здесь описание изображения

Редактировать 3: Чтобы ответить на ваш новый вопрос, вот ссылка, которая объясняет почти все о каскадном порядке.

http://monc.se/kitchen/38/cascading-order-and-inheritance-in-css

В основном побеждает самый большой вес. Если оба имеют одинаковый вес, последний всегда выигрывает. (То, что придет последним, вступит в силу.)

По порядку: стиль добавляется прямо к элементу > таблицы стилей > по умолчанию

Внутри таблиц стилей, #id > .class > element

Если таких будет несколько, победит последний из них.

Редактировать 4: извините, я ошибся во втором предложении в своем ответе. Я отредактировал его.

Вам просто нужно добавить это в свой якорь

margin-left:0px;
margin-bottom: 0px;
margin-top: 0px; 

чтобы убрать маржу.

person snaplemouton    schedule 26.03.2013
comment
Я так и подумал: ‹a href=.. class=class1 class2› - где class1 и class2 имеют значения маржи. Class1 margin-top:20px class2 margin-top:0px Могу ли я получить 20px (как в 20px + 0px) или я должен получить 0px, потому что он пришел последним. Я бы подумал, что 0px будет отображаться, но другие вещи сочетаются, поэтому теперь мне интересно, получаю ли я 20px + 0px. - person J.D.; 26.03.2013
comment
Он должен быть последним, кого выберут. Если нет, я думаю, мне придется пересмотреть каскадный порядок. В любом случае, вы всегда можете установить класс только для своего якоря и использовать на нем !important. !important всегда будет выбран выше всего остального (кроме других !important) - person snaplemouton; 26.03.2013

Каскад CSS

Каскад определяется в основном специфичностью. Ниже приведен список приоритетов, от высокого к низкому.

1. !important modifier
2. Dynamically-applied styles using JavaScript
3. Inline styles specified using the style attribute
4. Specificity of the selector (higher specificity wins)
      (a)  #id                                 (100 points each)
      (b)  .class, :pseudo-class, [attribute]  ( 10 points each)
      (c)  element, ::pseudo-element           (  1 point each )
      (d)  *                                   (  0 points each)
5. Whichever one appears last

Стиль с наивысшим приоритетом применяется последним. При ничьей побеждает тот, кто появляется позже в коде.

Это небольшое упрощение, но оно должно передать основную идею. Подробнее:

  • Класс, псевдокласс или атрибут превосходят любое количество элементов или псевдоэлементов.
  • Идентификатор превосходит любое количество классов, псевдоклассов или атрибутов.
  • Встроенный стиль, установленный с помощью статического HTML или JavaScript, превосходит любое количество идентификаторов.
  • И самое главное, стиль с модификатором !important превосходит любой стиль без него.

Конкретные примеры

                 formal         informal
selector         notation       notation
---------        --------       --------
* {}             0,0,0,0        0000
div {}           0,0,0,1        0001
.a {}            0,0,1,0        0010
#a {}            0,1,0,0        0100
div#a.b.c {}     0,1,2,1        0121

Также специфичность встроенного стиля составляет 1000 баллов (1,0,0,0).

person Matt Coughlin    schedule 26.03.2013

text-indent: 0px;

Свойство CSS.

Отрицание этого значения и использование его для padding-left или margin-left ссылки даст желаемый результат.

<p style="text-indent:40px;">
    <a hre="#" style="margin-left:-40px;" onclick="this.style.display='none';">Un-indent</a> blah blah blah blah blah</p>
person Louis Ricci    schedule 26.03.2013