• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Stylowanie po kliknięciu

Object Storage Arubacloud
0 głosów
306 wizyt
pytanie zadane 20 marca 2020 w HTML i CSS przez michal_php Stary wyjadacz (13,700 p.)

Cześć.

Mam taką zagwozdkę jak mogę dokonać aby po kliknięciu css na stałe zmienił bacground  

mój html:

<span *ngIf="day.important" class="task">{{day.allNumber}}</span>

css:

.task{
  padding: 4px;
  background: @task;
  color: white !important
}
.task:active {
 background: @hover;
}
.task:focus {
 background: @hover;
}

Użyłem dwóch selektorów active i focus. Kolor tła się zmienia tylko po naciśnięciu ,ale zaraz znika. Ale czy da się jakoś opisać aby trwale pozostał dany kolor (mowa o użyciu samego css)?

Z góry dziękuje.

1 odpowiedź

+1 głos
odpowiedź 20 marca 2020 przez cz3ran Stary wyjadacz (13,380 p.)
wybrane 20 marca 2020 przez michal_php
 
Najlepsza

Używasz angulara, czyli inicjalnie w komponencie możesz dodać jakąś flagę (np. isClicked), która inicjalnie jest na false, po pierwszym kliknięciu, ustawisz tą flagę na true i w spanie dajesz 

<span
  ...
  [ngClass]={'twoja-klasa': isClicked}
  ...
>

ogólnie działa to tak, że klasa jest dodana w elemencie w momencie kiedy isClicked jest true.

komentarz 20 marca 2020 przez michal_php Stary wyjadacz (13,700 p.)
Dziękuje za cenna wskazówkę.
komentarz 20 marca 2020 przez michal_php Stary wyjadacz (13,700 p.)
Tylko problem jest u mnie ,że to jest tablica i w sumie jak jedna wartość przyjmie true to wszystkie inne też się od razu pojawią. Nie da się jednak w css ?
komentarz 20 marca 2020 przez cz3ran Stary wyjadacz (13,380 p.)

No to prościej, dla każdego elementu po wciśnięciu, wywołaj funkcję która doda do tego elementu klasę. Przy naciśnięciu możesz przekazać do funkcji event, który posiada pole target. Dzięki niemu możesz bez problemu dodać jaką klasę chcesz temu elementowi. Tutaj masz przykładzik: https://stackblitz.com/edit/angular-zjrq77. Jak byś miał jakieś pytanka co do Angulara to wal śmiało ;P

komentarz 20 marca 2020 przez michal_php Stary wyjadacz (13,700 p.)

Nie rozumiem bo mam tutaj html: (zmieniłem koncept tak jak pisałeś na click)

<li *ngFor="let day of allDays;" (click)="getNexDay(day.allNumber)" #htmlliElement [ngClass]="{'task__active': is_clicked}">

a Tutaj mam wywołanie tego click :

getNexDay(day : number): void {
      this.nextTaskRef.getNextTask(day);
      this.is_clicked = true;
  }

I co w tej funkcji mam przypisać aby jak to teraz aby html dokładnie li odpowiedni dostał tą klasę ? Z góry dziękuje za pomoc. 

komentarz 20 marca 2020 przez cz3ran Stary wyjadacz (13,380 p.)

To:

...
(click)="getNexDay(day.allNumber)"
...

zamieniamy na:

...
(click)="getNexDay($event, day.allNumber)"
...

funkcję getNextDay zmieniamy tak:

getNexDay(event: Event, day : number): void {
  this.nextTaskRef.getNextTask(day);
  this.is_clicked = true;
  event.target.classList.add('task__active');
;}

I powinno śmigać (wtedy już usuwasz [ngClass]=...).

PS. w ogóle sorki ale rozwiązanie nie wgrało się na stackblitza :P

komentarz 20 marca 2020 przez michal_php Stary wyjadacz (13,700 p.)

A mam takie techniczne pytanie o classList

Bo angular mi wywala błąd :

TS2339: Property 'classList' does not exist on type 'EventTarget

I jak to teraz znaleźć ?

komentarz 20 marca 2020 przez michal_php Stary wyjadacz (13,700 p.)

Dobra już ogarnąłem w dokumentacji 

getNexDay(event: any, day : number): void {

Event zamieniłem na any. 

Bardzo ślicznie dziękuje za pomoc.

komentarz 20 marca 2020 przez michal_php Stary wyjadacz (13,700 p.)

A mam jeszcze jedno pytanie.

mając taką strukturę html:

 <li *ngFor="let day of allDays;" (click)="getNexDay($event,day.allNumber)">

        <span class="active" *ngIf="day.allNumber == actualDay">{{day.allNumber}}</span>

        <ng-template [ngIf]="day.allNumber != actualDay">

          <span *ngIf="!day.normal && !day.important" >{{day.allNumber}}</span>
        </ng-template>

    </li>

to czasami :

event.target.classList.add('task__active');

Dodaje mi klasę do li a czasami do span czy do się to jakoś ujarzmić ?

Podobne pytania

0 głosów
1 odpowiedź 164 wizyt
pytanie zadane 11 grudnia 2017 w HTML i CSS przez Artek Stary wyjadacz (11,800 p.)
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 29 grudnia 2022 w HTML i CSS przez pj-1024 Użytkownik (670 p.)
+1 głos
1 odpowiedź 140 wizyt
pytanie zadane 13 lipca 2021 w HTML i CSS przez Grzegorz Mikina Dyskutant (8,060 p.)

92,584 zapytań

141,434 odpowiedzi

319,671 komentarzy

61,968 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...