Ionic 4: как скрыть полосу прокрутки в ion-content

Я пытаюсь скрыть полосу прокрутки в ионном контенте (Ionic 4) на ionic 4 нет ion-scroll, поэтому я использовал ion-content но я не могу найти какой-либо атрибут css, чтобы скрыть его (большинство из них не работают)

Я хочу прокручивать, но не хочу видеть полосу прокрутки

::-webkit-scrollbar,
*::-webkit-scrollbar {
  display: none;
}

Я пробовал это, но это не работает в ионном содержании.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
20
0
19 394
13

Ответы 13

В Ionic 4 вы должны использовать следующее, потому что Ionic использует теневой DOM:

глобальный.scss

.no-scroll {
    --overflow: hidden;
}

и на странице

<ion-content class = "no-scroll">

Это также отключает прокрутку, а не просто скрывает полосу прокрутки.

Jay Ordway 10.03.2019 00:28

Это сработало великолепно! И я также не вижу никакой полосы прокрутки... Я потратил часы на это в ionic 4, потому что все атрибуты прокрутки предыдущей версии устарели. Спасибо!

bunny 19.06.2019 15:40

Спасибо @ростислав

Ваше решение даже не предлагает WebStorm и не рисует желтым подчеркиванием в значении предупреждения, но у меня работает и работает, это круто :)

решение: добавьте эти строки как в global.scss, так и в variables.scss:


::-webkit-scrollbar, *::-webkit-scrollbar {
  display: none;
  overflow: hidden;
}

ion-content {
  overflow: hidden;
  --overflow: hidden;
}

.scroll-content {
  overflow: hidden;
}

ВНИМАНИЕ:, затем очистите кеш браузера и обновите страницу, это здорово!

но не забывайте, что прокрутка отключена на всех страницах, добавьте этот код только в файл .sccs страниц, которые не нужно прокручивать!

::-webkit-scrollbar, *::-webkit-scrollbar {
  display: none;
  overflow: hidden;
}

ion-content {
  overflow: hidden;
  --overflow: hidden;
}

.scroll-content {
  overflow: hidden;
}
  ion-infinite-scroll.md.infinite-scroll-enabled.hydrated {
      overflow: scroll!important;
      height: 100%!important;
    }

Пожалуйста, добавьте некоторые пояснения к вашему ответу.

sanyassh 23.05.2019 10:22

Из-за того, что Ionic использует теневой DOM для ионного контента, следует отключить прокрутку в элементе теневого DOM и после этого сделать ионный контент своей собственной прокруткой, а затем скрыть полосу прокрутки для ионного контента. Ионный контент результата со скрытой рабочей полосой прокрутки. Необходимо использовать Пользовательские свойства CSS. Добавьте стили в глобальную область.

ion-content {
  // overwrite inline styles
  --offset-bottom: auto!important;
  --overflow: hidden;
  overflow: auto;
  &::-webkit-scrollbar {
    display: none;
  }
}

Вы должны добавить «ширину полосы прокрутки: нет»; для фаерфокса :)

jpierront 12.04.2020 10:02

Конечно, вы правы, если это Firefox. Я предполагаю, что для Android и ios используется компонент WebView, основанный на Chromium. Вот почему его можно пропустить.

Sergey Oleynikov 13.04.2020 14:43

Это решение скрывает полосы прокрутки, но блокирует функцию scrollToTop <ion-content>, и функция scrollToBottom у меня перестала работать. У вас так же?

Hemang 13.10.2020 10:22

Он также блокирует бесконечную прокрутку ;(

Islam Murtazaev 13.01.2021 16:35

Вот взлом? https://github.com/ionic-team/ionic/issues/17685

<ion-content>
<div style = "background-color: #f2f2f2 !important; height: 100vh; overflow: auto;">
# content here
</div>
</ion-content>

Этот «хак» работает только тогда, когда вы не используете ion-header или что-то еще за пределами ion-content.

Manuel 21.02.2020 18:07

Рефакторинг решения @Sergey Oleynikov, и он отлично сработал для меня

ion-content {
  // overwrite inline styles
  // --offset-bottom: auto !important; 
  --overflow: hidden;
  overflow: auto;

  &::-webkit-scrollbar {
    display: none;
  }
}

<ion-content> — это настраиваемый элемент с теневым DOM. Есть что-то, называемое :: часть псевдоэлемента, для нацеливания на элемент в теневом элементе DOM. Если вы посмотрите на теневой дом, вы увидите это:

ion-content

Обратите внимание на part = "scroll". Ionic добавил части к своим элементам, которые мы можем использовать через псевдоэлемент ::part, чтобы настроить это и применить наш собственный CSS, чтобы скрыть полосу прокрутки:

ion-content::part(scroll)::-webkit-scrollbar {
   display: none;
}

Проверено это на iOS и Android успешно. Однако я не заставляю его работать в Chrome.

Это работает и для меня в Chrome. stackoverflow.com/a/59838653/1603234

Hemang 12.10.2020 11:48

Я считаю, что вы можете использовать slot = "fixed" чтобы сделать элемент фиксированным, удалив полосу прокрутки по умолчанию для вас.

См. ионная документация

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

.noscroller {
  left: -10px;
  width: calc(100% + 20px);
}
::-webkit-scrollbar,
*::-webkit-scrollbar {
display: none;
}

ion-content {
 --offset-bottom: auto!important;
 --overflow: hidden;
 overflow: auto;
 &::-webkit-scrollbar {
   display: none;
 }
 }

если вы хотите удалить прокрутку динамически. Вы можете использовать метод удаления класса scroll-y из shadowDOM в <main class = "inner-scroll scroll-y"></main> внутри <ion-content></ion-content>.

Во-первых, import { Renderer2 } from '@angular/core' в вашем constructor(renderer: Renderer2)

Чтобы достичь этого, в вашем your-component.component.ts в цикле событий ngAfterViewInit или далее.

Это удалит прокрутку со страницы, активированной в вашем приложении.

 for(let el of  Array.from(document.querySelectorAll(".ion-page:not(.ion-page-hidden) ion-content")))
  {
    this.renderer.removeClass(el.shadowRoot.querySelector("main[part=scroll]"), "scroll-y");
    
  }

Это добавит прокрутку со страницы, активированной в вашем приложении.

for(let el of  Array.from(document.querySelectorAll(".ion-page:not(.ion-page-hidden) ion-content")))
  {
    this.renderer.addClass(el.shadowRoot.querySelector("main[part=scroll]"), "scroll-y");
    
  }

Попробуйте это, кажется, пока все работает нормально, сохраняя при этом все функции в Ionic 5.

// variables.scss

ion-content {
  width: calc(100% + 15px);
}
ion-content::part(scroll) {
  padding-right: 15px;
}

Код от spicemix сработал! Я вставил код в global.scss, а не в variable.scss

/* global.scss */
ion-content {
  width: calc(100% + 15px);
}
ion-content::part(scroll) {
  padding-right: 15px;
}

Другие вопросы по теме