Существуют ли какие-либо способы для значений CSS реагировать на ширину окна, кроме экрана @media?

Мне было интересно, есть ли лучшие и более эффективные способы, чтобы значения CSS реагировали на ширину окна? Например, большое изображение располагается в верхнем правом углу, когда окно большое, но по мере уменьшения страницы большое изображение становится меньше, так как оно начинает смещаться из нижнего левого угла окна. Другой способ посмотреть на это: 1000px широкий экран = top:0;, поэтому он будет настроен таким образом, что на каждый 1px размер экрана уменьшается, значение 1px добавляется к top. Это что-то вроде REM и типографики.

Мысли/идеи? Я также ищу решение только для CSS, если это возможно.


person kenhimself    schedule 23.12.2014    source источник
comment
Вы можете использовать проценты в свойстве width:.   -  person Barmar    schedule 23.12.2014
comment
Верно, но я спрашиваю, как значение «верхнее» может увеличиваться при изменении ширины страницы? «Верх» реагирует только на вертикальное изменение, сделанное окном, а не на горизонтальное. Я ищу способ сделать это: уменьшить ширину страницы = увеличить значение «верх».   -  person kenhimself    schedule 23.12.2014
comment
$(window).width(); и $(window).height();   -  person knitevision    schedule 23.12.2014
comment
А, интересно. Kitevision, не могли бы вы сделать быструю демонстрацию с использованием jsfiddle?   -  person kenhimself    schedule 23.12.2014


Ответы (4)


Вы всегда можете использовать значение ширины percent. Например, если вы хотите, чтобы большая фотография масштабировалась до расстояния, которое она имеет с нижней частью браузера, вы можете использовать что-то вроде:

#photo{
    bottom:60%;
    width:50%;
}

Таким образом, вы всегда будете иметь одинаковые соотношения в вашем окне. Конечно, чтобы это произошло, вы должны определить контейнер positiom:relative полной ширины.

person Leonidas    schedule 23.12.2014
comment
Как насчет случая, например, при увеличении ширины окна браузера на 1% верхнее значение элемента div увеличивается на 2 пикселя; однако, если окно браузера уменьшается на 1%, верхнее значение div уменьшается на 2 пикселя. Возможно, решение, в котором его можно применить к высоте изображения, размеру шрифта и т. д.? - person kenhimself; 23.12.2014
comment
Все дело в контейнере. Например, если у вас есть контейнер правой боковой панели с полной высотой, содержащий topDiv, при каждом изменении высоты окна высота контейнера также будет меняться. Таким образом, topDiv, который имеет высоту процентного значения, изменится соответственно. - person Leonidas; 23.12.2014
comment
Теперь для размера шрифта вы всегда можете использовать em вместо px, поэтому у вас может быть более отзывчивое ощущение размера шрифта. - person Leonidas; 23.12.2014
comment
О, я вижу, так что вы говорите мне, что каждое значение (например, ширина по сравнению с размером шрифта) очень важно, когда дело доходит до ответа на ширину и высоту окна браузера? Я думал, что есть какой-то магический атрибут/команда, которая может универсально складывать/вычитать значения, но, думаю, об этом можно только мечтать :) - person kenhimself; 23.12.2014
comment
Вы по-прежнему можете использовать em вместо px для измерения высоты, ширины и почти всего, что является способом измерения размеров ваших элементов в зависимости от размера их контейнеров. Это очень плохо сказывается на вашей отзывчивости позже. Пожалуйста, поставьте большой палец вверх, если вы думаете, что заработали что-то благодаря ответу. - person Leonidas; 23.12.2014
comment
Да! Хотя я нахожу ваши рекомендации очень полезными, не могли бы вы продемонстрировать метод div и font-size на jsfiddle? У меня небольшие проблемы с пониманием того, что вы предлагаете... Для вашего удобства я настроил jsfiddle: jsfiddle.net/kenhimself/55L9cq81/2 - person kenhimself; 23.12.2014

Вы можете использовать единицы просмотра для этого

FIDDLE (изменить размер окна)

div {
  border: 2px solid tomato;
  margin-top: 5vw;
}
<div>Test</div>

person Danield    schedule 23.12.2014
comment
Интересно... Но что, если на каждый 1 пиксель увеличения ширины окна браузера увеличить margin-top на 5 пикселей? - person kenhimself; 23.12.2014
comment
увеличить значение margin-top? - person Danield; 23.12.2014
comment
ага. так, например, если ширина браузера составляет 1000 пикселей, верхнее поле div составляет 500 пикселей. но если ширина браузера составляет 500 пикселей, верхнее поле div становится равным 1000 пикселей. По мере того, как окно браузера становилось все меньше и меньше (ширина: 1000 пикселей -> ширина: 500 пикселей), элемент div постепенно перемещался все ниже и ниже (верхнее поле: 500 пикселей -> верхнее поле: 1000 пикселей). - person kenhimself; 23.12.2014

Если вы хотите масштабировать размер изображения в соответствии с шириной родительского элемента, используйте этот прием: http://www.mademyday.de/css-height-equals-width-with-pure-css.html

Таким образом, изображение будет масштабироваться пропорционально ширине родительского элемента.

Что касается положения изображения, трудно понять, чего вы пытаетесь достичь с помощью

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

Вы не можете изменить значение top в зависимости от ширины родительского элемента, однако вы можете использовать тот же трюк padding для позиционирования изображения. Быстрый пример ниже. Значение padding-bottom зависит от ширины родительского элемента.

        #outer
        {
            position: absolute;
            bottom: 0;
            right: 0;
            padding-bottom: 50%;
            border: 1px dashed red;
        }

        #inner
        {
            width: 30px;
            height: 30px;
            border: 1px dashed blue;
        }

    </style>


    <div id="outer">
      <div id="inner"></div>
    </div>
person Karolis    schedule 23.12.2014

person    schedule
comment
Не могли бы вы взглянуть? Я не уверен, как мне включить ваш код и применить его к изображению... jsfiddle.net /kenhimself/Lb5qc8a8 - person kenhimself; 23.12.2014
comment
в вашей скрипке вы должны использовать getElementsByTagName. - person Suchit kumar; 23.12.2014