Настройка размера изображения в соответствии с базовой сеткой в CSS

#javascript #html #css #image

#javascript #HTML #css #изображение

Вопрос:

Я работаю над веб-сайтом с заданной базовой линией в 14 пикселей, которая затем экстраполируется на различные размеры (двойные, тройные и т.д.). Это было здорово, пока я был сосредоточен только на том, чтобы исправить текст и устранить проблемы, которые неизбежно возникают при попытке сделать это правильно.

Однако сейчас я нахожусь в затруднительном положении, поскольку пытаюсь автоматически форматировать изображения, чтобы они правильно соответствовали макету. Изображения будут в формате HTML, и я не буду иметь контроля над их физическими размерами. Каков наилучший способ убедиться, что эти изображения соответствуют моей базовой сетке?

Например, если у меня есть изображение высотой 400 пикселей, мне нужно убедиться, что оно отображается с разрешением 392 пикселя, что в 28 раз превышает базовую линию (и, следовательно, совпадает с текстом). Это должно работать независимо от размера изображения, всегда отдавая предпочтение округленной доле в меньшую сторону (т.е. 400 пикселей равно 28,57… так должно получиться 14×28). Затем ширина должна последовать его примеру.

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

Ответ №1:

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

 $( document ).ready(function() {
    $('img').each(function() {
        var b = 14,
            h = $(this).height(),
            x = Math.floor(h/b)*b;
        $(this).css('height',x);
    });
});
 

Измените переменную b, чтобы она соответствовала вашей базовой линии, и теперь все изображения будут изменены в соответствии с размером, независимо от их высоты. Единственная проблема заключается в том, что если вам нужна ширина 100%, вам нужно посмотреть на маскирующий DIV, но мне это не нужно для этого конкретного проекта. Очень полезно, хотя для тех, кто педантично относится к своим базовым показателям, как я!

Ответ №2:

Следуя идее @teknetia. Вы можете игнорировать высоту изображения и вместо этого динамически изменять поле, чтобы оно перемещало следующий бит содержимого до следующей базовой линии.

 $('img').each(function() {
    var b = 24,
        h = $(this).height(),
        x = (b*Math.ceil(h/b))-h;
        console.log(x);
    $(this).css('margin-bottom',x);
});