Ответы пользователя по тегу HTML
  • Как разместить все строчные элементы таблицы равномерно по ширине блока?

    @AntowaKartowa
    Зачем постить код импорты компонент которых у меня нет если вопрос по верстке. Нужно было добавить сгенерированный html и css который быстро можно было вы вставить в онлайн редактор. Там мне нужно вместо MySpreadsheet вставлять table в разметке и в стилях и руками вводить значения ячеек.

    Если я правильно понял вопрос, то для начала нужно выровнять таблицу добавив table margin: 0 auto;
    В третьей колонке выровнять контент по правому краю, во второй колонке по центру.
    table {
      width: 90%;
      margin: 0 auto;
    }
    
    td:nth-child(2) {
      text-align: center;
    }
    
    td:nth-child(3) {
      text-align: right;
    }
    Ответ написан
    3 комментария
  • Как покрасить определённую часть строки?

    @AntowaKartowa
    Ну какого-то встроенного готового изящного решения наверное нет. Я вижу лишь вариант самописной (или использовать готовую библиотеку) функции (утилиты) под собственные нужды.

    Например вот функция оборачивающая исключительно в span. Один из недостатков функции в том, что она опирается на `matchAll` метод поддерживаемый вроде бы пока еще не всеми браузерами.

    Параметры:
    - строка в которой производится поиск и замена
    - искомая строка (может быть регулярное выражение, но обязательно с `g` флагом)
    - необязательное значение класса для span (чтоб не печатать нужно любое falthy значение - null, '', 0, false)
    - необязательное значение порядкового индекса найденного совпадения для оборачивания. по умолчанию - `0`. может иметь негативное значе `-1` для последнего значения сколько бы их не было, `-2` для предпоследнего и тд.
    const spanText = (str, pattern, className = '', index = 0) => {
      const matches = [...str.matchAll(pattern)];
      
      if (!matches.length || !matches.slice(index)[0]) return str;
    
      const { 0: match, index: startIndex } = matches.slice(index)[0];
      const endIndex = startIndex + match.length
      const spanOpenTag = !className ? '<span>' : `<span class="${className.toString()}">`;
    
      return str.slice(0, startIndex) + spanOpenTag + match + '<span>' + str.slice(endIndex);
    } 
    
    const re = new RegExp(word, 'g');
    text.innerHTML = spanText(text.innerHTML, re);
    Ответ написан
    Комментировать
  • Как реализовать такое расположение блоков?

    @AntowaKartowa
    Предложу так навскидку. Может и не работать, могут нюансы полезть, но я бы начинал в таком направлении работать. У вас две колонки. Во второй колонке по очереди слоями идут блоки хлебных крошек, заголовка, блок с фото и какими-то ссылками, потом секция с основным текстом. Секция с фото и ссылками разбита на две колонки - одна для фото, другая для текста и ссылок. У секции с фото и ссылками есть свойство position: relative. Так же внутри секции с фото и ссылками должен быть блок который будет играть белый фон с желтой рамкой. У него например position: absolute, z-index: -1, top: -15px; left: 150px, right: 0px; bottom: - 125px;

    https://jsfiddle.net/AntowaKartowa/Lh7bdef0/
    Ответ написан
    Комментировать
  • Как перенести JS в html файл?

    @AntowaKartowa
    Свойству объекта присваивается строковое значение. А что должно произойти? Должен загрузиться скрипт расположенный по адресу который в строковом значении? Каким образом это должно произойти? Может с основ html начать стоит прежде чем за javascript браться? https://webref.ru/html/script
    Ответ написан
    Комментировать
  • Как сверстать такой элемент?

    @AntowaKartowa
    А что именно вызывает сложность? Текст? Через transform: rotate(-90deg) вероятно
    Ответ написан
  • В каких форматах должен отдаваться верстальщику дизайн макета сайта?

    @AntowaKartowa
    Приходилось работать тупо с jpg. Надо ли говорить, что много неудобств. Ни размер шрифта нормально посмотреть, ни какие-то графические элементы в отдельную картинку получить без наложения других элементов страницы.

    Скорее всего говорят о таких сервисах типа https://zeplin.io/ На последнем проекте дизайнер в него выкладывал как дизайны страниц так и сборки например всех возможных стилей кнопок, инпутов. Все это шариться. Идея ок. Во многом удобно. Показывает размеры, цвета. Позволяет определенные элементы скачать в виде отдельного файла. Но было нужно измерить какое-то растояние которое сервис сам не показывает. И непонятно что делать. Бывало нужно было иконку сукачать и нужно было просить дизайнера чтоб он что-то там в настройках сделал чтоб иконка стала скачиваемым элементом. Короче есть минусы, но идея ок. И это не один такой сервис. Думаю через пару лет большинство через них работать и будет.
    Ответ написан
    4 комментария
  • Как организовать асинхронную загрузку экрана захвата и остальной страницы?

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

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

    Оно не должно мешать загрузке остальной страницы и ее скриптов.

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

    Другое дело джаваскрипт. Его загрузка и выполнение блокируют обработку и рендеринг страницы. Потому рекомендуется объявление джаваскрипта размещать или в самом низу страницы - начнет загрузку скрипта после загрузки страницы. Но кажется это не всегда гарантирует хороший результат.

    Лучше добавить в теги скрипт атрибуты async или defer. Первый не блокирует рендеринг страницы, но начинает свое исполнение сразу как только загружен. Это потенциально может привести к проблемам. Например попап еще не отрендерен, а скрипт уже начал выполнение и не нашел в разметке попапа, не смог повесить обработчики событий и все нерабочий попап получится. Из-за этого же этот атрибут не гарантирует, что скрипты будут выполнятся в том порядке в котором объявлены. Опять же одни скрипты могут зависить от других и это может привести к неработающему функционалу.

    Дефер же гарантирует, что исполнение скрипта начнется только после полной загрузки страницы и что скрипты будут исполнятся в порядке их объявления. Потому он самый предпочтительный.

    Вообще есть бесплатный курс по оптимизации загрузки страницы от гугла. https://www.udacity.com/course/website-performance...

    Кажется я в итоге не на ваш вопрос ответил.
    Ответ написан
    1 комментарий
  • Вопрос чисто к опытным верстальщикам?

    @AntowaKartowa
    Дк вроде уже ни в одной статье писалось, что цепочки селекторов это зло. Не столько с эстетической сколько с практической точки зрения.

    1. Если тебе где-то нужно переопределить стили в каком-то отдельном контексте придеться такую же длинную цепочку фигачить.
    2. Ну и размер файла стилей это не уменьшает.
    3. Плюс дополнительные элементы цепочки это лишние циклы поиска браузером соответствии элементов в ДОМ структуре, что ест ресурс. Одна цепочка может не заметна, но полчища таких цепочек уверен могут показать существенную разницу.
    4. Потом браузер ведь читает справа налево. В .navbar .navbar-right-menu li.notify-dropdown .notify-list li a .notify-body он сначало найдет все .notify-body, потом начнет проверять какие из них вложены в тег a и искать будет до самого верхнего эелемента пока не найдет или не упреться в бади. Потом начент проверять а какие из них лежат внутри списка li и тд. Куча ненужных обработок.
    5. В этом же ключе стоит упомянуть, что селекторы в идеале все должны быть классами. А селекторы теги типа a, li, p, span и тд нужно избегать потому что они неспецифичны, не несут большой ценности, создают лишние цыклы обхода дерева элементов. По той же причине нельзя использовать селектор *.

    В идеале вообще не должно быть вложенных селекторов. Почитай про БЕМ методологию. https://ru.bem.info/methodology/ Максимум 2 в крайних случаях три уровня вложенности.
    Ответ написан
    Комментировать
  • Как заставить работать nth-child?

    @AntowaKartowa
    Кнутом его кнутом ну и пряником немного.

    Посмотрел. Эээ так у тебя каждый h2 в отдельном блоке значит каждый из них это первый чайлд. И других нет)

    Поменяй
    .brand-menu:nth-child(even) h2
    Ответ написан
  • Почему не работает overflow в mozilla и ie?

    @AntowaKartowa
    Абсолютно спозиционированный див внутри которого таблица внутри которой в ячейке лежит див который должен иметь скрол. Ах ты грязный извращенец

    Избавься от таблицы
    Ответ написан
    Комментировать
  • Резиновый шаблон сайта, контент по середине страницы?

    @AntowaKartowa
    Если я правильно понял вопрос как вертикально выровнять? С чего ж начать.
    1. Наверное с того, что это вроде не контент а скорее какой-то заголовок и короткое описание на фоне бигборда. Оцентровать то походу не относительно всего окна нужно (выйдет кака при уменьшении окна) а относительно бигборда. А в верстке никакой разметки для бигборда и накаких размеров дня него в стилях нет. А значит нет основы относительно которой выравнивать нужно.

    2. Бигборд видимо должен занимать всю доступную высоту и не меньше какой-то минимальной высоты. Есть способы как этого добиться по старинке, но там сложные танцы с дисплей тейбл и множественное оборачивание в дивы. Может есть другой олдовый способ, но я его не знаю. Наиболее простой способ для этого испльзовать flex-box.

    Я забрал враппер. С флексбоксом он не нужен. Убрал ненужные флоты. Вместо них есть инлайн-блоки. Для центрования контента добавил отдельный класс контейнер. Для центрируемого вертикально текста добавил текст-блок. Он находиться внутри контейнера и может горизонтально выравниваться относительно него через margin-left или через margin: 0 auto.
    Cтили для вертикального выравнивания находятся у content блока.

    Не знаю какие браузеры нужно поддерживать. Флексбокс понятно не везде работает. Но его уже начали полномасштабно в новых сайтах и приложениях внедрять. Надеюсь такой вариант чем-то вам поможет.

    https://jsfiddle.net/AntowaKartowa/uLw6ns3c/4/

    PS. То что считал ненужным закоментировал. Свои стили добавлял вниз селектора отделив пустой строкой.
    Ответ написан
  • Убрать меню по клику в не области?

    @AntowaKartowa
    Повесить на все окно или бади обработчик события и проверять чтоб таргет не был кнопкой дропдауна или самим дропдауном. Но в реальных условиях дропдаун состоит еще из ссылок и других блоков и все их проверять геморно. Кажется пока не придумали ничего лучше чем вместе с дропдауном помещать в дом прозрачный оверлей блок на все окно (position: fixed, width: 100vw, height: 100vh; top: 0, left: 0) и вешать обработчик события на него. Возможно таргет все же придеться проверять, но так его проще будет проверять. У дропдауна з-индекс должен быть выше чем у оверлея.
    Ответ написан
    3 комментария
  • Как задать верхний отступ в вёрстке?

    @AntowaKartowa
    flex-box где-то так
    я там ширину, высоту не сетал

    .bigboard-container {
      display: flex;
      flex-flow: column nowrap;
      align-items: center;
      justify-content: center;
      flex: 0 0 100vw; //full screen width is minimum
    }
    
    .bigboard-text { //set font-size, width or max-width}
    
    .bigboard-button {...}


    Можно еще более старым традиционным методом с помощью vertical-align: middle выравнивать блок в самом центре. Можно изучить стили вот тут чтоб понять как попап выравнивается по центру. https://jsfiddle.net/AntowaKartowa/H2N5R/

    Ключевые моменты это .popup__overlay:after (фоллбек для старых ие браузеров .popup__valignfix)
    и .popup { display: inline-block; ... vertical-align: middle }

    Надеюсь ответ понятен и релевантен.
    Ответ написан
    Комментировать
  • Закрытие меню при клике по якорю?

    @AntowaKartowa
    Чето как-то слишком дофига всего в js происходит и не очень ясно что и почему. Лень разбираться так что я коротко опишу способ как сделать тож самое без javascript

    Можно якоря обернуть в label с атрибутом for="#menu-toggle" На одном уровне с блоком меню который должен прятаться расположить input type=checkbox id="menu-toggle" задать ему позицию абсолют, опасити 0, з-индекс -1
    Точно таким же лейблом обернуть бургер который должен меню делать видимым.

    Ну а для блока меню по умолчанию определить стили чтоб он был скрыт,
    но при #menu-toggle:checked ~ .some-menu-block определить стили чтоб он был открыть.

    Вот тут https://jsfiddle.net/AntowaKartowa/b3ueU/ и тут https://jsfiddle.net/AntowaKartowa/BcMVP/ можно посмотреть как подобный подход работает
    Ответ написан
    Комментировать
  • Как правильно работать с z-index и Opacity?

    @AntowaKartowa
    Opacity менее 1 меняет относительную позицию элементов и может испортить настроение. Лень пересказывать - есть публикация на этот счет https://philipwalton.com/articles/what-no-one-told...

    А вообще z-index работает с absolute, fixed или relative;
    И зависит от z-index'ов родительских элементов. Если у родителя z-index: 1 а у элементов на одном уровне с родителем выше значение, то дочерний блок хоть с z-index: 10000 не сможет перекрыть соседей родителя.
    Ответ написан
    Комментировать