Как сделать «text-overflow: ellipsis» для обоих «float: left» и «float: right» div? - PullRequest
5 голосов
/ 25 апреля 2009

У меня есть требование к веб-дизайну, чтобы заголовок был таким:

+-------------------------------------------------------------+
| +---------------------+  +-------++------------------------+|
| | float left DIV A    |  | DIV C || float right DIV B      ||
| +---------------------+  +-------++------------------------+|
+-------------------------------------------------------------+

Заголовок состоит из 3 частей: Div A, B, C. DIV A плавает влево, а DIV B и C - вправо. DIV A и DIV B могут содержать длинный текст. Таким образом, переполненный текст обрезается как многоточие. DIV C имеет короткий текст, его содержание не должно быть усечено.

Я пытался сделать HTML как показано ниже:

<html>
    <head>
        <style>
            .header
            {
                width: 100%;
                border: 2px red;
                overflow: hidden;
            }
            .DivA
            {
                float: left;
            }
            .DivC
            {
                float: right;
                white-space:nowrap;
            }
            .DivB
            {
                float: right;
            }
            .clear
            {
                clear: both;
            }
            .DivA, .DivB
            {
                width: 40%;
                overflow: hidden;
                text-overflow: ellipsis;
                white-space: nowrap;
            }
        </style>
    </head>
    <body>
        <div class="header">
            <div class="DivA">
                Hello world 1 Hello world 2 Hello world 3
                Hello world 1 Hello world 2 Hello world 3
                Hello world 1 Hello world 2 Hello world 3
            </div>
            <div class="DivB">
                Good bye Good bye
                Good bye Good bye
                Good bye Good bye
            </div>
            <div class="DivC">
                No Ellipsis
            </div>
            <div class="clear">
            </div>
        </div>
    </body>
</html>

Переполнение текста: многоточие работает, только если DIV A и DIV B имеют ширину (в моем случае я установил их равными 45%).

Однако есть одна проблема с DIV C. Поскольку ширина DIV C может быть разной в разных локализациях, мы не можем установить ее ширину в явном виде. При сужении окна браузера div C может быть перенесен на следующую строку. Это выглядит плохо.

Есть ли способ заставить DIV A и DIV B плавать влево и вправо соответственно с помощью многоточия переполнения, в то же время DIV C может адаптироваться к своей лучшей ширине?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2009

Что вам нужно сделать здесь, это применить поле к div # c, которое соответствует ширине div # a и div # b

Возьмите, к примеру, ниже;

<style>
.DivA {width:250px; float:left;}
.DivB {width:150px; float:right;}
.DivC {margin-left:260px; margin-right:160px;}
</style>

<div class="DivA" />
<div class="DivB" />
<div class="DivC" />

Вы заметите, что я добавил дополнительные 10px к каждой ширине, это просто для того, чтобы обеспечить большее расстояние между элементами, конечно, вам также нужно будет идеально их очистить.

Это даст вам два фиксированных столбца с каждой стороны и центральный элемент, который займет любое свободное пространство.

0 голосов
/ 22 апреля 2013

Это очень старый (09 '), но я отвечу за тех, кто пришел с поиска, как я.

Поскольку A и B равны 40% каждый, максимальное значение C будет равно 20%, поскольку заголовок равен 100%. Поэтому добавьте max-width:20%; к нему, и C не перейдет в следующую строку. Но затем, когда окно браузера становится узким, текст при необходимости переносится.

Если вам не нужно это поведение, вы можете добавить white-space: nowrap;, чтобы текст на C перекрывался с текстом на B.

См. http://jsfiddle.net/fxLVQ/

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