2018-02-17 제주 날씨 맑음
서부두. 마트 온 김에

Posted by 홍반장水 홍반장水
육아전쟁 시작되어 명절은 이미 다른나라얘기.

Posted by 홍반장水 홍반장水

[번역] 챗봇 제작 기술 선택을 위한 최상의 안내서 https://brunch.co.kr/@hrcloser/1
Posted by 홍반장水 홍반장水
TAG 챗봇
제주, 이제 설이구만

Posted by 홍반장水 홍반장水
TAG 제주
명절인가보다.아침방송에 진성 나옴.

이 장소를 Daum지도에서 확인해보세요.
제주특별자치도 제주시 이도2동
도움말 Daum 지도
Posted by 홍반장水 홍반장水
남들이 당신에게 요구하는 기대치보다 더 높은 기준을
자신에게 적용하라.
자신에게 절대 변명하지 말고, 동정하지 마라.
자신에게는 혹독한 주인이 되고, 남들에게는 관대한 사람이 되어라.
- 헨리 워드 비처

채근담에 ‘대인춘풍 지기추상(待人春風 持己秋霜)’, 즉
‘남을 대할 때는 봄바람처럼, 자신을 대할 때는 가을 서리처럼 하라’는
가르침이 나옵니다. 공자도
‘군자는 제 잘못을 생각하고 소인은 남을 탓 한다’고 했습니다.
나에겐 엄격하고 타인에게 관대할 때 자연스레 리더십이 따라옵니다.

Posted by 홍반장水 홍반장水
사랑을 먹고 자라야 아이는 
이 험한 세상을 헤쳐 나아갈 힘을 얻는다. 
그 사랑을 바탕으로 아이는 자기 자신에 대한 
사랑과 자아존중심을 길러간다. 나아가 타인을 
배려하고 사랑하고 제대로 된 인간관계를 맺는 
능력을 키우게 된다. 그리고 이것이 바로 
회복탄력성의 근본이다. 

- 김주환의《회복탄력성》중에서 -

* 살아가면서
가장 힘든 일의 하나가 타인과의 관계입니다.
사랑과 미움, 협력과 갈등이 되풀이 반복되면서 
상처도 입고 자존감도 많이 흔들립니다.
이때 일으켜 세우는 힘은 어린 시절
그가 받고 자란 사랑입니다.
회복도 빠릅니다. 


'생활의 발견 > 아침편지' 카테고리의 다른 글

사랑을 먹고 자란 아이  (0) 2018.02.14
기억의 뒷마당  (0) 2018.02.13
무자비한 태도와 행동  (0) 2018.02.12
스미다  (0) 2018.02.10
새로운 꿈과 도전  (0) 2018.02.09
명상의 습관화  (0) 2018.02.08
Posted by 홍반장水 홍반장水
오늘 하루종일 제주 맑음

이 장소를 Daum지도에서 확인해보세요.
제주특별자치도 제주시 이도2동
도움말 Daum 지도
Posted by 홍반장水 홍반장水
Customizing Ionic Apps for Web & Mobile


Toggle navigation

FrameworkProductsShowcaseBlogDocsSupport Getting StartedCommunity ForumCustomer SupportTrusted PartnersEcosystem MarketJobsShopCreatorTwitterSlackGitHubLog inSign up

Customizing Ionic Apps for Web & Mobile


This is a guest post from Simon Grimm, speaker and educator at Ionic Academy. Simon writes about Ionic frequently on his blog Devdactic.

With the development of Ionic apps comes the promise that your code will run on various platforms and screen sizes once it’s ready. While this can work and look fine on your targeted devices out of the box, it might not at first for everyone.

In this post, we’ll take a look at 4 areas to keep an eye on – especially if you plan to ship your Ionic app both as a website (or perhaps PWA?) and also as a native mobile app (perhaps even on phone and tablet devices).

Everything we need is already built into Ionic, but sometimes it’s easy to forget about all the awesomeness. So let’s get started with a tiny base for our examples!

App Starting Template Setup

For this article run the command below to start a new Ionic app with the side menu template:

ionic start devdacticResponsive sideMenu

It’s a super basic app with just 2 pages and a side menu (otherwise the name would be kinda bad) but we also need to make HTTP calls, therefore we use the new HttpClient which is available since Angular 5 and Ionic 3.9.0.

Simply change your app/app.module.ts to:

import { BrowserModule } from '@angular/platform-browser'; import { ErrorHandler, NgModule } from '@angular/core'; import { IonicApp, IonicErrorHandler, IonicModule } from 'ionic-angular'; import { MyApp } from './app.component'; import { HomePage } from '../pages/home/home'; import { ListPage } from '../pages/list/list'; import { StatusBar } from '@ionic-native/status-bar'; import { SplashScreen } from '@ionic-native/splash-screen'; import { HttpClientModule } from '@angular/common/http'; @NgModule({ declarations: [ MyApp, HomePage, ListPage ], imports: [ BrowserModule, IonicModule.forRoot(MyApp), HttpClientModule ], bootstrap: [IonicApp], entryComponents: [ MyApp, HomePage, ListPage ], providers: [ StatusBar, SplashScreen, {provide: ErrorHandler, useClass: IonicErrorHandler} ] }) export class AppModule {}

That’s all we’ll need for our examples, so now let’s dive into our areas.

1. Responsive Grid Layout

Most Ionic components already adapt to screen changes and look good across various sizes. However, having something like a list item full size or an Ionic Card displayed full width on my large iMac screen kills my eyes. 

If you need your app to look good on a small device and in a desktop web browser, you’ll need to make it as responsive as possible. And what’s better then using the Ionic Grid layout system?

But first we need some data we can display inside a list, so let’s add a simple HTTP call to your pages/home/home.ts like this:

import { Component } from '@angular/core'; import { NavController } from 'ionic-angular'; import { Observable } from 'rxjs/Observable'; import { HttpClient } from '@angular/common/http'; import "rxjs/add/operator/map"; @Component({ selector: 'page-home', templateUrl: 'home.html' }) export class HomePage { users: Observable<any>; constructor(public navCtrl: NavController, private httpClient: HttpClient, private plt: Platform, private alertCtrl: AlertController) { this.users = this.httpClient.get('https://randomuser.me/api/?results=20') .map(res => res['results']) } }

Now we have an array of users from the Randomuser API which we can display as cards. You could make this as simple iteration without any further testing, but if you’re serious about your design (which, of course you are!), you’ll want to make sure to test different sizes and breakpoints.

A breakpoint is a predefined value at which your design snaps from one category to the next. If your screen is smaller than 576px, you fall into the smallest category which is xs. However, at 577px your design will get the sm category applied, so you must prepare your design to also look good there, and at later breakpoints as well.

With Ionic, we can use the row and column system plus the breakpoints to build interfaces that look great across different platforms and adapt to display the best and most intuitive interface to the user.

Let’s take our example and add this code to our pages/home/home.html:

<ion-header> <ion-navbar> <button ion-button menuToggle> <ion-icon name="menu"></ion-icon> </button> <ion-title>Home</ion-title> </ion-navbar> </ion-header> <ion-content> <ion-grid> <ion-row> <ion-col *ngFor="let user of users | async" col-12 col-xl-2 col-lg-3 col-md-4> <ion-card> <ion-item> <ion-avatar item-start> <img [src]="user.picture.medium"> </ion-avatar> <h2 text-capitalize>{{ user.name?.first }} {{ user.name?.last }}</h2> </ion-item> <ion-card-content> Bacon ipsum dolor amet salami prosciutto ham hock, strip steak buffalo ribeye pork chop. Beef ribs tenderloin tail shoulder. Spare ribs ham shoulder brisket rump hamburger. Pork belly kevin shoulder prosciutto ribeye pork chop chicken strip steak pig. </ion-card-content> </ion-card> </ion-col> </ion-row> </ion-grid> </ion-content>

One Ionic row offers 12 units space for columns, so each column can take an amount of those 12. If your row takes 12 units, it means the row is already full and the next column will be displayed in the following row.

The syntax for the column isn’t immediately obvious, so let’s dive deeper into what it actually means:

col-12: If no other rules match, the column will take all 12 units (greedy column!)col-md-4: At a minimum width of 768px, each column will only use 4 units. This means, a row can now handle 3 columnscol-lg-3: As the screen gets bigger than 992px, a column only needs 3 units which means the row how holds 4 columnscol-xl-2: On the largest screens (1200px+), a column only needs 2 units and a row will display 6 columns

In our example, a column always holds a card, so the design ranges from seeing only 1 card to 6 cards maximum (seen below).

Using a decent flexible layout is definitely mandatory if your app is going to run on multiple platforms and screen sizes. If you don’t invest time into doing this, your app might scare off potential users because it just looks odd.

There’s a lot more to the Grid like setting your own breakpoints, reordering columns, and more so go check it out!

2. CSS Media Queries

While we can’t really accredit this one directly to Ionic, we are still lucky that Ionic bets strongly on the Web and we can thus take advantage of languages like CSS, which most of us have all learned years ago.

Just like the grid layout, we can make use of breakpoints here as well by using @media and different sizes to change part of our UI.

In a recent app, we needed an ion-fabbutton at the top right corner on the web version as it was too hard to spot when it was at the far bottom right corner. However, on a mobile version of your app users are already familiar with having the button floating above lists at the bottom right.

This means the element needs exist in completely different places depending on screen size (and this is a simple element).

One way to achieve this is by having the element there twice, but only displaying it when the media query of your CSS matches. To do this, add the Fab button to your your pages/home/home.html after the list we already have:

<ion-fab right bottom class="web-fab"> <button ion-fab icon-only color="primary" (click)="checkPlatform()"> <ion-icon name="help"></ion-icon> </button> </ion-fab> <ion-fab right top edge class="mobile-fab"> <button ion-fab icon-only color="primary" (click)="checkPlatform()"> <ion-icon name="help"></ion-icon> </button> </ion-fab>

If you want to make only one button visible, you could use the follow CSS inside your pages/home/home.scss:

page-home { @media (max-width: 576px) { ion-card-content { font-size: 2rem !important; } } @media (max-width: 820px) { .mobile-fab { display: none; } } @media (min-width: 820px) { .web-fab {

. . .
Posted by 홍반장水 홍반장水
TAG App, ionic, Mobile
제주 맑음

이 장소를 Daum지도에서 확인해보세요.
제주특별자치도 제주시 이도2동
도움말 Daum 지도
Posted by 홍반장水 홍반장水