responsive design & translate

This commit is contained in:
Chneemann 2024-04-28 11:18:00 +02:00
parent a4ff000e23
commit 6fd7c76c24
10 changed files with 132 additions and 99 deletions

View file

@ -2,7 +2,7 @@
<div class="header"> <div class="header">
<div class="title">{{ "board.headline" | translate }}</div> <div class="title">{{ "board.headline" | translate }}</div>
<div class="search"> <div class="search">
<div> <div class="search-inner">
<input <input
#searchField #searchField
id="search-task" id="search-task"

View file

@ -23,7 +23,8 @@ section {
display: flex; display: flex;
align-items: center; align-items: center;
position: relative; position: relative;
padding-right: 32px; .search-inner {
position: relative;
input { input {
width: 312px; width: 312px;
padding: 8px 16px; padding: 8px 16px;
@ -34,7 +35,7 @@ section {
.line { .line {
position: absolute; position: absolute;
top: 8px; top: 8px;
right: 250px; right: 30px;
height: 18px; height: 18px;
width: 1px; width: 1px;
background-color: var(--gray); background-color: var(--gray);
@ -43,7 +44,7 @@ section {
.icon-clear { .icon-clear {
position: absolute; position: absolute;
top: 7px; top: 7px;
right: 225px; right: 10px;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
filter: invert(60%) sepia(58%) saturate(1629%) hue-rotate(165deg); filter: invert(60%) sepia(58%) saturate(1629%) hue-rotate(165deg);
@ -56,13 +57,14 @@ section {
.icon-search { .icon-search {
position: absolute; position: absolute;
top: 4px; top: 4px;
right: 223px; right: 8px;
filter: invert(41%) sepia(8%) saturate(762%) hue-rotate(176deg) filter: invert(41%) sepia(8%) saturate(762%) hue-rotate(176deg)
brightness(94%) contrast(86%); brightness(94%) contrast(86%);
width: 25px; width: 25px;
height: 25px; height: 25px;
} }
} }
}
d-none { d-none {
display: none; display: none;
@ -82,7 +84,7 @@ d-none {
justify-content: space-around; justify-content: space-around;
align-items: center; align-items: center;
height: 32px; height: 32px;
width: 175px; width: fit-content;
padding: 8px 8px 8px 16px; padding: 8px 8px 8px 16px;
border-radius: 10px; border-radius: 10px;
border: 0; border: 0;
@ -137,6 +139,7 @@ d-none {
.column { .column {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 270px;
padding-right: 32px; padding-right: 32px;
padding-top: 6px; padding-top: 6px;
&:first-child { &:first-child {
@ -148,30 +151,37 @@ d-none {
@media screen and (max-width: 1100px) { @media screen and (max-width: 1100px) {
.search { .search {
.search-inner {
input { input {
width: 220px; width: 220px;
} }
} }
} }
}
@media screen and (max-width: 1020px) { @media screen and (max-width: 1020px) {
.search { .search {
.search-inner {
input { input {
width: 150px; width: 150px;
} }
} }
}
.title { .title {
font-size: 50px; font-size: 50px;
} }
} }
@media screen and (max-width: 897px) { @media screen and (max-width: 910px) {
.search { .search {
.search-inner {
input { input {
width: 220px; width: 280px;
} }
} }
}
.status { .status {
justify-content: center; justify-content: center;
} }
@ -188,18 +198,12 @@ d-none {
} }
.search { .search {
padding-right: 0; width: 100%;
.search-inner {
width: 100%;
input { input {
width: calc(100vw - 113px); width: calc(100% - 34px);
} }
.line {
right: 35px;
}
.icon-clear {
right: 12px;
}
.icon-search {
right: 10px;
} }
} }
@ -243,10 +247,4 @@ d-none {
.details { .details {
width: calc(100vw - 55px); width: calc(100vw - 55px);
} }
.search {
input {
width: calc(100vw - 80px);
}
}
} }

View file

@ -3,7 +3,7 @@
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
max-width: 264px; max-width: 268px;
height: 48px; height: 48px;
border-radius: 10px; border-radius: 10px;
border: 1px dashed var(--gray); border: 1px dashed var(--gray);

View file

@ -11,7 +11,7 @@
src="./../../../../../assets/img/sidebar/summary.svg" src="./../../../../../assets/img/sidebar/summary.svg"
alt="summary" alt="summary"
/> />
<p>Summary</p> <p>{{ "sidebar.summary" | translate }}y</p>
</div> </div>
<div <div
class="nav-links" class="nav-links"
@ -21,7 +21,7 @@
}" }"
> >
<img src="./../../../../../assets/img/sidebar/board.svg" alt="board" /> <img src="./../../../../../assets/img/sidebar/board.svg" alt="board" />
<p>Board</p> <p>{{ "sidebar.board" | translate }}</p>
</div> </div>
<div <div
class="nav-links" class="nav-links"
@ -34,7 +34,7 @@
src="./../../../../../assets/img/sidebar/add-task.svg" src="./../../../../../assets/img/sidebar/add-task.svg"
alt="addtask" alt="addtask"
/> />
<p>Add Tasks</p> <p>{{ "sidebar.addTask" | translate }}</p>
</div> </div>
<div <div
class="nav-links" class="nav-links"
@ -47,7 +47,7 @@
src="./../../../../../assets/img/sidebar/contacts.svg" src="./../../../../../assets/img/sidebar/contacts.svg"
alt="contacts" alt="contacts"
/> />
<p>Contacts</p> <p>{{ "sidebar.contacts" | translate }}</p>
</div> </div>
</nav> </nav>
</section> </section>

View file

@ -1,11 +1,12 @@
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { Component } from '@angular/core'; import { Component } from '@angular/core';
import { NavigationEnd, Router, RouterModule } from '@angular/router'; import { NavigationEnd, Router, RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
@Component({ @Component({
selector: 'app-sidebar-mobile', selector: 'app-sidebar-mobile',
standalone: true, standalone: true,
imports: [RouterModule, CommonModule], imports: [RouterModule, CommonModule, TranslateModule],
templateUrl: './sidebar-mobile.component.html', templateUrl: './sidebar-mobile.component.html',
styleUrl: './sidebar-mobile.component.scss', styleUrl: './sidebar-mobile.component.scss',
}) })

View file

@ -7,52 +7,60 @@
class="nav-links-inner" class="nav-links-inner"
routerLink="summary" routerLink="summary"
[ngClass]="{ [ngClass]="{
active: currentPath == 'summary' active: currentPath == 'summary',
'switch-language': languageService.currentLang == 'de'
}" }"
> >
<img src="./assets/img/sidebar/summary.svg" alt="sumary" /><span <img src="./assets/img/sidebar/summary.svg" alt="sumary" /><span>{{
>Summary</span "sidebar.summary" | translate
> }}</span>
</div> </div>
<div <div
id="navLinkAddTask" id="navLinkAddTask"
class="nav-links-inner" class="nav-links-inner"
routerLink="add-task" routerLink="add-task"
[ngClass]="{ [ngClass]="{
active: currentPath == 'add-task' active: currentPath == 'add-task',
'switch-language': languageService.currentLang == 'de'
}" }"
> >
<img src="./assets/img/sidebar/add-task.svg" alt="addtask" /><span <img src="./assets/img/sidebar/add-task.svg" alt="addtask" /><span>{{
>Add Task</span "sidebar.addTask" | translate
> }}</span>
</div> </div>
<div <div
id="navLinkBoard" id="navLinkBoard"
class="nav-links-inner" class="nav-links-inner"
routerLink="board" routerLink="board"
[ngClass]="{ [ngClass]="{
active: currentPath == 'board' active: currentPath == 'board',
'switch-language': languageService.currentLang == 'de'
}" }"
> >
<img src="./assets/img/sidebar/board.svg" alt="board" /><span>Board</span> <img src="./assets/img/sidebar/board.svg" alt="board" /><span>{{
"sidebar.board" | translate
}}</span>
</div> </div>
<div <div
id="navLinkContacts" id="navLinkContacts"
class="nav-links-inner" class="nav-links-inner"
routerLink="contacts" routerLink="contacts"
[ngClass]="{ [ngClass]="{
active: currentPath == 'contacts' active: currentPath == 'contacts',
'switch-language': languageService.currentLang == 'de'
}" }"
> >
<img src="./assets/img/sidebar/contacts.svg" alt="contacts" /><span <img src="./assets/img/sidebar/contacts.svg" alt="contacts" /><span>{{
>Contacts</span "sidebar.contacts" | translate
> }}</span>
</div> </div>
</nav> </nav>
<div class="reference"> <div class="reference">
<div routerLink="privacy-policy">Privacy Policy</div> <div routerLink="privacy-policy">
<div routerLink="imprint">Legal Notice</div> {{ "sidebar.privacyPolicy" | translate }}
<div onclick="logout()">Log out</div> </div>
<div routerLink="imprint">{{ "sidebar.legalNotice" | translate }}</div>
<div onclick="logout()">{{ "sidebar.logout" | translate }}</div>
</div> </div>
</section> </section>

View file

@ -16,15 +16,16 @@ section {
nav { nav {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
width: 232px;
} }
.nav-links-inner { .nav-links-inner {
display: flex; display: flex;
justify-content: left; justify-content: left;
align-items: center; align-items: center;
padding: 4px 56px; padding: 4px 0;
padding-left: 56px;
height: 46px; height: 46px;
width: 120px;
cursor: pointer; cursor: pointer;
img { img {
width: 30px; width: 30px;
@ -32,10 +33,8 @@ nav {
padding-right: 8px; padding-right: 8px;
} }
span { span {
display: flex; text-align: center;
align-items: center;
font-size: 16px; font-size: 16px;
width: 100%;
color: var(--light-gray); color: var(--light-gray);
} }
&:hover { &:hover {
@ -50,13 +49,17 @@ nav {
background-color: var(--very-dark-blue); background-color: var(--very-dark-blue);
} }
.switch-language {
padding-left: 43px;
}
.reference { .reference {
display: flex; display: flex;
align-items: center; align-items: center;
flex-direction: column; flex-direction: column;
margin-bottom: 30px; margin-bottom: 30px;
div { div {
width: 105px; width: 216px;
padding: 8px; padding: 8px;
display: flex; display: flex;
text-align: center; text-align: center;

View file

@ -1,18 +1,23 @@
import { CommonModule } from '@angular/common'; import { CommonModule } from '@angular/common';
import { Component } from '@angular/core'; import { Component, OnInit } from '@angular/core';
import { NavigationEnd, Router, RouterModule } from '@angular/router'; import { NavigationEnd, Router, RouterModule } from '@angular/router';
import { TranslateModule } from '@ngx-translate/core';
import { LanguageService } from '../../../services/language.service';
@Component({ @Component({
selector: 'app-sidebar', selector: 'app-sidebar',
standalone: true, standalone: true,
imports: [RouterModule, CommonModule], imports: [RouterModule, CommonModule, TranslateModule],
templateUrl: './sidebar.component.html', templateUrl: './sidebar.component.html',
styleUrl: './sidebar.component.scss', styleUrl: './sidebar.component.scss',
}) })
export class SidebarComponent { export class SidebarComponent implements OnInit {
currentPath: string = ''; currentPath: string = '';
constructor(private router: Router) {} constructor(
private router: Router,
public languageService: LanguageService
) {}
ngOnInit(): void { ngOnInit(): void {
this.getCurrentPath(); this.getCurrentPath();

View file

@ -9,6 +9,15 @@
"english": "Englisch", "english": "Englisch",
"german": "Deutsch" "german": "Deutsch"
}, },
"sidebar": {
"summary": "Übersicht",
"addTask": "Neue Aufgabe",
"board": "Brett",
"contacts": "Kontakte",
"privacyPolicy": "Datenschutzerklärung",
"legalNotice": "Rechtlicher Hinweis",
"logout": "Abmelden"
},
"contact-dialog-form": { "contact-dialog-form": {
"btn-delete": "Löschen", "btn-delete": "Löschen",
"btn-save": "Sichern", "btn-save": "Sichern",
@ -45,7 +54,7 @@
"inProgress": "In Bearbeitung", "inProgress": "In Bearbeitung",
"awaitFeedback": "Warte auf Rückmeldung", "awaitFeedback": "Warte auf Rückmeldung",
"done": "Erledigt", "done": "Erledigt",
"addTask": "Hinzufügen", "addTask": "Neue Aufgabe",
"findTask": "Aufgabe suchen", "findTask": "Aufgabe suchen",
"noTasks": "Keine Aufgaben" "noTasks": "Keine Aufgaben"
}, },

View file

@ -5,10 +5,19 @@
"navbar": { "navbar": {
"privacyPolicy": "Privacy policy", "privacyPolicy": "Privacy policy",
"legalNotice": "Legal notice", "legalNotice": "Legal notice",
"logout": "Abmelden", "logout": "Log out",
"english": "English", "english": "English",
"german": "German" "german": "German"
}, },
"sidebar": {
"summary": "Summary",
"addTask": "Add Task",
"board": "Board",
"contacts": "Contacts",
"privacyPolicy": "Privacy policy",
"legalNotice": "Legal notice",
"logout": "Log out"
},
"contact-dialog-form": { "contact-dialog-form": {
"btn-delete": "Delete", "btn-delete": "Delete",
"btn-save": "Save", "btn-save": "Save",