Ответы пользователя по тегу HTML
  • Как сверстать такой блок или как сверстать треугольную кнопку?

    Exomode
    @Exomode
    Архитектор ПО
    Учитывая, что в CSS3 можно не только геометрические примитивы рисовать, но еще и полноценные шейдеры видеокарты с нуля писать и применять в визуализации, в вашем распоряжении куда больше возможностей, чем просто внедрение SVG в разметку шаблона на уровне 1998го года. Но касательно вашей задачи, она легко решается в рамках стандартного CSS всего за одни сутки, и поможет вам в решении псевдоселектор ::after. Задайте ему необходимую высоту, градиентный бэкграунд, box-shadow и главное - border-параметры в правильном формате, и вы на выход получите готовое универсальное решение без применения векторной графики. Примеров реализации треугольной кнопки в гугле можно найти тысячи, это уже давно тривиальная задача. Вам лишь остаётся адаптировать имеющиеся решения под свой требуемый формат задачи.
    Ответ написан
    2 комментария
  • Как на js изменять цвет div в зависимости от выданной цифры(значения)?

    Exomode
    @Exomode
    Архитектор ПО
    Регуляркой парсить то число что у вас там в скобках, иначе никак. Но сразу скажу, что это костыль костылей. Куда лучше передать с сервера сразу в разметке эту информацию, например:
    <div class="user" data-count="число_генерируется_движком">{news}</div>

    после этого вам останется лишь сделать что-то в роде:
    $(".user").each(function (i, e) {
      var count = $(e).attr("data-count");
      // далее делаете с этим числом что хотите.
    });
    Ответ написан
    5 комментариев
  • Как сделать hover на svg?

    Exomode
    @Exomode
    Архитектор ПО
    Для того, чтобы на вашем векторном канвасе работали все события js и css, вам нужно в разметку вашего документа (страницы) непосредственно внедрить полную разметку вашего svg. Далее вы можете с ним делать что угодно, словно это любой другой DOM-элемент. Доступ к дочерним элементам типа g или path так же сохранится с теми же событиями. Если вы подгрузите в документ свой вектор svg как <img src="some.svg" alt="svg" /> или в таком духе, ваши события, разумеется, не будут работать, ни в css, ни в js.
    Ответ написан
    Комментировать
  • Проблема с отображением в twig?

    Exomode
    @Exomode
    Архитектор ПО
    1) Пишете функцию замены переменных для расширения Twig:
    $prepareString = new Twig_SimpleFunction('prepareString', function ($str) {
      return str_replace("%param1%", "Тест", $str);
    });


    2) Добавляете её в расширения:
    $twig->addFunction($prepareString);

    3) В шаблоне вызываете функцию где нужно:
    <span>{{ prepareString("Ваша строка с '%param1%'") }}</span>


    В $prepareString можете писать всю необходимую вам логику замены переменных. На регулярках, на переборе словаря, через str_replace как в моем примере или любым другим способом. Данные для подмены предварительно формируете из БД или любым другим способом.
    Ответ написан
  • Как исправить прыгающие меню при возведении букв в верхний регистр при наведении?

    Exomode
    @Exomode
    Архитектор ПО
    Как вариант, зафиксируйте высоту ссылки. Или высоту самого меню, а ссылкам дать вертикальное выравнивание vertical-align: middle.
    Ответ написан
    Комментировать
  • Как сменить background-image по таймеру?

    Exomode
    @Exomode
    Архитектор ПО
    На сколько я помню, в нативном js стиль у элемента идет как обычный string, а не словарь. Попробуйте поменять это
    s.backgroundImage = 'url('+bg[i]+')';
    на вот это
    s += "background-image: url("+bg[i]+");";
    Ответ написан
  • Можно ли заблокировать размер элементов страницы?

    Exomode
    @Exomode
    Архитектор ПО
    Как вариант, через медиазапросы. Можно на стороне css прописать нужные пропорции на определенном шаге масштабирования. Если сделать их относительными единицами, тогда пропорции будут максимально точны
    Ответ написан
    Комментировать
  • Как открыть окно с фиксированными размерами через js или html?

    Exomode
    @Exomode
    Архитектор ПО
    <a href="/index2.php?option=com_jumi&amp;fileid=3&amp;Itemid=11"
       onclick="window.open(this.href,'targetWindow',
                                       'toolbar=no,
                                        location=no,
                                        status=no,
                                        menubar=no,
                                        scrollbars=yes,
                                        resizable=yes,
                                        width=SomeSize,
                                        height=SomeSize');
     return false;">Popup link</a>
    Ответ написан
    Комментировать
  • Как скачать фотографию отсюда?

    Exomode
    @Exomode
    Архитектор ПО
    demo.agnidesigns.com/fortune/demo14/wp-content/upl...

    смотрите контейнеры слайдера с классами agni-slide-bg agni-slide-bg-image, у них ссылка на изображение сразу в свойстве background-image
    Ответ написан
    Комментировать
  • Почему блок сдвинут вверх?

    Exomode
    @Exomode
    Архитектор ПО
    Потому что по умолчанию ссылки имеют свойство display: inline-block и vertical-align у них bottom. Поставьте ссылке свойство:
    vertical-align: top;
    или же уберите у родителя высоту, пускай будет автоматической, а ссылки выравниваются по центру высоты родителя с помощью:
    vertical-align: middle;
    Ответ написан
    5 комментариев
  • Как сохранить класс активной ссылки после перезагрузки страницы?

    Exomode
    @Exomode
    Архитектор ПО
    Можно сохранить параметр в куку, можно привязаться к хешу урла, после перезагрузки он никуда не исчезнет и можно будет проверить наличие:
    var hash = window.location.hash;
    var selectedOption = null;
    
    if (hash && hash != '#') {
      var parts = hash.split('=');
    
      if (parts.length == 2 && parts[0] == "select_option") {
        selectedOption = parts[1];
      }
    }

    Дальше просто присвоить свойство selected селектору "select option[name='" + selectOption + "']" при загрузке страницы, а в onchange списка обновлять хэш. Не часто вижу чтобы подобное решение применялось, но иногда оно вписывается куда элегантнее и проще, чем даже те же куки, которые можно очистить и всё слетит, или вообще отключить. Хэши напоминают строку GET-запроса, только работают исключительно в рамках клиентсайда.

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

    Вместо списков можно применить к любому элементу, достаточно лишь изменить селектор и вместо свойства selected использовать атрибут классов, к примеру. Всё от вашей фантазии зависит, решений здесь много.
    Ответ написан
    Комментировать
  • Как создать генератор?

    Exomode
    @Exomode
    Архитектор ПО
    $lexems = [
      "text" => "TEXT",
    ];
    
    $data = [];
    
    foreach ($_REQUEST as $k => $v) {
      if (array_key_exists($k, $lexems)) {
        $data[$k] => htmlspecialchars(trim($v));
      }
    }
    
    $sourceText = file_get_contents("/path/to/template.txt");
    
    foreach ($data as $k => $v) {
      $sourceText = str_replace('{' . $lexems[$k] . '}', $v, $sourceText);
    }
    
    echo $sourceText;


    Как оно работает:
    1. На странице есть набор input с именами, соответствующими ключам ассоциативного массива $lexems;
    2. После отправки данных на наш скрипт-обработчик, мы сохраняем все полученные данные в массив с теми же ключами;
    3. Получаем исходный текст шаблона, где содержатся наши лексемы;
    4. Проходимся массивом по полученным данным, выбираем по тем же ключам лексемы и заменяем их на пришедший с клиента текст, после чего выводим результат на экран.

    Вместо str_replace можно использовать preg_replace или составить карту подмены и обойтись в str_replace без цикла. последнее самое предпочтительное в плане производительности на текстах небольшого объёма. Вариант с регулярками лучше использовать на массивных текстах.
    Ответ написан
    Комментировать
  • Как сделать меню с полосками?

    Exomode
    @Exomode
    Архитектор ПО
    .menu .menu_item {
      border-left: 1px solid #c0c0c0;
    }
    
    .menu .menu_item:first-child {
      border-left: 0 none;
    }

    или
    .menu .menu_item {
      border-right: 1px solid #c0c0c0;
    }
    
    .menu .menu_item:last-child {
      border-right: 0 none;
    }


    Вариант для вашей вложенности меню: codepen.io
    Ответ написан
  • Как сделать адаптивное меню с логотипом в центре?

    Exomode
    @Exomode
    Архитектор ПО
    Вариантов действительно масса, можно и таким подходом.
    Ответ написан
    Комментировать
  • Как отключить стили таблицы шорткода темы?

    Exomode
    @Exomode
    Архитектор ПО
    Переназначьте новые правила после первого объявления, например:
    table th, table td {
        padding: 10px;
        text-align: center;
        border-width: 1px;
        border-style: solid;
        vertical-align: middle;
    }
    
    table th, table td {
        text-align: left;
    }

    или просто закомментируйте правило в основном стиле:
    table th, table td {
        padding: 10px;
        /*text-align: center;*/
        border-width: 1px;
        border-style: solid;
        vertical-align: middle;
    }

    Для того, чтобы указать конкретным столбцам свои правила, можно сделать так:
    table th:nth-child(2), table td:nth-child(2),
    table th:nth-child(4), table td:nth-child(4) {
        text-align: left;
    }

    Выравнивание слева будет применено лишь ко второму и четвёртому столбцам и их заголовкам.
    Ответ написан
    Комментировать
  • Как вызвать событие на определённом элементе?

    Exomode
    @Exomode
    Архитектор ПО
    $("#elements > .test:nth-child(2)").click();
    или
    $("#elements > .test").each(function (i, e) {
      if (i == 1) {
        $(e).click();
      }
    });

    или
    var tests = $("#elements > .test");
    
    for (var i = 0; i < tests.length; i++) {
      if (i == 1) {
        $(tests[i]).click();
        break;
      }
    });
    Ответ написан
    3 комментария
  • Как правильно расположить блоки с кнопками?

    Exomode
    @Exomode
    Архитектор ПО
    Набросал я вам тут вариантик на досуге...
    https://codepen.io/Exomode/pen/OjJdma - с применением JavaScript, самый надёжный, но более сложный и требует JS, что само по себе иногда может быть не так производительно как на чистом CSS.
    флоатов и таблиц здесь нет, а это значит что верстка будет отзывчивой для разрешений экранов различных устройств и может содержать в себе неограниченное количество блоков.
    Ответ написан
  • Как сделать такие линии?

    Exomode
    @Exomode
    Архитектор ПО
    Либо отрисовать канвасом кривую Безье, как указали выше, либо только средствами CSS3, применить трансформацию к блоку с абсолютным позиционированием и скругленным бордером. В обоих случаях линии залить линейным градиентом. Получится примерно такой эффект как на картинке.
    Ответ написан
    Комментировать
  • Как сверстать такую секцию landing page?

    Exomode
    @Exomode
    Архитектор ПО
    Можно и на CSS3:

    <div class="background">
      <div class="triangle"></div>
    </div>


    * {
      margin: 0;
      padding: 0;
      outline: 0 none;
      box-sizing: border-box;
    }
    
    .background {
      width: 100vw;
      min-height: 100vh;
      display: block;
      overflow-x: hidden;
    }
    
    .triangle {
      background: #404040;
      height: 100vh;
      display: block;
      position: relative;
    }
    
    .triangle:after {
    	content: '';
      position: absolute;
    	bottom: -15rem;
    	width: 0;
    	height: 0;
    	border: 1rem solid transparent;
      background: transparent;
    	border-bottom: 14rem solid #404040;
    	transform: rotateX(180deg) scaleX(42);
    	left: 48.8%;
    }


    https://codepen.io/Exomode/pen/vJYQjB
    Ответ написан
    Комментировать
  • Находил ли кто подобный плагин?

    Exomode
    @Exomode Автор вопроса
    Архитектор ПО
    Аналогов я так и не нашел, вот решение, которое написал за вчера сам:
    var blackCoeff = 1.25;	// Коэффициент затемнения
    
    var sectionList;
    var blackList;
    var counter;
    
    function buildStyles() {
    	var styles = 'body {' +
    					'height: ' + ($("body").height() + 'px;') +
    					'position: relative;' +
    				 '}' +
    				 
    				 '.black {' +
    					'position: absolute;' +
    					'top: 0;' +
    					'left: 0;' +
    					'background: black;' +
    					'opacity: 0.8;' +
    				 '}' +
    					
    				 'section {' +
    					'position: relative;' +
    					'top: 0;' +
    				 '}' +
    				 
    				 'section.fixed {' +
    					'position: fixed;' +
    					'top: 0;' +
    				 '}';
    
    	$('head').append('<style id="sticky-stack-styles" type="text/css">' + styles + '</style>');
    }
    
    $(window).on('scroll', function() {
    	var windowScrollPos = $(window).scrollTop();
    	var tmpCounter = counter;
    	
    	counter = 0;
    	
    	for (var i = 0; i < sectionList.length; i++) {
    		if (windowScrollPos >= $(sectionList[i]).offset().top) {
    			counter++;
    		}
    	}
    	
    	if (counter > 1) {
    		$(blackList[counter - 2]).css("opacity", (windowScrollPos / $(sectionList[counter < sectionList.length ? counter : counter - 1]).offset().top - 1) * (-counter * blackCoeff));
    	}
    	
    	if (counter != tmpCounter) {
    		for (var i = 0; i < sectionList.length; i++) {
    			$(sectionList[i]).removeClass("fixed");
    		}
    		
    		if ((tmpCounter == 2 && counter <= 1)) {
    			return;
    		}
    		
    		$(sectionList[counter - 1]).addClass("fixed");
    	}
    });
    
    $(function () {
    	$("footer").append("<section/>");
    	
    	sectionList = $("section");
    	
    	for (var i = 0; i < sectionList.length; i++) {
    		var zIndex = (sectionList.length - i) * 2;
    		$(sectionList[i]).css("z-index", zIndex);
    		
    		if (i == 0) {
    			continue;
    		}
    		
    		$(sectionList[i]).prepend('<div class="black" style="width: ' + $(sectionList[i]).width() + 'px; height: ' + $(sectionList[i]).height() + 'px; z-index: ' + (zIndex + 1) + '"></div>');
    	}
    	
    	blackList = $(".black");
    	
    	buildStyles();
    });


    Полностью соответствует требованиям задачи ТЗ заказчика, не затрагивает структуру оригинальной верстки и стили, генерит что ему надо на лету, подключается в одну строку.
    Ответ написан
    Комментировать