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

Css разделяет ширину от 100% до 3 столбцов

У меня есть макет, где у меня есть 3 столбца.

Поэтому я делю 100% на 3.

Результат явно 33,333....

Моя цель - идеальная 1/3 экрана.

Вопрос:

Сколько чисел после точки может обработать CSS, чтобы указать 1/3 ширины?

например, 33.33333 (n=5) ← сколько n может обработать css

HTML:

<div id="wrapper">
    <div id="c1"></div>
    <div id="c2"></div>
    <div id="c3"></div>
</div>

CSS:

#c1, #c2, #c3 {
    width: 33%; // 1/3 of 100%
}

Есть ли лучший способ разделить на 3?

4b9b3361

Ответ 1

Идеальная 1/3 не может существовать в CSS с полной кросс-браузерной поддержкой (что-либо ниже IE9). Я лично сделал бы: (Это не идеальное решение, но оно примерно так же хорошо, как вы получите для всех браузеров)

#c1, #c2 {
    width: 33%; // 1/3 of 100%
}

#c3 {
    width: auto;
    //or width:34%;
}

Ответ 2

Используйте CSS calc():

body {
  margin: 0;
}

div {
  height: 200px;
  width: 33.33%; /* as @passatgt mentioned in the comment, for the older browsers fallback */
  width: calc(100% / 3);
  display: inline-block;
}

div:first-of-type { background-color: red }
div:nth-of-type(2) { background-color: blue }
div:nth-of-type(3) { background-color: green }
<div></div><div></div><div></div>

Ответ 3

Как насчет использования гибкой модели CSS3:

Код HTML:

<div id="wrapper">
    <div id="c1">c1</div>
    <div id="c2">c2</div>
    <div id="c3">c3</div>
</div>  

Код CSS:

*{
    margin:0;
    padding:0;
}

#wrapper{
    display:-webkit-flex;
    -webkit-justify-content:center;

    display:flex;
    justify-content:center;

}

#wrapper div{
    -webkit-flex:1;
    flex:1;
    border:thin solid #777;

}

Ответ 4

Используя эту скрипту, вы можете играть с width каждого div. Я пробовал как в Chrome, так и в IE, и вижу разницу в ширине между 33% и 33.3%. Я также замечаю очень небольшую разницу между 33.3% и 33.33%. Я не замечаю никаких различий, кроме этого.

Разница между 33.33% и теоретическим 33.333...% является просто 0.00333...%.

Для аргументов, скажем, ширина экрана 1960px; довольно высокое, но общее разрешение. Разница между этими двумя ширинами остается только 0.065333...px.

Итак, более двух знаков после запятой разница в точности незначительна.

Ответ 5

В случае, если вам интересно, в системе шаблонов Bootstrap (которая очень точна), вот как они делят столбцы, когда вы применяете класс .col-md-4 (1/3 из системы с 12 столбцами)

CSS

.col-md-4{
    float: left;
    width: 33.33333333%;
}

Я не фанат float, но если вы действительно хотите, чтобы ваш элемент составлял 1/3 вашей страницы, у вас нет выбора, потому что иногда, когда вы используете элемент inline-block, браузер может рассмотреть пространство в вашем HTML как 1px пробел, который сломает ваш идеальный 1/3. Надеюсь, это помогло!

Ответ 6

На всякий случай кто-то все еще ищет ответ,

пусть браузер позаботится об этом. Попробуйте следующее:

  • display: table в элементе контейнера.
  • display: table-cell для дочерних элементов.

Браузер равномерно разделит его на наличие 3 или 10 столбцов.

ИЗМЕНИТЬ

элемент контейнера должен также иметь: table-layout: fixed иначе браузер будет определять ширину каждого элемента (большую часть времени не так уж и плохо).

Ответ 7

Просто, чтобы представить альтернативный способ исправить эту проблему (если вы действительно не заботитесь о поддержке IE):

Мягко кодированное решение должно было бы использовать display: table (без поддержки в IE7) вместе с table-layout: fixed (для обеспечения столбцов равной ширины).

Подробнее об этом здесь.

Ответ 8

Я обнаружил, что иногда требуется 6 десятичных знаков (по крайней мере, в Chrome), чтобы 1/3 возвращал идеальный результат.

Например, 1140px/3 = 380px

Если у вас было 3 элемента в контейнере 1140, они должны были иметь ширину, равную 33.333333%, прежде чем инструмент инспектора Chrome покажет, что они находятся на 380 пикселей. Любое меньшее количество десятичных знаков, а Chrome возвращает меньшую ширину 379.XXX px

Ответ 9

.selector{width:calc(100% / 3);}

Ответ 10

Обновление 2018 Это метод, который я использую width: 33%; width: calc(33.33% - 20px); Первые 33% предназначены для браузеров, которые не поддерживают calc() внутри свойства width, вторые должны быть снабжены поставщиками префиксами -webkit- и -moz- для лучшей кросс-браузерной поддержки.

#c1, #c2, #c3 {
    margin: 10px; //not needed, but included to demonstrate the effect of having a margin with calc() widths/heights
    width: 33%; //fallback for browsers not supporting calc() in the width property
    width: -webkit-calc(33.33% - 20px); //We minus 20px from 100% if we're using the border-box box-sizing to account for our 10px margin on each side.
    width: -moz-calc(33.33% - 20px);
    width: calc(33.33% - 20px);
}

тл; др учёт твоей маржи

Ответ 11

Я не думаю, что вы можете сделать это в CSS, но вы можете вычислить идеальную ширину пикселя с помощью javascript. Скажем, вы используете jQuery:

Код HTML:

<div id="container">
   <div id="col1"></div>
   <div id="col2"></div>
   <div id="col3"></div>
</div>

Код JS:

$(function(){
   var total = $("#container").width();
   $("#col1").css({width: Math.round(total/3)+"px"});
   $("#col2").css({width: Math.round(total/3)+"px"});
   $("#col3").css({width: Math.round(total/3)+"px"});
});