Расчет ширины от процента до пикселя, а затем минус на пиксель в LESS CSS


101

Я буду вычислять ширину в некотором элементе от процента до пикселя, поэтому я буду минус -10 пикселей, используя LESS и calc () . Это возможно?

div {
    span {
        width:calc(100% - 10px);
    }
}

Я использую CSS3, calc()поэтому он не работает:calc(100% - 10px)

Пример: если 100% = 500 пикселей, значит ширина = 490 пикселей (500-10);

Сделал демонстрацию для тестирования: http://jsfiddle.net/4DujZ/55/

поэтому при изменении размера отступы всегда будут говорить: 5 (10 пикселей / 2).

Могу ли я сделать это МЕНЬШЕ ? Я знаю, как это сделать в jQuery и простом CSS, например, с заполнением полей или еще ... но я постараюсь сделать функционал МЕНЬШЕ сcalc()



1
Вот кроссбраузерный миксин, который я написал для использования calc в любом свойстве css: stackoverflow.com/a/24790931/916734
Патрик Беркли

Ответы:


247

Вы можете избежать calcаргументов, чтобы предотвратить их оценку при компиляции.

Используя ваш пример, вы просто окружите аргументы, например:

calc(~'100% - 10px')

Демо: http://jsfiddle.net/c5aq20b6/


Я обнаружил, что использую это одним из следующих трех способов:

Базовый побег

Все внутри calcаргументов определяется как строка и полностью статично, пока не будет оценено клиентом:

МЕНЬШЕ ввода

div {
    > span {
        width: calc(~'100% - 10px');
    }
}

Вывод CSS

div > span {
  width: calc(100% - 10px);
}

Интерполяция переменных

Вы можете вставить переменную LESS в строку:

МЕНЬШЕ ввода

div {
    > span {
        @pad: 10px;
        width: calc(~'100% - @{pad}');
    }
}

Вывод CSS

div > span {
  width: calc(100% - 10px);
}

Смешивание экранированных и скомпилированных значений

Возможно, вы захотите избежать процентного значения, но продолжайте и оцените что-нибудь при компиляции:

МЕНЬШЕ ввода

@btnWidth: 40px;
div {
    > span {
        @pad: 10px;
        width: calc(~'(100% - @{pad})' - (@btnWidth * 2));
    }
}

Вывод CSS

div > span {
  width: calc((100% - 10px) - 80px);
}

Источник: http://lesscss.org/functions/#string-functions-escape .


2
Ты молодец, чувак! Спасибо за эти примеры и объяснения. Вы случайно не знаете, как я могу разделить неизвестную ширину контейнера (назовем его div.categories) на 4 равные части, используя LESS?
Шон Спенсер

5
@ShawnSpencer: Между строк много неясности. Можете ли вы создать JSFiddle, иллюстрирующий то, что вы пытаетесь решить? Я могу попытаться угадать вариант использования, но меня сдерживает незнание всех деталей, и я уверен, что вы знаете, как это происходит - ваши худшие запреты, как правило, в конце концов нервируют вас.
натчикета

2
Я не склонен смиряться с совершеннолетием. Поскольку я собираюсь использовать простое решение CSS, и поскольку я смог заставить все работать, используя один из ответов, я в порядке. Спасибо, что предложили взглянуть на пример JSFiddle. Очень признателен.
Шон Спенсер


-3

Или вы можете использовать атрибут поля следующим образом:

    {
    background:#222;
    width:100%;
    height:100px;
    margin-left: 10px;
    margin-right: 10px;
    display:block;
    }

3
OP хочет, чтобы ширина на 10 пикселей была меньше 100% ширины. Ваш CSS этого не делает. Это сделает его шире 100%.
Эндрю Барбер,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.