2008-11-12 2 views
30

Если у вас есть последовательность элементов блока, и вы хотели бы установить маржу между ними.Css margin-top vs margin-bottom

Какой из них вы предпочитаете, крайний край или крайнее дно или оба? Зачем?

+0

не забывайте о краже-крах – 2013-08-02 09:14:20

ответ

15

Я всегда использую margin-bottom, что означает, что перед первым элементом нет ненужного пространства.

+0

Я также использую этот подход в наши дни. Кажется очень естественным/логичным, и часто маржа после того, как что-то более логически связано с этой вещью, чем край выше, если это имеет смысл. Однако у меня возникли проблемы с помещением меньше места между элементами одного типа (например, теги P), чем пространство между элементами различного типа. И из некоторых примеров на этой странице кажется, что переход на верхний маржированный маршрут предлагает более элегантное решение. Но я не знаю. Я думаю, что я запустил еще один поток SO для этого конкретного вопроса. – sugardaddy 2015-07-23 14:23:01

+0

Я переключился на это после того, как несколько раз стал «margin-top». В то время как у @sblundy есть точка, в которой я никогда не нуждался в этом решении. Но опять же, я использую React с SASS и Radium, что заставляет много хакеров CSS изобретать на протяжении многих лет устаревшим. – BAR 2016-07-15 16:54:52

31

В зависимости от контекста. Но, как правило, margin-top лучше, потому что вы можете использовать :first-child, чтобы удалить его. Вроде так:

div.block { 
    margin-top: 10px; 
} 

div.block:first-child { 
    margin-top: 0; 
} 

Таким образом, поля находятся только между блоками.

Работает только для более современных браузеров, очевидно.

+0

Имейте в виду, что псевдоэлементы, подобные этому, как правило, ломаются в старых браузерах. – thismat 2008-11-12 18:32:06

1

@ Этот коврик - я не согласен с вашим подходом. Я бы назначил промежуток по элементам семантическим образом и использовал контекстные селекторы для определения поведения для этой коллекции элементов.

.content p { /* obviously choose a more elegant name */ 
    margin-bottom: 10px; 
} 

Именования классов после их поведений, а не их содержаний рода скользкого склона, и мутят до семантического характера вашего HTML. Например, что, если в одной области вашей страницы все элементы с классом .top10 вдруг нуждались в 20 пикселях? Вместо того, чтобы изменять одно правило, вам нужно будет создать новое имя класса и изменить его на все элементы, на которые вы хотите повлиять.

Чтобы ответить на исходный вопрос, он полностью зависит от того, как вы хотите, чтобы элементы стекались. Вы хотите, чтобы дополнительное пространство было сверху или снизу?

0

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

.discussion .detailed.topics { margin: 20px 0 }  
.discussion .detailed.topics .topic { margin-bottom: 30px } 
.discussion .detailed.topics .topic.last { margin-bottom: 0 } 

Это сильный подход, когда вы используете динамически работы с содержанием

HTML (Razor View Engine)

<div class="detailed topics"> 
    @if (Model.ActiveTopics != null && Model.ActiveTopics.Count > 0) 
    { 
     for (int i = 0; i < Model.ActiveTopics.Count(); i++) 
     { 
      var topic = Model.ActiveTopics[i]; 
      <div class="[email protected](i == Model.ActiveTopics.Count - 1 ? " last" : "")"> 
       ...         
      </div> 
     } 
    } 
</div> 
9

Другой вариант заключается в использовании + селектор в сочетании с margin-top:

.article + .article { 
    margin-top: 10px; 
} 

Это выбирает последний элемент, который h означает, что правило не будет применяться к первому элементу вообще. Никаких дополнительных классов, псевдоклассов или пробелов выше или ниже элементов.

0

Я всегда добавлял маржу к элементу, который я считаю более необязательным. То есть к элементу, который скорее всего будет удален из DOM. Пример:

<div class="title">My Awesome Book</div> 
<p>Description of My Awesome Book</p> 

В этом случае я бы поставил margin-top к <p>, потому что описание не имеет смысла без названия, но описание имеет некоторый потенциал, чтобы быть удален, если я хотел просто упомянуть название.

Другой пример:

<img src="icon.png"> 
<div>My Awesome Book</div> 

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

Это моя философия. Элементы стиля - способ предотвращения изменений CSS через потенциальные изменения DOM.

Смежные вопросы