Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   JavaScript и CSS (https://javascript.ru/forum/dom-window/1261-javascript-i-css.html)

demoniqus 28.05.2008 12:54

JavaScript и CSS
 
Подскажите, как можно при помощи JavaScript обратиться к классам CSS и переопределить их параметры? Суть такая: страница при загрузке определяет разрешение монитора и подстраивает размеры элементов под конкретное разрешение.

Андрей Параничев 28.05.2008 13:06

demoniqus,
В интернете по этой теме довольно много информации. Вот, например, с шаманского форума:
http://xpoint.ru/know-how/JavaScript/TablitsyiStiley?2

А еще можно подгружать разные, уже "готовые" CSS файлы, в зависимости от определённого разрешения экрана, просто добавляя соответствующий link элемент в DOM.

demoniqus 29.05.2008 10:48

мысль про подключение интересная, но получилось так, что на php все реализовано таким образом, что страница подстраивается под любое разрешение - хоть 1280*1024, хоть 1281*1023. Единственная проблема в том, что в php-файл надо передавать разрешение. А при первом запуске сайта (например при переходе с другого сайта) этого не произойдет. Из-за этого сайт может отобразиться не слишком коректно. Поэтому хотелось переделать его на javascript. А создать CSS на каждое разрешение - нереально. Надо исправлять параметры динамически.

Kolyaj 29.05.2008 11:26

demoniqus, а если пользователь в процессе просмотра сайта решит изменить размеры окна?

Вот к примеру из поиска приходят почти всегда с открытием нового окна, при этом IE, как правило, не распахивает его, т.е. у вас загрузится версия для маленького окна, пользователь распахнет его и что он увидит?

hogart 29.05.2008 15:11

demoniqus, камрад Kolyaj прав.
Такие вещи решаются с помощью CSS и только CSS.

demoniqus 03.06.2008 15:47

Привязка идет не к размерам окна, а к разрешению монитора. Просто тестируя сайт, я обратил внимание, что то, что нормально выглядет при разрешении 1024, нереально разглядеть на разрешении 1280 и наоборот: то, что нормально для 1280, на разрешении 1024 может не по-детски напугать размерами. Впринципе наиболее частые разрешения 1024 и 1280. 800 уже совершенно неактуально, а прочие разрешения встречаются довольно редко. Поэтому можно было бы использовать две таблицы стилей, но все-таки хочется сохранить возможность сайта подстраиваться под конкретные параметры монитора. Прописывать во все необходимые элементы id-ишники, а потом для каждого из них писать javascript-код черезчур накладно. Через имя тега (a, div, font и т.п.) обратиться не получится. А PHP довольно существенно притормаживает. И второй недостаток PHP - в первый раз разрешение как параметр не передается - поэтому пришлось задать 1024. Поэтому ищу возможность через javascript обратиться именно к классу CSS и переопределить его параметры.

Kolyaj 03.06.2008 15:52

demoniqus, а может лучше все-таки сверстать нормально?
Ну вот, например, как вариант http://habrahabr.ru/blog/css/37042.html

demoniqus 04.06.2008 10:52

Кое-что интересное для себя в статье нашел - спасибо!)))
Про em-ную верстку знаю. Собственно у меня весь текст, ссылки и прочее в em-ах и стоит. Однако далеко не все знают, что можно покрутить колесико мышки+Ctrl или зайти в Вид-Размер шрифта, если сайт не слишком корректно отображается - и все достоинства такого метода идут на смарку. Если на странице написано, что текст имеет размер 5em, то при любом разрешении монитора он и будет 5em. Только при 1600*1280 он будет уместен, а при 1024*768 буквы будут больше монитора...
Приведу часть кода:

< ?php if (!isset($factor)) {$factor=1024;} $factor=round($factor/1600*80); ?>
//в переменную $factor изначально передается разрешение монитора.
//Если происходит вызов страницы без параметров, то присваивается
//значение 1024. Далее переменная $factor превращается в коэффициент
//для вычисления размеров объектов на странице. Значения 1600 и 80
//дали приятный результат и просто не стал их трогать более.
.........
< STYLE type="text/css">
a.Amenu{...;font-size: < ?php $factor1= $factor*2/100; echo $factor1; ?>em;....}
a.contacts{.......}
.............
<body.....
....
<div style="font-size: < ?php $factor1= $factor*3/100; echo $factor1; ?>em;....">
.....

Конструкция font-size: < ?php $factor1= $factor*2/100; echo $factor1; ?> встречается во многих местах и вероятно значительно притормаживает выполнение страницы. Кроме того, как я и сказал, страница может быть запущена без параметров. Поэтому я пытаюсь ее заменить на JavaScript, который будет быстрее работать, не нагружать лишний раз сервер и никаких проблем с передачей параметров. Может у кого-нибудь есть идеи по этому поводу?

hogart 04.06.2008 12:40

demoniqus, слушайте, вы никогда не слышали термин "резиновая верстка"? И никогда не были на сайтах, которые выглядят нормально, даже если поменять размер окна браузера?

Вам нужно всего лишь нормально сверстать на CSS, а не приделывать пятое колесо на PHP или JS.
вот тут можно основную раскладку определить, в одну, две или три колонки.

Юлия Андреевна 22.04.2009 20:17

Мечталось бы сотворить такое дело: на страничке выбирается стиль таблички и табличка рисуется в выбранном стиле. Можно изменить с помощью явы свойство напрмер цвета в правилах цсс. Но как вытащить титл, название, имя cssRule? :(

x-yuri 23.04.2009 19:58

зачем менять css через javascript? Лучше менять класс таблицы (class), и, основываясь на этих классах создать один css для всех стилей таблицы
p.s. ява - не javascript

J.Az 09.10.2009 12:53

Подскажите пожалуйста. Вроде все так просто, но не получаеца...)
есть три блока <div>. один слева со свойством float:left, два правее него, один под другим. Суммарный height обоих блоков, что справа равен height'у левого блока(ну т.е. теоретически и идеалистически :) ). Все стили этих блоков прописаны в прикрепленном файле '.css'.
я хочу в яваскрипте узнавать текущий height левого блока и изменять в соответсвии с ним height нижнего правого блока(верхний правый статический). Делаю так:
var left = document.getElementById("left").style.height;
var rightUp = document.getElementById("rightUp").style.height;
document.getElementById("rightDown").style.height = (left-rightUp)+'px';
Понятно, что height'ы left и rightUp - это строки и мне придется превращать его в number, просто проблема в том, что у меня элементарно не получается заставить работать код:
var left = document.getElementById("left").style.height;
alert(left);
Т.е. выскакивает просто пустое окошко оповещения... :(
Но если писать:
document.getElementById("left").style.height = '10px';
var left = document.getElementById("left").style.height;
alert(left);
То все работает и на экран выводится окошко с текстом '10px'.

x-yuri 09.10.2009 14:56

а зачем ты хочешь высоту вырвнять, у тебя в левом блоке содержимое меняется?

J.Az 09.10.2009 15:08

Да. В левом блоке основной контент страницы. Правый какбы красивая рамка, состоящая из верхнего элемента и основного нижнего.

J.Az 13.10.2009 16:07

Всем спасибо за ответы)))
Я разобраси таки. Как я и ожидал, все было очень просто и совсем на поверхности.
чтоп изменить height использовать: document.getElementByID('').style.height,
а чтобы выводить значения height использовать: document.getElementByID('').clientHeight или document.getElementByID('').offsetHeight
подробнее здесь: http://programming.top54u.com/Sample...h/Default.aspx

x-yuri 14.10.2009 23:16

http://javascript.ru/blog/Andrej-Par...cheniya-stilya

p.s. возможно можно обойтись без javascript

starostin13 13.03.2010 18:15

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

Katja 14.03.2010 00:40

Ребята помогите лузеру... надо сделать по jave констректор лего,разных цветов,ну как стенка чтоб получилась, я не представляю даже какую программу открывать:cray:

Katja 14.03.2010 00:40

ой КОНСТРУКТОР лего

Octane 14.03.2010 02:16

Цитата:

Сообщение от Katja
я не представляю даже какую программу открывать

В таком случае вам в раздел работа.

starostin13 14.03.2010 09:43

а про меня то чё забыли?
У меня слегка отличная проблема но не сильно. Мне нужно менять картинки которые заданы в цсс, то есть мне нужен конкретный пример команд гет и сет которыми это можно сделать именно с картинками

PepeL 14.03.2010 10:47

starostin13,
document.getElementById('id элемента').style.background = "url('img.gif')";

это чтоли ?

starostin13 14.03.2010 11:25

Не совсем, у меня н бекграунд, а срц. Попробывал вот так document.getElementById("classID").src="url(Image/gun.jpg)";
но всё рравно не помогает
Да и вабще чё то эта конструкция ничего не возвращает, ни какого свойства

Octane 14.03.2010 11:29

в src просто адрес, без url(…)

starostin13 14.03.2010 11:48

Спасибо за подсказку, но document.getElementById("classID").src всё равно ничего не возвращает.

Octane 14.03.2010 11:50

Покажите, как вы используете этот код на странице.

starostin13 14.03.2010 12:05

ой блин я дурак, хорошо что хоть щас обратили на это моё внимание, в действительности я использую не src как говорил а background, прошу меня простить, но тем не менее, проблема остаёться
html:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
    <title>Untitled Page</title>
    <link rel="stylesheet" type="text/css" href="chesses.css" />
    <script src="script.js" />
</head>
<body>
  
    <img alt=""  style="width: 56px; height: 56px; visibility:visible; position:absolute;z-index:2;" id="cage11" onclick="Count(id)" />
</body>
</html>


css:
#cage11
{
	position:absolute;
	top:57px;
	left:57px;
	background:url(Image/gun.jpg);
}

JS:
function Count(ID)
{
    var classID = '#'+ID;
    var elem = document.getElementById('classID').style.background;// = "url('Image/gun.jpg')"
    alert(elem);
}

Octane 14.03.2010 12:40

var elem = document.getElementById(*!*classID*/!*).src = "gun.jpg";


а вообще лучше так:
<img … onclick="func(this)" />

function func(element) {
    element.src = "…";
}

starostin13 14.03.2010 14:08

function Count(elem)
{ var element = '#' + elem;
alert(element);
}
выдаёт элемент, а вот
function Count(elem)
{ var element = '#' + elem;
alert(element.src);
}
уже не выдаёт свойвств, тока undefined

Octane 14.03.2010 16:35

Ах да, еще решетка в имени идентификатора не нужна.
Цитата:

Сообщение от starostin13
var element = '#' + elem;

Зачем вы пытаетесь сложить DOM-элемент со строкой?

starostin13 14.03.2010 16:47

дык потому что у меня в цсснике так классы названы
И вабще разницы никакой, что с решёткой, что без, при
function Count(elem)
{
alert(elem.top);
}
всё равно undefined, а
function Count(elem)
{
alert(elem.style.top);
}
вабще не работает

starostin13 15.03.2010 15:50

подскажите почему в
var current = document.getElementById(elem).style.background;
current равен 0, не null, не "", а именно 0 и почему так, поидее должно быть чё то типа "url(Image/gun.jpg)"

neurostep 15.03.2010 17:47

var current = document.getElementById(elem).style.backgroundImage;

starostin13 15.03.2010 20:56

к сожалению не помагает, пробывал

starostin13 16.03.2010 12:40

Нашёл где всё понятно
https://developer.mozilla.org/en/DOM...tComputedStyle

neurostep 16.03.2010 12:42

Цитата:

Сообщение от starostin13 (Сообщение 47837)
Нашёл где всё понятно
https://developer.mozilla.org/en/DOM...tComputedStyle

ну так оно и понятно, я то думал, что утебя в атрибуте style бэкгранд прописан;)
не забудь, что для некоторых браузеров нужен currentStyle

starostin13 16.03.2010 12:50

Автоматически возник новый вопрос, как получить не полный адрес или как его обрезать?

starostin13 16.03.2010 12:51

neurostep, знаю что надо, просто передо мной пока не стоит задача кроссплотформенности, и слава богу, а то я и так затянул :)

neurostep 16.03.2010 12:54

Пока на ум приходят только регулярные выражения

Kolyaj 16.03.2010 13:02

Цитата:

Сообщение от starostin13
Автоматически возник новый вопрос, как получить не полный адрес или как его обрезать?

Что в вашем понимании неполный адрес, и что вы хотите обрезать?


Часовой пояс GMT +3, время: 07:47.