CSS-макет: 2 столбца с фиксированной плавностью (снова)

Я пытаюсь настроить макет с двумя столбцами, где левая область фиксирована, а основное содержимое является гибким. Я видел здесь несколько ответов, которые, как правило, работают. Однако есть некоторое странное поведение, когда я использую «jsTree» в своей «левой» области и вкладки пользовательского интерфейса jQuery в основной области/области содержимого.

html

<div id="main">
    <div id="left">
        <div id="tree">
        </div>
    </div>
    <div id="right">
        <ul>
            <li><a href="#a">A</a></li>
            <li><a href="#b">B</a></li>
            <li><a href="#c">C</a></li>
        </ul>
        <div id="a">
            <h3>A is here</h3>
        </div>
        <div id="b">
            <h3>B is here</h3>
        </div>
        <div id="c">
            <h3>C is here</h3>
        </div>
    </div>
</div>

CSS

#left {
    float: left;
    width: 200px;
    overflow: auto;
}

#right {
    margin: 0 0 0 200px;
}

javascript

$(document).ready(function() {
    $('#right').tabs();
    $('#tree').jstree({
        "plugins" : [ "json_data", "themes"],
        "json_data" : {
            "data" : [
                { 
                    "data" : "A node", 
                    "children" : [ "Child 1", "Child 2" ]
                },
                { 
                    "attr" : { "id" : "li.node.id" }, 
                    "data" : { 
                        "title" : "Long format demo", 
                        "attr" : { "href" : "#" } 
                    } 
                }
            ]
        }, 
    });
});

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

Взгляните на этот пример здесь: http://jsfiddle.net/codecraig/gBUw2/


person codecraig    schedule 01.04.2011    source источник


Ответы (3)


Иосия прав, но лучшее решение — изменить природу техники ясной фиксации. .ui-helper-clearfix делает это:

.ui-helper-clearfix::after {
    clear: both;
    content: '.';
    display: block;
    height: 0px;
    visibility: hidden;
}

И проблема в clear:both. Вы можете получить желаемую очистку, не теряя отображения блока во всю ширину, с помощью этого:

#right .ui-helper-clearfix {
    clear: none;
    overflow: hidden;
}

Это заменяет clear:both clear-fix на overflow:hidden clear-fix.

http://jsfiddle.net/ambiguous/BkWWW/

person mu is too short    schedule 01.04.2011
comment
Так что это работает, но теперь я понимаю, что содержимое вкладок также все портит. Итак, на одной из вкладок у меня есть таблица (из datatables.net). - person codecraig; 01.04.2011
comment
Посмотрите на этот пример (тот же, что и раньше, но добавляет ui-clearfix + datatable): jsfiddle.net/codecraig/qfp5N - person codecraig; 01.04.2011
comment
Я не вижу никаких данных в этой скрипке. - person mu is too short; 01.04.2011
comment
Эта таблица переполняет панель вкладок с различными .ui-helper-clear-fix хаками или без них. Вам придется исправить это, обеспечив, чтобы панель всегда была достаточно широкой для таблицы, или добавив что-то вроде #a { overflow-x: scroll; }, чтобы добавить горизонтальную полосу прокрутки: jsfiddle.net/ambiguous/FSpW6/1 - person mu is too short; 01.04.2011
comment
@mu слишком короткий - очень красиво! Я не вытащил исходный код ui.css, чтобы увидеть, что он на самом деле делает, и фильтр after не отображается в моем инспекторе. +1 - person Josiah Ruddell; 01.04.2011
comment
@mu-is-too-short: отлично. хорошо, еще одна вещь (я думаю). высота дерева, как мне сделать так, чтобы она соответствовала вкладкам справа? посмотрите, насколько широк нижний узел дерева (так что вы видите горизонтальную полосу прокрутки)... Я бы хотел, чтобы дерево было таким же высоким, как область вкладок: играем здесь - person codecraig; 01.04.2011
comment
@Josiah: Материал ::after отображается в инспекторе WebKit (лучшем, ИМХО), но вам нужно немного прокрутить, чтобы найти его. - person mu is too short; 01.04.2011
comment
@codecraig: я думаю, тебе не повезло с этим. Дерево добавляет white-space: nowrap; к этим элементам, но если вы вручную установите это значение в white-space: normal;, то рендеринг дерева станет запутанным и уродливым; вам придется переработать внутренности дерева, чтобы сделать его многострочным, и у меня нет места на этом поле для этого :) - person mu is too short; 01.04.2011
comment
@mu-is-too-short - полезно знать. Я согласен насчет лучшего, firebug точно соответствует его названию. - person Josiah Ruddell; 01.04.2011

Заголовок вкладок виджета имеет четкое исправление. обновлена ​​скрипта. Вы можете исправить это с помощью неплавающего макета или переопределить css следующим образом:

#right .ui-helper-clearfix { display: inline-block; }

Это делает так, что заголовок не расширяет всю ширину контейнера.

person Josiah Ruddell    schedule 01.04.2011
comment
Я бы не хотел использовать поплавки, но я не использую/не могу использовать фиксированный макет. Что ты посоветуешь? - person codecraig; 01.04.2011
comment
@codecraig - я обновил макет, дайте мне знать, если это сработает для вас: новая скрипка добавила оболочка для вкладок, которая также плавает. Это устраняет проблему, но требует, чтобы оба контейнера имели заданную ширину. - person Josiah Ruddell; 01.04.2011
comment
Мне действительно не нужна жестко заданная ширина. Кроме того, у этого все еще есть проблема, которую я вижу, когда на одной из вкладок есть таблица данных: - person codecraig; 01.04.2011

Все, что вам нужно сделать, это просто настроить свой css, например:

#left {
    float: left;
    width: 23%;
    overflow: auto;
}

#right {
    float: left;
    width: 75%;
    display: block;
}

Это также решит проблему, из-за которой контейнер вкладок не расширяется на всю ширину. Хотя вы можете настроить процент ширины #right так, как вам нравится.

person Linmic    schedule 01.04.2011
comment
Извините, но применение этого не работает. Попробуйте использовать ссылки скрипки и применить этот подход. - person codecraig; 01.04.2011
comment
какой браузер вы используете? используя Chrome, и он работает по вашей ссылке скрипки. хотя вы можете настроить ширину #left самостоятельно - person Linmic; 01.04.2011
comment
@codecraig Я тестировал в Firefox 4, Chrome 10, IE8, 9. Все работает. Я создал новую ссылку: jsfiddle.net/vMeYq - person Linmic; 01.04.2011
comment
Я понимаю, что вы говорите, однако дискуссия немного расширилась. Проблема переросла в проблему с таблицей данных в области вкладок (см. Ответы от mu слишком короткие), которую предоставленное вами решение не устранило. - person codecraig; 01.04.2011