How do I divide my ionic template in half? - css

I'm using atm an ion-grid, with ion-cols, works fine for columns, but the problem is a have a table that I would like to fill 50% of the view. Tried setting it like this but doesn't work.
ion-grid{
height: 100%;
}
ion-row.grid1{
height: 50%;
}
This is the my ionic page.html where I want to divide by 2 sections.
<ion-grid>
<ion-row><ion-col col-12><h3>Tijuca</h3></ion-col></ion-row>
<ion-row>
<ion-col col-4> <ion-item>
<ion-label fixed>Sexo:</ion-label>
<ion-input type="text" value=""></ion-input>
</ion-item>
</ion-col>
<ion-col col-4>
<ion-item>
<ion-label fixed>Data:</ion-label>
<ion-input type="datetime-local"></ion-input>
</ion-item>
</ion-col>
<ion-col col-4>
<ion-item>
<ion-label fixed>Convenio:</ion-label>
<ion-input type="date" value=""></ion-input>
</ion-item>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-12>
<ion-item>
<ion-label>Médico solicitante:</ion-label>
<ion-input type="text" value=""></ion-input>
</ion-item>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-6>
<ion-item>
<ion-label>Tel. do Médico:</ion-label>
<ion-input type="text" value=""></ion-input>
</ion-item>
</ion-col>
<ion-col col-6>
<ion-item>
<ion-label>Especialidade médica:</ion-label>
<ion-input type="text" value=""></ion-input>
</ion-item>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-12>
<ion-item>
<ion-label>HDA:</ion-label>
<ion-input type="text" value=""></ion-input>
</ion-item>
</ion-col>
</ion-row>
<ion-row class="grid1">
<table>
<tbody>
<tr>
<!-- 16x3 table code inside here -->
</tr>
</tbody>
</table>
</ion-row>
</ion-grid>
Any ideas on what I should be looking for?

Related

Align to center two elements in a row in ionic v3

hello I have two ion toggle with their respective labels separated by columns in a row.
It looks like this:
How can I make both are in the center of the screen?
This is my code:
<ion-label class="titleFiltros" text-center>Filtrar por estado</ion-label>
<ion-list>
<ion-row>
<ion-col>
<ion-item no-lines>
<ion-label>Activa</ion-label>
<ion-toggle item-start [(ngModel)]="activa" (ionChange)="change()"></ion-toggle>
</ion-item>
</ion-col>
<ion-col>
<ion-item no-lines>
<ion-label>Anulada</ion-label>
<ion-toggle item-start [(ngModel)]="anulada" (ionChange)="change()"></ion-toggle>
</ion-item>
</ion-col>
</ion-row>
Appreciate your help.
Thanks.
Try this
<ion-label class="titleFiltros" text-center>Filtrar por estado</ion-label>
<ion-list>
<ion-row>
<ion-col class="ion-text-end">
<ion-item lines="none" style="float: right;">
Activa
<ion-toggle></ion-toggle>
</ion-item>
</ion-col>
<ion-col>
<ion-item lines="none">
Anulada
<ion-toggle></ion-toggle>
</ion-item>
</ion-col>
</ion-row>
</ion-list>
I found the solution and it works as I expected
Here I leave the code:
ion-item{
.input-wrapper{
flex:none;
margin-left: auto;
margin-right: auto;
}
ion-toggle{
margin-right:auto!important;
}
}

How to place the block button at the end of the page in ionic 5

Here i am trying to place the the button signin and other button at the end of the page using ionic and i am using the ionic css utilities but i am not sure why it is not changing
i want
here is my code
<ion-content>
<ion-grid size="12" size-sm="8" offset-sm="2" class="ion-text-center">
<ion-row>
<ion-col>
<ion-list>
<ion-item detail>
<ion-icon name="settings-outline">
</ion-icon>
Settings
</ion-item>
</ion-list>
</ion-col>
</ion-row>
<ion-row class="ion-align-self-end">
<ion-col>
<ion-button> Register Button</ion-button>
</ion-col>
</ion-row>
<ion-row class="ion-align-self-end">
<ion-col>
<ion-button expand="block" >Sign Button</ion-button>
</ion-col>
</ion-row>
</ion-grid>
</ion-content>
Try this.
<ion-content>
<ion-grid style="height: 100%; display: grid;" size="12" size-sm="8" offset-sm="2" class="ion-text-center">
<ion-row>
<ion-col>
<ion-list>
<ion-item detail>
<ion-icon name="settings-outline">
</ion-icon>
Settings
</ion-item>
</ion-list>
</ion-col>
</ion-row>
<ion-row class="ion-align-self-end">
<ion-col><ion-button> Register Button</ion-button>
<ion-button expand="block" >Sign Button</ion-button>
</ion-col>
</ion-row>
</ion-grid>
</ion-content>
You can use power of CSS flexbox to achieve that like so:
<ion-content>
<ion-grid size="12" size-sm="8" offset-sm="2" style="display: flex; flex-flow: column; height: 100%">
<ion-row style="flex-grow: 1">
<ion-col>
<ion-list>
<ion-item detail>
<ion-icon name="settings-outline">
</ion-icon>
Settings
</ion-item>
</ion-list>
</ion-col>
</ion-row>
<ion-row class="ion-align-self-center">
<ion-col>
<ion-button> Register Button</ion-button>
</ion-col>
</ion-row>
<ion-row class="ion-align-self-center">
<ion-col>
<ion-button expand="block">Sign Button</ion-button>
</ion-col>
</ion-row>
</ion-grid>
</ion-content>
Basically you make your ion-grid element to display as flexbox in column and set height to occupy 100% of height.
Then you can apply "flex-grow: 1" to an ion-row to make it stretch across all available space. In your case you only need to give that to the first ion-row.
Other options could be playing with display: absolute and bottom: 0 in your CSS.

How to align items with ionic css utilities?

I'm doing a small UI with ionic, and I'm looking about the css utilities(https://ionicframework.com/docs/layout/css-utilities ).
I've this UI:
<ion-item>
<ion-grid >
<ion-row class="ion-align-items-center">
<ion-col size="4" class="ion-text-center">
<ion-avatar ><ion-img [src]="(loggedUser$ | async).avatarUrl"></ion-img></ion-avatar>
</ion-col>
<ion-col size="8" >
<ion-label >
<h2>{{ (loggedUser$ | async).userId }}</h2>
</ion-label>
</ion-col>
</ion-row>
</ion-grid>
</ion-item>
but currently, the ion-avatar is on the left of his ion-col.
Is there a way with those Ionic css utilities to center the ion-avatar in the middle of the column?
You need to add an extra div as shown.
From what I have seen the reason is how ionic framework creates the shadow dom. If you don't explicitly add the div to which to add the CSS util, ionic applies it in the wrong spot.
<ion-item>
<ion-grid >
<ion-row class="ion-align-items-center">
<ion-col size="4">
<div class="ion-text-center">
<ion-avatar ><ion-img [src]="(loggedUser$ | async).avatarUrl"></ion-img></ion-avatar>
</div>
</ion-col>
<ion-col size="8" >
<ion-label>
<h2>{{ (loggedUser$ | async).userId }}</h2>
</ion-label>
</ion-col>
</ion-row>
</ion-grid>
</ion-item>

Create Ionic card List

I am trying to create a contact list on Ionic 5, using angular, but it is not possible to access this style. I'm a beginner at IONIC, can you help me?
How to leave a rendered image at the beginning of the card, with a icon and header and a icon with subheader, as in the image below?
my image:
my code:
<ion-content padding>
<ion-card>
<ion-grid>
<ion-row>
<ion-col>
<img src="https://material.angular.io/assets/img/examples/shiba1.jpg" style="border-radius: 50%; width: 80%; height: 85%">
</ion-col>
<ion-col>
<ion-item>
<h2>Marty McFly</h2>
</ion-item>
<ion-card-content>
<p>Wait a minute. Wait a minute, Doc. Uhhh</p>
</ion-card-content>
</ion-col>
</ion-row>
</ion-grid>
</ion-card>
</ion-content>
Thanks =)
You could just use a list of ion-items. They provide a round avatar to start the item, followed with a label which you can modify to sample your desired outcome.
<ion-content>
<ion-list>
<ion-item *ngFor="your loop here">
<ion-avatar slot="start">
<img src="...">
</ion-avatar>
<ion-label>
<ion-grid>
<ion-row>
<ion-col size="12">
<!-- name -->
</ion-col>
</ion-row>
<ion-row>
<ion-col size="2">
<!-- icon -->
</ion-col>
<ion-col size="10">
<!-- calender -->
</ion-col>
</ion-row>
<ion-row>
<ion-col size="2">
<!-- icon -->
</ion-col>
<ion-col size="10">
<!-- time -->
</ion-col>
</ion-row>
</ion-grid>
</ion-label>
</ion-item>
</ion-list>
</ion-content>

Chrome print aliasing with min-height ion-inputs

I'm using #media print styling to condense a bulky page of ion-inputs to reduce the page count by 15 pages.
Print to pdf (print preview and opening the saved pdf) looks good in Firefox v63,
but in Chrome v70 it produces aliasing or entire line absence when I set min-height, regardless of chrome page margins of None or Default. I have also seen it drop the id, description, subitem name, or the price line if they fall in the page break gap.
Is there a way to prevent Chrome from aliasing or dropping lines around its automatic page wraps/breaks?
--
Code:
#media print {
ion-item, .item-inner, .input-wrapper, ion-input, input {
min-height: 23px !important; // causes line aliasing
height: 24px !important;
max-height: 25px !important;
line-height: 26px !important;
}
}
<ion-card *ngFor="let eachCard of myCards">
<ion-row>
<ion-col col-2>
<ion-item>
<ion-input type="text" [(ngModel)]="eachCard.id"></ion-input>
</ion-item>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-11>
<ion-item>
<ion-input type="text" [(ngModel)]="eachCard.description1"></ion-input>
</ion-item>
<ion-item>
<ion-input type="text" [(ngModel)]="eachCard.description2></ion-input>
</ion-item>
<ion-item>
<ion-input type="text" [(ngModel)]="eachCard.description3"></ion-input>
</ion-item>
</ion-col>
</ion-row>
<div *ngFor="let eachSubitem of eachCard.subitems">
<ion-row>
<ion-col col-1></ion-col>
<ion-col col-5>
<ion-item>
<ion-input type="text" [(ngModel)]="eachSubitem.name"></ion-input>
</ion-item>
</ion-col>
<ion-col col-5>
<ion-item>
<ion-input type="text" [(ngModel)]="eachSubitem.altName"></ion-input>
</ion-item>
</ion-col>
</ion-row>
<ion-row>
<ion-col col-1></ion-col>
<ion-col col-3>
<ion-item>
<ion-input type="number" [(ngModel)]="eachubitem.price"></ion-input>
</ion-item>
</ion-col>
<ion-col col-7>
<ion-item>
<ion-input type="text" [(ngModel)]="eachSubitem.unit"></ion-input>
</ion-item>
</ion-col>
</ion-row>
</div>
</ion-card>
Solved:
ion-item {
display: inline-block !important;
}

Resources