Избавляемся от div
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Я постоянно улучшаю и сокращаю код своей студии. Оптимизирую всё, что могу. На этот раз я придумал интересный способ уменьшить код ещё больше. Вот мой способ: Убираем теги div
Как вы знаете, тег div может быть сделан из любого элемента благодаря css свойству
Этим мы и воспользуемся. Давайте прикиним выгоду:Code
<div></div> Так мы создаем див блок - 11 байт кода <z></z> А вот так всё могло бы быть - 7 байт!
Если ваш сайт сверстан дивами, а страницы велики и содержат 100, 200 блоков, то выигрыш будет ощутим. К тому же мы усложним работу ворам кода. Как это сделать? Просто!
Все современные браузеры позволяют нам называть теги как угодно, при этом теги будут распознаваться. IE снова отличился но для него тег можно добавить в объектную модель с помощью вот такого яваскрипт кода:
Code
<script type='text/javascript'>document.createElement('z')</script>
и конечно не забудьте назначить нашему новому блоку стиль display: Code
<style type='text/css'>z{display:block;}</style>
Всё! теперь все блоки на вашем сайте могут быть совершенно спокойно заменены на новоиспеченный элемент. Код кроссбраузерного примера:
Code
<html> <head> <style type='text/css'>z{display:block;}</style> <script type='text/javascript'>document.createElement('z')</script> </head> <body> <z>text</z> </body> </html>
Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Забыл написать, что данное решение не валидно с точки зрения www консорциума, но благодаря xml cdata это можно обойти. Бесплатные обои.
ad
Группа: Удаленные
Здорово! Спасибо Алеко. Пригодится, так как я постоянно тоже ищю способы уменьшить вес кода сайта. У меня на сайте будет пункт в магазине: Заказать валидный-сжатый код.
vladko95
Группа: Проверенные
Пользователь №: 51
Сообщений: 121
Получено оценок: 6
Я так понял, что это тот же самый div, только с другим названием? Тоесть z?
ad
Группа: Удаленные
Если взять всю сумму дивов в коде и заменить их на z то вес будет около 66% из 100% что были с дивами. Это большой плюс. Интересно, а с table или с прочими кодами действует ?
Сообщение отредактировал ad - Пятница, 16.10.2009, 02:13
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
ad , для таблиц существует display:table , для tr и td - аналогичные коды (table-cell и table-row). Просто использование таблиц уже само по себе ужасное поведение в коде.Бесплатные обои.
Андрей
шептун
Группа: Проверенные
Пользователь №: 189
Сообщений: 65
Получено оценок: 11
Может баян, но... в общем вот HTML5 - Доктайп и новые теги Сообщение отредактировал Андрей - Пятница, 23.10.2009, 05:06
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Андрей , информация в тему. Я её уже достаточно давно читал, но новичкам пригодится.Бесплатные обои.
ColdFire
говорун
Группа: Проверенные
Пользователь №: 85
Сообщений: 123
Получено оценок: 7
Quote (Андрей )
Может баян, но... в общем вот HTML5 - Доктайп и новые теги
Ха, большое спасибо за инфу! Давно пора осваивать новые возможности
Андрей
шептун
Группа: Проверенные
Пользователь №: 189
Сообщений: 65
Получено оценок: 11
Пример одного такого сайта на HTML 5 PS вгляните в исходник PPS Интересное оформление страницы, просто и со вкусом.
Slimmi
говорун
Группа: Модераторы
Пользователь №: 5
Сообщений: 287
Получено оценок: 38
Подскажите пожалуйста, в JS ссылку модно сделать на только что созданный элемент. Например, на тег Большие фотостатусы
ad
Группа: Удаленные
style к нему не применяются.
Slimmi
говорун
Группа: Модераторы
Пользователь №: 5
Сообщений: 287
Получено оценок: 38
Quote (ad )
style к нему не применяются.
Всмысле не применяется Code
<z>text</z> <style type='text/css'>z{display:block; color:#3f4;}//Всё работает </style>
А можно так сделать: Code
<script type='text/javascript'>document.z.Свойство|Метод()</script> <z>text</z>
Можно так? И ссылку к данному елементу JS может получить?Большие фотостатусы Сообщение отредактировал Slimmi - Вторник, 17.11.2009, 14:07
ad
Группа: Удаленные
Slimmi , Да не, я про то что я немогу сделать так например: <z style="color:#000;"></z>
А в то время как див это позволит:
<div style="color:#000;"></div>
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Quote (ad )
<z style="color:#000;"></z>
А в то время как див это позволит:
<div style="color:#000;"></div>
Елопукки, Елопукки, переставь мне с ж***ы руки...
Code
<script> document.createElement('z'); </script> <z style='color:red;'>Текст</z>
Работает ВЕЗДЕ.
Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Slimmi , можно всё, это полноценный элемент.Бесплатные обои.
MrOizo
говорун
Группа: Проверенные
Пользователь №: 42
Сообщений: 188
Получено оценок: 6
Aleko , пока ты здесь, мне лень читать первый пост скажу честно. Вопрос. div можно заменить только на букву, или на любой набор букв? Например: <google></google>
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
MrOizo , что угодно. Буква просто самое короткое. Символы нельзя.Бесплатные обои.
Slimmi
говорун
Группа: Модераторы
Пользователь №: 5
Сообщений: 287
Получено оценок: 38
Aleko , спс Большие фотостатусы
Slimmi
говорун
Группа: Модераторы
Пользователь №: 5
Сообщений: 287
Получено оценок: 38
Вот такая проблема Code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Test</title> <script type='text/javascript'>document.createElement('basis');</script> </head> <body> <basis style="position:absolute; background:black; width:113px; height:93px; left:426px;" onmouseover='colors.animate("smooth",this,{"backgroundColor":"#FF9900"},100)' onmouseout='colors.animate("smooth",this,{"backgroundColor":"#000"},700)'></basis> </body> <script type="text/javascript"> colors={current:function(el,st){var result;if(el.style[st]&&el.style[st]!=""){result=el.style[st]}else{if(/*@cc_on!@*/false){result=el.currentStyle[st]}else{result=document.defaultView.getComputedStyle(el,null)[st]}}return result=="transparent"?"#FFFFFF":result},torgb:function(e){var h,f,c,a;function d(i,g){var j={A:10,B:11,C:12,D:13,E:14,F:15};return parseInt(i in j?j[i]:i)*16+parseInt(g in j?j[g]:g)}a=e.toUpperCase();if(/RGB\(\d+,\s?\d+,\s?\d+\)/.test(a)){h=a.match(/\d+/g)[0];f=a.match(/\d+/g)[1];c=a.match(/\d+/g)[2]}else{if(/#([0-9A-F]{2}){3}/.test(a)){h=d(a.charAt(1),a.charAt(2));f=d(a.charAt(3),a.charAt(4));c=d(a.charAt(5),a.charAt(6))}else{if(/#([0-9A-F]{1}){3}/.test(a)){h=d(a.charAt(1),a.charAt(1));f=d(a.charAt(2),a.charAt(2));c=d(a.charAt(3),a.charAt(3))}}}return{r:h,g:f,b:c}},animtype:function(e,b){switch(b){case"simple":return e;break;case"compress":var a=2;return Math.pow(e,2)*((a+1)*e-a);break;case"smooth":function f(c){return Math.pow(c,3)}if(e<0.5){return f(2*e)/2}else{return(2-f(2*(1-e)))/2}break;case"jump":function g(h){for(var d=0,c=1;1;d+=c,c/=2){if(h>=(7-4*d)/11){return -Math.pow((11-6*d-11*h)/4,2)+Math.pow(c,2)}}}return 1-g(1-e);break;default:return e;break}},animator:{},anielems:0,animate:function(a,e,b,d,f){for(key in b){c(key,b[key])}function c(h,j){var i,g;j=colors.torgb(j);i=colors.torgb(colors.current(e,h));for(key in colors.animator){if(colors.animator[key].o==e&&colors.animator[key].p==h){clearInterval(colors.animator[key].timer)}}g=colors.anielems;colors.animator[g]={o:e,p:h,start:new Date().getTime(),timer:setInterval(function(){var n,m,l,p,o,k;n=(new Date().getTime())-colors.animator[g].start;m=n/d;l=colors.animtype(m,a);p=parseInt((parseInt(j.r)-parseInt(i.r))*l+parseInt(i.r));o=parseInt((parseInt(j.g)-parseInt(i.g))*l+parseInt(i.g));k=parseInt((parseInt(j.b)-parseInt(i.b))*l+parseInt(i.b));e.style[h]="rgb("+p+","+o+","+k+")";if(m>=1){clearInterval(colors.animator[g].timer);e.style[h]="rgb("+j.r+","+j.g+","+j.b+")";if(f){f()}delete colors.animator[g]}},10)};colors.anielems++}}}; </script> </html>
Ни хрена не работает А если с div`ами то всё ништяк Code
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Test</title> </head> <body> <div style="position:absolute; background:black; width:113px; height:93px; left:426px;" onmouseover='colors.animate("smooth",this,{"backgroundColor":"#FF9900"},100)' onmouseout='colors.animate("smooth",this,{"backgroundColor":"#000"},700)'></div> </body> <script type="text/javascript"> colors={current:function(el,st){var result;if(el.style[st]&&el.style[st]!=""){result=el.style[st]}else{if(/*@cc_on!@*/false){result=el.currentStyle[st]}else{result=document.defaultView.getComputedStyle(el,null)[st]}}return result=="transparent"?"#FFFFFF":result},torgb:function(e){var h,f,c,a;function d(i,g){var j={A:10,B:11,C:12,D:13,E:14,F:15};return parseInt(i in j?j[i]:i)*16+parseInt(g in j?j[g]:g)}a=e.toUpperCase();if(/RGB\(\d+,\s?\d+,\s?\d+\)/.test(a)){h=a.match(/\d+/g)[0];f=a.match(/\d+/g)[1];c=a.match(/\d+/g)[2]}else{if(/#([0-9A-F]{2}){3}/.test(a)){h=d(a.charAt(1),a.charAt(2));f=d(a.charAt(3),a.charAt(4));c=d(a.charAt(5),a.charAt(6))}else{if(/#([0-9A-F]{1}){3}/.test(a)){h=d(a.charAt(1),a.charAt(1));f=d(a.charAt(2),a.charAt(2));c=d(a.charAt(3),a.charAt(3))}}}return{r:h,g:f,b:c}},animtype:function(e,b){switch(b){case"simple":return e;break;case"compress":var a=2;return Math.pow(e,2)*((a+1)*e-a);break;case"smooth":function f(c){return Math.pow(c,3)}if(e<0.5){return f(2*e)/2}else{return(2-f(2*(1-e)))/2}break;case"jump":function g(h){for(var d=0,c=1;1;d+=c,c/=2){if(h>=(7-4*d)/11){return -Math.pow((11-6*d-11*h)/4,2)+Math.pow(c,2)}}}return 1-g(1-e);break;default:return e;break}},animator:{},anielems:0,animate:function(a,e,b,d,f){for(key in b){c(key,b[key])}function c(h,j){var i,g;j=colors.torgb(j);i=colors.torgb(colors.current(e,h));for(key in colors.animator){if(colors.animator[key].o==e&&colors.animator[key].p==h){clearInterval(colors.animator[key].timer)}}g=colors.anielems;colors.animator[g]={o:e,p:h,start:new Date().getTime(),timer:setInterval(function(){var n,m,l,p,o,k;n=(new Date().getTime())-colors.animator[g].start;m=n/d;l=colors.animtype(m,a);p=parseInt((parseInt(j.r)-parseInt(i.r))*l+parseInt(i.r));o=parseInt((parseInt(j.g)-parseInt(i.g))*l+parseInt(i.g));k=parseInt((parseInt(j.b)-parseInt(i.b))*l+parseInt(i.b));e.style[h]="rgb("+p+","+o+","+k+")";if(m>=1){clearInterval(colors.animator[g].timer);e.style[h]="rgb("+j.r+","+j.g+","+j.b+")";if(f){f()}delete colors.animator[g]}},10)};colors.anielems++}}}; </script> </html>
Подскажите, что делать Большие фотостатусы Сообщение отредактировал Slimmi - Суббота, 21.11.2009, 14:24
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Slimmi , добавь в код: Code
<style> basis {display:block} </style>
aka Latro
Slimmi
говорун
Группа: Модераторы
Пользователь №: 5
Сообщений: 287
Получено оценок: 38
DSC , добавил и всё равно не работает Большие фотостатусы
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Руки из задницы значит. Разницы между элементами нет. Бесплатные обои.
Slimmi
говорун
Группа: Модераторы
Пользователь №: 5
Сообщений: 287
Получено оценок: 38
Quote (Aleko )
уки из задницы значит. Разницы между элементами нет.
Aleko , ты сам то попробовал?.. прежде чем говорить !!! А?!Большие фотостатусы
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Slimmi , у меня весь сайт на таких элементах. Ещё глупые вопросы?Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Slimmi , блин. Беру свои слова обратно. Оказывается на подобный элемент в Opera не получается навесить события. Дело в этом. Вот это уже не пашет:
Code
<x onclick='alert("")'></x>
Бесплатные обои.
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
Slimmi , работают любые события) только их надо задавать не через тег а назначать скриптом:
Code
<!-- так не работает --> <x onclick='alert("")'></x> <script> document.getElementsByTagName('x')[0].onclick=function(){alert("")}; // а так работает </script>
Бесплатные обои.
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
вот вариант, благодаря которому можно всё это сделать гораздо короче: Code
<script type="text/javascript"> (function() { if (!/*@cc_on!@*/0) return; a = "СКОЛЬКО УГОДНО ВАШИХ ТЕГОВ ЧЕРЕЗ ЗАПЯТУЮ".split(','), b = a.length; while (b--){ document.createElement(a[b]).style.display = 'block' } })() </script>
aka Latro
Slimmi
говорун
Группа: Модераторы
Пользователь №: 5
Сообщений: 287
Получено оценок: 38
DSC , СПС Большие фотостатусы
DSC
Группа: Проверенные
Пользователь №: 127
Сообщений: 516
Получено оценок: 41
Slimmi , ставь +! aka Latro
kyza
Группа: Проверенные
Пользователь №: 203
Сообщений: 37
У Aleko каждый байт на счету хД
WRC
Группа: Проверенные
Пользователь №: 223
Сообщений: 149
Получено оценок: 11
Aleko , спасибо... отличная штукаУстраняем баг при просмотре материала
Aleko
Watching you
Группа: Администраторы
Пользователь №: 2
Сообщений: 1621
Получено оценок: 167
WRC , не за что.Бесплатные обои.