Ответы пользователя по тегу HTML
  • Можно ли использовать изображение пользователя, не загружая его на сервер?

    @m-haritonov
    Доступ к файлам, выбранным в <input type="file" /> осуществляется через File API.

    Спецификация File API от W3C.
    Обзорная статья про File API.
    Поддержка File API браузерами.
    Ответ написан
    Комментировать
  • Как нарисовать дизайн страницы для товара с четырьмя вариациями?

    @m-haritonov
    высота 1
     — вес 1
     — вес 2
    высота 2
     — вес 1
     — вес 2

    высота 1    высота 2
     — вес 1     — вес 1
     — вес 2     — вес 2

    '           вес 1     вес 2
    высота 1      —         —
    высота 2      —         —

    высота   вес
       — 1   — 1
       — 1   — 2
    Ответ написан
    Комментировать
  • Перенос inline блоков парами

    @m-haritonov
    @iiil меня опередил:
    <!DOCTYPE html>
    <html>
        <head>
    		<style>
    			div {
    				display: inline-block;
    			}
    			
    			div>div {
    				display: inline-block;
    				width: 100px;
    				height: 100px;
    				background: #ccc;
    			}
    		</style>
        </head>
        <body>
    		<div>
    		   <div>1</div>
    		   <div>2</div>
    		</div>
    		<div>
    		   <div>3</div>
    		   <div>4</div>
    		</div>
    		<div>
    		   <div>5</div>
    		   <div>6</div>
    		</div>
    		<div>
    		   <div>7</div>
    		   <div>8</div>
    		</div>
    		<div>
    		   <div>9</div>
    		   <div>10</div>
    		</div>
    		<div>
    		   <div>11</div>
    		   <div>12</div>
    		</div>
        </body>
    </html>


    UPDATE: более изящный вариант:
    <!DOCTYPE html>
    <html>
        <head>
    		<style>
    			* { margin: 0; padding: 0; }
    			
    			ul { list-style: none; text-align: center; }
    			
    			ul>li {
    				float: left;
    				width: 100px;
    				height: 100px;
    				background: #000;
    			}
    			
    			ul>li:nth-child(odd) {
    				margin-right: 100px;
    				background: #999;
    			}
    			
    			ul>li:nth-child(even) {
    				margin-left: -100px;
    				background: #eee;
    			}
    		</style>
        </head>
        <body>
    		<ul>
    			<li>1</li>
    			<li>2</li>
    			<li>3</li>
    			<li>4</li>
    			<li>5</li>
    			<li>6</li>
    			<li>7</li>
    			<li>8</li>
    			<li>9</li>
    			<li>10</li>
    		</ul>
        </body>
    </html>

    Селектор ":nth-child" в IE доступен лишь начиная с версии 9.0, поэтому, если требуется поддержка более ранних версий IE, можно заменить его добавлением в CSS классов "odd" и "even" при генерации HTML кода.
    Ответ написан
    5 комментариев
  • Как вырасти из верстальщика в JS-программиста?

    @m-haritonov
    Думаю для этого Вам стоит изучить модель работы браузера и протокола HTTP, понять какое место в этой модели занимает JavaScript (а также HTML и CSS) и, собственно, изучить стандарт языка и окружение, в котором JavaScript работает в браузере (DOM и т.п.).

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

    В общем грубую модель работы HTTP и браузера можно описать нижеследующим образом.

    Один компьютер (сервер) посылает другому компьютеру (клиенту), в ответ на его запрос, набор данных (HTTP заголовки ответа и тело HTTP ответа: HTML, CSS, JavaScript код). Все эти данные могут быть сгенерированы динамически (например, с помощью PHP), но на работу браузера это не влияет (т.к. он получает лишь сгенерированный, статический набор данных).

    Далее клиент (браузер), получив набор данных от сервера, начинает последовательно просматривать эти данные (для того, чтобы вывести их пользователю на экран в графическом виде).

    Сначала он просматривает заголовки HTTP ответа, а затем приступает к просмотру и выводу тела HTTP ответа (в заголовках ответа содержится, в частности, указание на то, какие данные находятся в теле запроса и, соответственно, как их выводить).

    В случае, если тип данных будет "text/plain" (т.е. обычный текст), то браузер выведет его на экран как обычный текст (без всякого форматирования и анализа: не будет искать в нём HTML теги, не будет искать участки JavaScript кода и затем исполнять их и т.п.).

    В случае же, если тип данных будет "text/html" (т.е. HTML страница), то браузер не просто выведет на экран тело ответа и исходном виде, а будет искать в нём специальные символы, которые сами выводиться не будут, а будут изменять формат вывода связанного с ними текста.

    Например.

    Если браузер встречает в просматриваемом тексте HTML тег, то на экран будет выведен содержащийся в теге текст, выделенный в соответствии с договорённостью (между разработчиками браузера и разработчиками HTML страниц) о форме вывода данного тега.

    Если браузер встречает участок с CSS кодом (тег , например), то он переключается в режим разбора CSS кода и сохраняет результат разбора у себя в памяти, чтобы затем выделять текст во встречающихся тегах уже в соответствии с правилами, содержащимися в этом участке CSS кода.

    Если браузер встречает участок JavaScript кода, то он переключается в режим разбора JavaScript кода и действует уже в соответствии с новыми правилами (правилами разбора JavaScript, а не HTML кода). Например, если в JavaScript коде встречается инструкция, для вывода текста прямо сейчас ("document.write"), то на экран пользователя выведется результат выполнения этой инструкции. А, если встречается инструкция для объявления функции, то браузер прямо сейчас ничего на экран выводить не будет, а сохранит эту функцию для дальнейшего использования (например, эта функция может быть вызвана, когда произойдёт какое-либо событие).

    Т.е. браузер является бесконечно работающим процессом, который выводит что-то на экран пользователя (т.к. именно отобразить страницу пользователю является его целью) как при первой загрузке страницы так и при возникновении каких-либо событий уже после загрузки страницы (клик мыши, исполнение JavaScript кода, который содержался в функции, которая вызывалась при первой загрузке и продолжала бесконечно вызывать сама себя через определённый промежуток времени и т.п.).
    Ответ написан
    Комментировать
  • Проблема масштабирования адаптивной верстки на мобильных браузерах

    @m-haritonov
    Если я всё правильно понял, то у Вас имеется контент, минимальной шириной в 320px и максимальной — в 900px. И Вам надо:
    1. Если размер экрана устройства меньше 900px, то задать ширину viewport'а страницы как у экрана устройства (чтобы произошло перестроение CSS разметки под эту ширину).
    2. Если размер экрана устройства больше или равен 900px, то задать ширину viewport'а страницы в 900px (чтобы на экранах размером в 900px и больше контент увеличивался за счёт масштаба).

    Для этой задачи могу предложить следующее решение (скопируйте из данного примера на свой сайт JavaScript код, разместив его выше всех других подключений и вставок CSS и JavaScript кода). Проверял только на iPad 2.

    <!DOCTYPE html>
    <html>
    	<head>
    		<script type="text/javascript">
    			(function(){
    				// Выполняем код только на мобильных браузерах (на всякий случай)
    				if (typeof(window.orientation) !== 'undefined')
    				{
    					// Функция взята отсюда: https://makandracards.com/makandra/13743-detect-effective-horizontal-pixel-width-on-a-mobile-device-with-javascript
    					function getDeviceWidth()
    					{
    						var deviceWidth = window.orientation == 0 ? window.screen.width : window.screen.height;
    						// iOS returns available pixels, Android returns pixels / pixel ratio
    						// http://www.quirksmode.org/blog/archives/2012/07/more_about_devi.html
    						if (navigator.userAgent.indexOf('Android') >= 0 && window.devicePixelRatio)
    							deviceWidth = deviceWidth / window.devicePixelRatio;
    
    						return deviceWidth;
    					}
    
    					var deviceWidth = getDeviceWidth();
    					var maxWidth = 900;
    					
    					if (deviceWidth < maxWidth)
    					{
    						// Мои эксперименты на iPad 2 показали, что device-width всегда содержит значение ширины 
    						// экрана в книжной (portrait) ориентации (т.е. даже, если устройство находится в 
    						// альбомной (landscape) ориентации). Это же утверждалось в некоторых найденных мною статьях.
    						if (window.orientation == 0 || window.orientation == 180)
    							document.write('<meta name="viewport" content="width=device-width">');
    						else
    							document.write('<meta name="viewport" content="width=device-height">');
    					}
    					else
    						document.write('<meta name="viewport" content="width=' + maxWidth + '">');
    				}
    			})();
    		</script>
    		
    		<style type="text/css">
    			* { margin: 0; padding: 0; }
    			.content { min-width: 320px; max-width: 900px; background: #ffff99; }
    			.content div { border: 1px solid #f00; }
    		</style>
    	</head>
    	<body>
    		<div class="content">
    			<div>
    				abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc
    				abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc
    				abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc
    			</div>
    		</div>
    	</body>
    </html>
    
    Ответ написан
    3 комментария
  • Неверная кодировка колонтитулов в mPDF?

    @m-haritonov
    Скачал последнюю версию с www.mpdf1.com/mpdf/download, всё работает нормально. Вот код (запускал в кодировке windows-1251):
    <?php
    $html = '
    <p>Текст</p>
    
    <htmlpagefooter name="myFooter" style="display:none">
    	<div class="footer">
    		<table class="tbl3" width=624>
    			<tr>
    				<td>Менеджера</td>
    				<td>Вася Пупкин</td>
    				</tr>
    			<tr>
    				<td>Телефон:</td>
    				<td>222 333 222</td>
    			</tr>
    		</table>
    	</div>
    </htmlpagefooter>
    <sethtmlpagefooter name="myFooter" />';
    
    require_once __DIR__ . '/MPDF57/mpdf.php';
    $mpdf = new mPDF('utf-8', 'A4', '12', '', 10, 10, 7, 7, 10, 10);
    //$mpdf->allow_charset_conversion = true;
    $mpdf->charset_in = 'cp1251';
    $mpdf->list_indent_first_level = 0;
    $mpdf->WriteHTML($html, 0);
    echo $mpdf->Output('mpdf.pdf', 'I');
    die;
    


    Могу посоветовать разве что:
    1. проверить кодировку во всех файлах (шаблон с колонтитулами, случайно, не в отдельном файле лежит?);
    2. обновить библиотеку mPDF на последнюю версию;
    3. добавить "$mpdf->allow_charset_conversion = true;", как рекомендуется в документации.
    Ответ написан
    1 комментарий
  • Длинная строка распирает контейнер с min-width?

    @m-haritonov
    Можно перенести .breadcrumbs внутрь блока .content.

    Тогда .breadcrumbs будет иметь ширину не больше, чем .content, а в случае превышения этой ширины содержимое .breadcrumbs будет переноситься на следующую строчку. Это ведь то, что Вы имели ввиду?!

    Сейчас Вы пытаетесь сделать так, чтобы блок .wrapper мог распираться блоком .content, но при этом не мог распираться блоком .breadcrumbs.
    Ответ написан
    Комментировать