Leaderboard
Popular Content
Showing content with the highest reputation on 01/30/2016 in all areas
-
https://habrahabr.ru/post/215461/ читай, вникай, разбирайся. Никто вместо тебя думать не будет. Дело не в "добрых" людях, а в том что ты хочешь что бы тебе все сделали бесплатно. На данном ресурсе тебе с радостью помогут в решении проблем, связанных с реализацией. Но саму реализацию вместо тебя делать никто не будет. Зачем тратить время на создание Интернет-магазина для тебя, если это время можно потратить на себя?!1 point
-
1 point
-
1. @li4e, см. коммент http://htmlforum.ru/index.php?showtopic=55226#entry369653 2. забудь про DOM. Напиши калькулятор который работает БЕЗ DOM 3. если ты сумеешь правильно написать таковой, то визуализировать его работу труда не составит я тебе предлагаю упростить твой калькулятор до такого let obj = new Calculator();obj.add('7');obj.add('+');obj.add('2');obj.add('fffff'); // должно бросаться исключениеlet result = obj.calculate(); // результат или ошибкаobj.clear();class Calculator { constructor() { // your code here } add(some) { // your code here } clear() { // your code here } calculate() { // your code here }}1 point
-
Я думаю что не совсем. Хотя твоя функция технически и работает как конструктор, на практике return насколько я знаю никогда не используется. Свойства возвращаемого объекта задаются через this. Сами свойства не обязательно должны быть объектам, а вот в качестве аргумента конструктора как правило используют объекты. То есть в твоей реализации выйдет вот что. function Calculator(obj){ this.el = obj.el; // Элемент с калькулятором this.field = obj.el.querySelector('.field'); // Элемент с экраном калькулятора this.do = ['']; // Массив с действиями калькулятор в формате [1,'+',2] this.math = { // Обьект с операторами '+': function(x,y) {return x + y}, '-': function(x,y) {return x - y}, '×': function(x,y) {return x * y}, '÷': function(x,y) {return x / y} }; this.clear = function() { // Метод для очистки экрана калькулятора this.do = ['']; this.updateField(); }; this.updateField = function () { // Метод для обновления значений на экране калькуляторе var text = ''; for(var i = 0; i < this.do.length;i++){ text += ' ' + (this.do[i] === '' ? (this.do.length-1 !== i ? '0' : '') : this.do[i]); } this.field.innerHTML = text; }; this.pressButton = function (text) { // Метод обрабатывающий нажатие кнопок калькулятора var num = text !== '.' ? parseFloat(text) : '.'; if(text === 'Clear') { // Если нажата кнопка Clear this.clear(); } else if (!isNaN(num) || text === '.') { // Если нажата кнопка с числом или точка var last = this.do[this.do.length-1]; last += last.length === 0 && num === '.' ? '0.' : String(num); var txt = last.split('.'); txt = txt.length > 1 ? String(parseInt(txt[0]))+'.'+txt[1]: parseInt(txt[0]); this.do[this.do.length-1] = txt; this.updateField(); } else { // Если нажата кнопка с оператором if(text === '=' && this.do.length >= 3 && this.do[this.do.length-1] !== '') { var result = parseFloat(this.do[0]); result = isNaN(result) ? 0 : result; this.do.splice(0,1); while(this.do.length > 0) { result = this.math[this.do[0]](result, parseFloat(this.do[1] === '' ? 0 : this.do[1])); this.do.splice(0,2); } this.do = [result]; this.field.innerHTML = result; } else if(text !== '=') { this.do.push(text, ''); this.updateField(); } } }; // Метод инициализации в котором вешается обработчик на клик на калькулятор var $this = this; this.el.onclick = function (event) { var target = event.target; if(target.tagName === 'BUTTON') { $this.pressButton(target.innerHTML); } }}Создание объекта калькулятор. var calc = new Calculator({el: document.querySelector('.calculator')}); Запуск calc.init(); Но один фиг это не то что надо. Так как объекту калькулятор все эти методы, которые ты в него напихал не нужны. Никто не будет запускать calc.updateField() , по этому это свойство должно быть в прототипе. ЗЫ Если где не прав, исправляйте. Сам учусь. ЗЫЫ Калькулятор кстати не правильно работает, попробуй 2+2*2 По ооп и прототипам намного лучше Кантора будет Николас Закас .1 point
-
Если придерживаться методологии БЭМ, то классами нужно все определять. И стили задавать только классам. У такого подхода масса достоинств: при стилизации элемента обращение происходит только к одному селектору;быстрее рендерится страница;четкая структура файлов для css/js;реиспользование кода в любых частях страницы;понимание, к какому файлу стилей относится данный элемент;разделение классов для стилизации и js;не используется каскад стилей.Это достоинства, приводимые в описаниях данной методологии. От себя я бы добавил еще и то, что при правильном определении имен классов нет необходимости в комментариях, т.к. и так все видно. Для примера возьмем Ваше главное меню: <div id="wrap_menu" class="clearfix"> <ul id="nav"> <li><a href="/"><span class="first">Home</span></a></li> <li><a href="#"><span>Services</span></a></li> <li><a href="#"><span>Support</span></a></li> <li><a href="#"><span>Carrers</span></a></li> <li><a href="#"><span>About</span></a></li> <li><a href="#"><span class="last">Contact</span></a></li> </ul> </div> Смотрим его стилизацию (я сами стили заменил многоточиями, т.к. для понимания сути этого достаточно): #nav { ... } #nav li { ... } #nav li a span { ... } #nav a { ... } #nav .last { ... } и аналогичное меню с заданными классами: <nav class="main-header--nav main-header--mobile"> <ul class="main-menu clearfix"> <li class="main-menu--item"><a class="main-menu--link link" href='#>about</a></li> <li class="main-menu--item"><a class="main-menu--link link" href="#">projects</a></li> <li class="main-menu--item"><a class="main-menu--link link" href="#">gallery</a></li> <li class="main-menu--item"><a class="main-menu--link link" href="#">houses</a></li> <li class="main-menu--item"><a class="main-menu--link link" href="#">general plan</a></li> <li class="main-menu--item"><a class="main-menu--link link" href="#">location</a></li> </ul> </nav> и вариант его стилизации: .main-menu { ... &--item { ... &:last-child { ... } } &--link { ... &:hover { ... } &:active { ... } } } Вопрос: для чего нужен такой уровень вложенности: #nav li a span? Единственное, что приходит в голову - это то, что автору хочется как-то для себя структуризировать CSS файл, чтобы было визуально видно, какому элементу задается стиль. Но ведь этого можно добиться по другому. В моем примере стили описаны четко и понятно и нет никакой вложенности (правда такой вид наблюдается при работе с препроцессором Less, но он очень прост в освоении). Теперь остальные замечания: 1. Зачем использовать <div class="header"> <div id="footer">? Есть же теги <header><footer><nav> и т.д. 2. Зачем использовать такие классы: class="first", class="last" если есть псевдоклассы :first-child, :last-child. 3. Зачем использовать для стилизации идентификаторы? Оставьте их для использования в скриптах.1 point
-
1 point
-
Символ рубля не везде отображается, например, на iPhone будет квадратик. Можно использовать третий вариант здесь: http://habrahabr.ru/post/207572/1 point
This leaderboard is set to Kiev/GMT+02:00
-
Upcoming Events
No upcoming events found -
Сообщения форума
-
Доброго всем времени суток. Прошу помощи. Научите принципу изменения футера. Движок Xenforo. Версия 2.2.10. Стиль дефолтный. Что именно нужно в итоге на фото примере. Мой шаблон app.footer less имеет следующее значение. .p-footer { .xf-publicFooter(); a { .xf-publicFooterLink(); } } .p-footer-inner { .m-pageWidth(); .m-pageInset(); padding-top: @xf-paddingMedium; padding-bottom: @xf-paddingLarge; } .p-footer-row { .m-clearFix(); margin-bottom: -@xf-paddingLarge; } .p-footer-row-main { float: left; margin-bottom: @xf-paddingLarge; } .p-footer-row-opposite { float: right; margin-bottom: @xf-paddingLarge; } .p-footer-linkList { .m-listPlain(); .m-clearFix(); > li { float: left; margin-right: .5em; &:last-child { margin-right: 0; } a { padding: 2px 4px; border-radius: @xf-borderRadiusSmall; &:hover { text-decoration: none; background-color: fade(@xf-publicFooterLink--color, 10%); } } } } .p-footer-rssLink { > span { position: relative; top: -1px; display: inline-block; width: 1.44em; height: 1.44em; line-height: 1.44em; text-align: center; font-size: .8em; background-color: #4682B4; border-radius: 2px; } .fa-rss { color: white; } } .p-footer-copyright { margin-top: @xf-elementSpacer; text-align: center; font-size: @xf-fontSizeSmallest; } .p-footer-debug { margin-top: @xf-paddingLarge; text-align: right; font-size: @xf-fontSizeSmallest; .pairs > dt { color: inherit; } } @media (max-width: @xf-responsiveMedium) { .p-footer-row-main, .p-footer-row-opposite { float: none; } .p-footer-copyright { text-align: left; padding: 0 4px; // aligns with other links } }
-
Нужны сайты с примерами верстки, типа https://css-tricks.com/. Типовые приемы и нестандартные на все случаи жизни. Накидайте ссылок.
-
By Katerina23 · Posted
Да, подходит. Спасибо. -
<input type="number">
-
By Katerina23 · Posted
Здравствуйте, подскажите какой тег использовать для увеличения значения, пример на картинке. Вроде, про такой тег я слышала. Если есть тег прогресс бар, значит и такое должно быть.
-