2011-09-25 2 views
1

У меня есть родительский элемент (например, div), который окружает некоторый динамический контент. Я хотел бы, чтобы родительский div полностью содержал дочерние элементы в максимально возможной степени.CSS: Подавление отрицательных полей дочерних элементов

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

Так

  1. Есть ли CSS трюк, который может быть применен к родителю, чтобы подавить отрицательные поля в дочерних элементах (например, без необходимости изменять стили на ребенке).

  2. Если это не так, есть ли способ обнаружить через javascript, имеет ли конкретный элемент переполненный контент? (? И в каком направлении и в какой степени содержание переполнена)

ответ

1

ли вы пытаетесь поставить класс родителя как:

.parentDiv > * { 
    margin:0 !important; 
} 

Чтобы иметь родителя с нужной высоты, вам нужно установить некоторые CSS тоже:

.parentDiv{ 
    overflow:hidden; 
    position:relative; 
    background:#DFE; 
    padding:5px; 
} 
+0

Спасибо, я не пробовал - я отдам его и вернусь к вам. – UpTheCreek

+0

Одна из проблем заключается в том, что я действительно не хочу влиять на положительные поля на дочерние элементы. Но я посмотрю, смогу ли я с этим что-то сделать. – UpTheCreek

1

Существует Javascript метод обработки, но это, конечно, не так чисто, как @ решение CSS МИК. Я не полностью протестировал это, и вам может потребоваться добавить некоторую поддержку для различных корректировок отступов и полей, но это заставило бы кого-нибудь начать, если бы единственным вариантом было JS-решение. Использование Prototype.js (JQuery будет похож, но обычный Javascript будет очень .. растягивание):

function checkOverflow (child) { 
    child = $(child); 
    if (child.descendants().any()) { 
    child.getElementsBySelector("> *").each(function(e) { 
     checkOverflow(e); 
    }); 
    } 

    var parent = child.up(); 

    var child_left = child.cumulativeOffset()['left'], child_top = child.cumulativeOffset()['top']; 
    var child_height = child.getDimensions()['height'], child_width = child.getDimensions()['width']; 

    var parent_left = parent.cumulativeOffset()['left'], parent_top = parent.cumulativeOffset()['top']; 
    var parent_height = parent.getDimensions()['height'], parent_width = parent.getDimensions()['width']; 

    if (child_top < parent_top) { 
    if (child_left < parent_left) { 
     // adjust element style here 
    } else if (child_left > parent_left + parent_width) { 
     // adjust element style here 
    } 
    } else if (child_top > parent_top + parent_height) { 
    if (child_left < parent_left) { 
     // adjust element style here 
    } else if (child_left > parent_left + parent_width) { 
     // adjust element style here 
    } 
    } 
} 

Мое общее чувство, однако, является то, что вы должны сделать это, только если он не может быть явно сделано через CSS.

+0

Спасибо Адаму - Интересный подход. Я бы предпочел использовать css, но у меня есть чувство, что я не смогу выполнить его с помощью css в одиночку, поэтому что-то в этом направлении может понадобиться. – UpTheCreek

+0

О, и это быстро, это использование prototype.js. –

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