Пользовательская точка останова Bootstrap 4 не отображается в стилях уровня компонентов в приложении Angular CLI

У меня возникли проблемы с объявлением стилей scss с помощью миксина Bootstrap media-breakpoint-up после добавления новой точки останова в $ grid-breakpoints.

Хотя классы d-{infix}-{display} работают правильно и раздел с ними работает нормально, стили scss на уровне компонентов не видят новую точку останова, несмотря на импорт.

У меня вопрос - я что-то здесь делаю не так? например, порядок импорта?

Приложение Angular CLI с этими двумя зависимостями:

"bootstrap": "^4.1.3",
"ngx-bootstrap": "^3.0.1",

styles.scss

@import 'scss/my.variables';
@import 'scss/my.theme';
@import 'scss/bootstrap.partials';

my.variables.scss (ничего важного)

$brand-primary:#00a651
$fixed-header-min-height: 70px;    
$box-shadow: 0 4px 12px 0 rgba(0, 0, 0, 0.1);
$box-shadow-hover: 0 4px 12px 0 rgba(0, 0, 0, 0.3);

my.theme.scss

$font-family-sans-serif:  proxima-nova, Helvetica, Arial, sans-serif;
$font-family-monospace:   Menlo, Monaco, Consolas, "Courier New", monospace;
$font-family-base:        $font-family-sans-serif;
$font-weight-normal:      200;
$font-weight-base:        $font-weight-normal;
$body-bg:                 #fff;

bootstrap.partials.scss

$grid-breakpoints: (
  xs: 0,
  sm: 576px,
  md: 768px,
  lg: 992px,
  xl: 1200px,
  xxl: 1600px
);

$container-max-widths: (
  sm: 540px,
  md: 720px,
  lg: 960px,
  xl: 1140px,
  xxl: 1540px
);

// Bootstrap partial imports to keep the bloat away
@import '~bootstrap/scss/functions';
@import '~bootstrap/scss/variables';
@import '~bootstrap/scss/mixins';
@import '~bootstrap/scss/reboot';
@import '~bootstrap/scss/type';
@import '~bootstrap/scss/images';
@import '~bootstrap/scss/grid';
@import '~bootstrap/scss/utilities';
@import '~bootstrap/scss/buttons';
@import '~bootstrap/scss/transitions';
@import '~bootstrap/scss/modal';
@import '~bootstrap/scss/close';
@import '~bootstrap/scss/nav';
@import '~bootstrap/scss/navbar';

app.components.html

<h1>Custom breakpoint - xxl introduced (1600px)</h1>

<h2>media queries (media-breakpoint-up et al.)</h2>
<div class = "main">
  <p>
    this text should be blue, but red above xxl
  </p>

  <small>
    This Text Should All Be Lowercase, but Uppercase above xxl
  </small>
</div>

<h2>d-* classes</h2>

<p class = "d-block">Visible always</p>
<p class = "d-none d-lg-block">Visible above lg</p>
<p class = "d-none d-xxl-block">Visible above xxl</p>

app.component.scss

@import "~bootstrap/scss/functions";
@import "~bootstrap/scss/variables";
@import '~bootstrap/scss/mixins/_breakpoints';

.main {
  color: blue;
  @debug $grid-breakpoints;

  @include media-breakpoint-up(xxl) {
    /* I have also tried without repeating the selector */
    .main {
      color: red;
    }
  }

  small {
    text-transform: uppercase;
    @include media-breakpoint-up(xxl) {
      small {
        text-transform: lowercase;
      }
    }
  }
}

Выход

DEBUG: (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px)        

Нет xxl.

Изменить 1:

Я создал собственный миксин оболочки, который подтвердил, что точка останова не найдена.

@mixin respond-above($breakpoint) {
  @if map-has-key($breakpoints, $breakpoint) {
    @include media-breakpoint-up($breakpoint){
      @content;
    }
  } @else {
    @warn 'Missing breakpoint: #{$breakpoint}.';
  }
}
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
1 120
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я могу думать о двух возможных вещах.

1) Вы включаете bootstrap.partials'; в глобальный файл styles.scss, но если там определены какие-либо переменные или миксины, они будут «скомпилированы» из окончательного глобального CSS и будут недоступны в частичных компонентах. Поэтому вам, возможно, придется включить его в свой app.component.scss.

2) Как ваш angular.json выглядит в корневом каталоге? Попробуйте добавить путь к каталогу начальной загрузки node_modules в stylePreprocessorOptions.includePaths[] в angular.json.

{
    "projects": {
        "myProject": {
            "architect": {
                "build": {
                    "options": {
                        "stylePreprocessorOptions": {
                            "includePaths": [
                                "node_modules/bootstrap"
                            ]
                        },
                    }
                }
            }
        }
    }
}

Большое спасибо, miir! Это помогло. Хотя (2) ничего не изменил, (1) сделал очень много! Я попытаюсь реорганизовать файлы, так как мне неприятно импортировать всю корзину начальной загрузки в каждый файл. Кстати, stylePreprocessorOptions теперь находится в architect/build/options. Принимаю твой ответ.

user776686 19.10.2018 21:08

Нет проблем, рад, что что-то было полезно! Да, я согласен, могут возникнуть некоторые проблемы с включением его повсюду, особенно если есть правила css, поскольку они будут повторяться, поэтому, если можно изолировать миксины / переменные и импортировать только те, это было бы лучше всего. Это то, о чем я думал сам, и я еще не уверен, какое решение является лучшим. Интересно, достаточно ли этого в корневом компоненте верхнего уровня scss? Возможно, нет, потому что стили компонентов должны быть изолированы от других компонентов, а scss все равно компилируется и теряет вары и миксины.

miir 19.10.2018 22:17

Печально то, что размер пакета (!) Пакета main.js (js !!!) увеличился на ~ 300 КБ, когда я импортировал частичное ведро. Когда я заглянул в код js, я обнаружил некоторые следы jQuery ('on' listeners) и функций ослабления. Я сбит с толку. Пока это не решение :(

user776686 19.10.2018 22:52

О нет ... как жаль! :( Я думаю, что альтернативой было бы обойти ленивую загрузку CLI и использовать более традиционную настройку sass-build с задачами gulp или grunt ... или изолировать части начальной загрузки до только миксинов / переменных и включать только их?

miir 19.10.2018 23:50

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