Подтвердить что ты не робот

Как можно сосредоточить текст и текст с плавающей запятой в одной строке, когда все имеет динамическую ширину?

У меня есть блок текста с переменным размером, который я бы хотел сосредоточить в div. Ширина div - это% его родительского элемента, а высота определяется заполнением, но тем не менее высоким является центральный текст. Это легко достигается с помощью:

<div style="width: 50%; padding: 15px; text-align: center;">
    Lorem ipsum...
</div>

Это прекрасно работает.

Но когда я пытаюсь добавить часть справа:

<div style="width: 50%; padding: 15px; text-align: center;">
    Lorem ipsum...
    <div style="float: right;">ASDF!</div>
</div>

тогда он подсчитывает ширину текста справа от общей ширины текста и помещает "ASDF!". справа, но помещает "Lorem ipsum..." больше влево, чем это должно быть (как будто общая длина лора... включала asdf!).

Вот макет того, что я пытаюсь достичь:

Mockup of what I'm trying to achieve.

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

Этот вопрос кажется актуальным, но (исправьте меня, если я ошибаюсь), кажется, требуется известная ширина.

Как мне лучше всего это делать?

4b9b3361

Ответ 1

Попробуйте следующее:

<div class='content' style="width: 50%; padding: 15px; text-align: center; position: relative">
    <div class="noDown" style="position: absolute; right: 0;">ASDF!</div>
    Lorem ipsum...
</div>​

Тест JsFiddle: http://jsfiddle.net/3Y7ty/2/

Ответ 2

IE8 + Старый Достаточно?

Основываясь на вашей скрипке, вы можете получить то, что хотите в IE8+. Обратите внимание, что оболочка #b должна иметь свойство box-sizing, чтобы получить значение width: 50%, включая padding. Затем для вашего плавающего элемента просто добавьте это:

margin: 0 -15px 0 -100%;

Правильное поле -15px учитывает ваш 15px правильный отступ, чтобы полностью потянуть элемент вправо, а затем левое поле -100% заставляет исходный текст полностью центрировать.

Или нужна ли поддержка IE7?

Вы упомянули о необходимости поддержки "старых браузеров", но вы не даете никакой информации о том, как удержать (IE8 "старый" сейчас, но, возможно, вы ссылаетесь даже на более старые). Если вам нужна поддержка IE7 (или ниже?), Вам придется условно настроить IE7 и использовать это вместо:

margin: -1.2em -15px 0 0;

IE7 не распознает float: right так же, как и более поздние браузеры, и он будет помещать его "ниже" в предыдущий текст, а левое поле -100% потянет плавающий элемент влево. Таким образом, что уходит, и чтобы вывести текст в соответствие с предыдущим текстом, мы даем ему отрицательное верхнее поле, которое должно быть установлено равным line-height используемого шрифта (обычно это будет 1.2 или 1.1, вы можете явно установить его в контейнере #b). Я не проверял, работает ли это в IE6.

Ответ 3

Это хорошо для вас? http://jsfiddle.net/3Y7ty/

.container {
    width:100%;
    overflow:hidden;
    position:relative;
}
.center {
    width:50%;
    padding:15px;
    margin:0 auto;
    background:#ccc;
}

.right {
    display:inline-block;
    padding:15px;
    background:#999;
    position:absolute;
    right:0;
    top:0;
}


<div class="container">

 <div class="center">
     Lorem ipsum...
 </div>

 <div class="right">
     ASDF!
 </div>

</div>

Ответ 4

Я добавил эту скрипку. http://jsfiddle.net/nQvEW/68/. Проверьте это.

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

position:absolute;
width:500px;
height:40px;
background-color:#F00;

Ответ 5

вы можете попробовать:

    <div style="width:50%; padding: 15px; text-align: center; ">
Lorem ipsum...<div style=" display:inline; float:right;">ASDF!</div>
</div>

Он работал в быстром макете, который я только что сделал.

Ответ 6

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

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

Demo:

Просмотреть демо → → http://pasteboard.s3.amazonaws.com/images/1U5yFIwE.png

Основной код:

#text {
  margin: auto; /* aligns #text to the center of #container */
  text-align: center; /* self-explanatory; aligns text to the center */
  position: relative; /* needed so that the position of #right is relative to #text, not the body */
}

#right {
  display: inline-block; /* allows #right to display on the same line as the text in #text while still acting like a block element (block: p, div, etc.) */
  position: absolute; /* removes #right from the normal flow, and positions it in the top-left of #row */
  right: 0; /* aligns #right 0px away from the right side of #text */
}

Изображение demo image

Ответ 7

Я сделал с небольшим количеством работ css.,

Примеры кода для HTML:

<div class="MainContainer"><p>Lorem ipsum...</p><div style="float: right;">ASDF!</div></div>

Примеры кода для CSS:

.MainContainer{
    width : 50%;
    padding : 15px !important;   
    text-align : center !important;
    border : 15px solid #000;
    position : absolute;   
}

.MainContainer div { margin-top : -7%; text-align:center !important;}

Чтобы увидеть его в действии:

http://jsfiddle.net/john_rock/tZzwA/

Я думаю, это поможет вам решить вашу проблему.

Ответ 8

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

<div style="border:1px solid red;width: 50%; padding: 15px; text-align: center;position: relative;">
    Lorem ipsum...
    <div style="position: absolute;right: 0;top: 15px;">ASDF!</div>
</div>
<div style="border:1px solid red;width: 50%; padding: 15px; text-align: center;">
    Lorem ipsum...
</div>

http://jsfiddle.net/huuanito/8N9BT/

Ответ 9

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

  • Второй div должен быть независимым и не вложенным в первый.
  • Первый "div" должен плавать влево, а второй - вправо.

Это в значительной степени.

    <div style="width:50%; padding:15px; text-align:center; float:left;">
     Lorem ipsum...
 </div>

 <div style="float:right;">
     ASDF!
 </div>

Попробуйте!