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

2 divs выровнены бок о бок, как сделать правую ширину заполнения заливки 100%?

Мне интересно, как лучше всего это сделать...

У меня есть 3 div s:

  • a div#container с width=100%;, который содержит 2 внутренних div s

  • a div#inner_left с width изменяется динамически, но не более 200px (будет содержать изображение продукта)

  • a div#inner_right, где ширина должна заполнить остальную часть пространства в контейнере (будет содержать текст для описания отображаемого продукта)

    #container {
       width:100%
    }
    
    #inner_left {
        display:inline-block:
        max-width:200px;
    }
    
    #inner_right {
        display:inline-block;
        width:100%; 
    }
    

Проблема заключается в том, что div#inner_right создает разрыв строки и заполняет всю ширину. Как я могу заставить их совмещать друг с другом, а правый div учитывает ширину, занимаемую левой кнопкой div (которая динамически изменяется?). Я получил это, чтобы работать другими способами, но я ищу чистое решение...

Любая помощь для CSS noob очень ценится!

4b9b3361

Ответ 1

Посмотрите на " макеты жидкостей" он может описать, о чем вы говорите.

Вероятно, вы ищете этот.

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

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

Изменить: Вот пример другого ответа, я отредактировал его, чтобы включить html/css из примера сайта выше для простоты.

Я также включу его ниже:

HTML

<div id="contentwrapper">
    <div id="contentcolumn">
        <div class="innertube"><b>Content Column: <em>Fluid</em></b></div>
    </div>
</div>
<div id="leftcolumn">
    <div class="innertube"><b>Left Column: <em>200px</em></b></div>
</div>

CSS

#contentwrapper{
float: left;
width: 100%;
}

#contentcolumn{
margin-left: 200px; /*Set left margin to LeftColumnWidth*/
}

#leftcolumn{
float: left;
width: 200px; /*Width of left column*/
margin-left: -100%;
background: #C8FC98;
}

Ответ 2

Я действительно не видел хорошего решения в ответах здесь. Поэтому я поделюсь с вами.

Лучший способ сделать это - использовать параметр table-cell в CSS. Одна важная вещь, которую нужно добавить, - это "минимальная ширина" элемента, который имеет ширину пикселя.

Пример:

<div id="left">
    Left
</div>
<div id="right">
    right
</div>

CSS

#left {
    display: table-cell;
    min-width: 160px;
}
#right {
    display: table-cell;
    width: 100%;
    vertical-align: top;
}

Ответ 3

Итак, хотя я хотел сделать это только с помощью CSS, я просто использовал таблицы...

Ответ 4

Это может быть выполнено с помощью Flex-Box, который был введен с CSS3 и в соответствии с Могу ли я использовать - это кросс-браузер.

.container { 
  display: flex; 
}

.left {
  width: 100px; /* or leave it undefined */
}

.right { 
  flex-grow: 1;
}

/* some styling */
.container {height: 90vh}
.left {background: gray}
.right {background: red}
<div class="container">

  <div class="left">100px</div>
  <div class="right">Rest</div>
  
</div>

Ответ 5

Использовать плавающее:

#container{
width:100%
}

#inner_left{
float:left;
max-width:200px;
}

#inner_right{
float:left;
width:100%; 
}

Изменить: прочитайте это, это хороший маленький справочник: quirksmode

Ответ 6

вам нужно предоставить позицию: абсолютное свойство стиля для обоих div

Ответ 7

Это основано на ответе @w00. +1 друг.

Моя ситуация была, когда я хотел показать пару значков рядом с ярлыком. Я использую класс текучей среды для того, где находится nowrap. Это значит, что значки отображаются в одной строке.

.sidebyside-left-fixed, .sidebyside-right-fixed
{
    display: table-cell;
    width: 100%;
}

.sidebyside-left-fluid , .sidebyside-right-fluid
{
    display: table-cell;
    vertical-align: top;
    white-space: nowrap;
}

Ответ 8

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

Ссылка на образец: https://jsfiddle.net/collinsethans/jdgduw6a/

Здесь часть HTML:

<div class="wrapper">
    <div class="left">
        Left Box
    </div>

    <div class="right">
        Right Box
    </div>

</div>

И соответствующий SCSS:

.wrapper {
    position: relative;
}

$left_width: 200px;
.left {
    position: absolute;
    left: 0px;
    width: $left_width;
}
.right {
    margin-left: $left_width;
}

Если вы не используете препроцессоры CSS, замените $left_width своим значением (200px здесь).

Кредит: он основан на http://htmldog.com/examples/pagelayout2/. Там есть еще несколько полезных.