[CSS] 플렉서블 박스 간단 사용법
CSS 플렉서블 박스에 대한 간단 사용법 입니다.
기본 속성
display : flex / inline-flex
- flex: 박스를 블록 수준의 플렉서블 박스로 작동하게 함
- inline-flex: 박스를 인라인 수준의 플렉서블 박스로 작동하게 함
아이템의 배치 방향 설정하기
flex-direction : row / row-reverse / column / column-reverse
- row : 기본 설정 값. 박스를 왼쪽에서 오른쪽으로 배치. 주축은 가로 / 교차축은 세로
- row-reverse : 박스를 오른쪽에서 왼쪽으로 배치
- column : 박스를 위에서 아래로 배치
- column-reverse : 박스를 아래에서 위쪽으로 배치
아이템을 여러 줄로 배치하기
flex-wrap : nowarp / wrap / wrap-reverse
- nowrap : 기본 설정 값. 박스를 한줄로 배치
- warp : 박스를 여러 줄로 배치
- wrap-reverse : 박스를 여러 줄로 배치하는데 순서는 wrap 의 반대 (주축이 가로인 경우 아래에서 위로, 주축이 세로인 경우 오른쪽에서 왼쪽으로 배치)
배치 방향과 여러 줄 배치 설정을 같이 하기
flex-flow : [flex-direction] [flex-wrap]
주축 방향의 아이템 배치 / 정렬
justify-content : flex-start / flex-end / center / space-between / space-around
- flex-start : 기본 설정 값. 박스틀을 주축의 시작점부터 쌓아서 배치
- flex-end : 박스들을 쌓아서 주축의 끝점으로 배치
- center : 박스들을 쌓아서 주축의 중앙에 배치
- space-between : 박스들 사이에 공백을 넣어서 배치
- space-around : 박스들 사이와 시작, 끝에 공백을 넣고 배치
교차축 방향의 아이템 배치 / 정렬
align-items : stretch / flex-start / flex-end / center / baseline
- stretch : 기본 설정 값. 박스를 교차축 방향으로 늘려서 배치
- flex-start : 박스를 교차축 시작점 기준으로 배치
- flex-end : 박스를 교차축 끝점 기준으로 배치
- center : 박스를 교차축의 중앙에 배치
- baseline : 박스들을 교차축의 시작점에 배치되는 자식 박스의 글자 베이스라인에 맞춰서 배치
- auto : 부모의 align-items 속성을 상속
- flex-grow : 여백이 있는 경우 아이템의 크기를 비율대로 늘려주는 속성
- flex-shrink : 아이템의 크기가 지정한 박스 크기 보다 큰 경우 줄여주는 속성
- flex-basis : 아이템의 기본 크기를 설정하기 위한 속성
[PHP] Modern PHP 요약 4
PHP 모범 사례 1
http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-225-0
입력값의 위험을 제거하고 데이터의 유효성을 검사하고 출력을 예외 처리하라!
- 입력값 위험 제거
-- 입력 데이터가 애플리케이션 저장소 계층 (DB, CacheDB 등) 에 도달하기 전에 위험을 제거하는 것이 중요
-- HTML
htmlentities() 함수나 HTML purifier 라이브러리를 이용
-- SQL
준비된 PDO 문을 사용하여 쿼리 인젝션 공격에 대비한다.
-- 사용자 정보
filter_var(), filter_input() 함수를 이용하여 필터링 한다.
- 유효성 검사
-- filter_var() 함수를 이용하여 유효성 검사를 통해 잠재적인 DB 오류를 방지한다.
- 출력 예외 처리
-- 애플리케이션 사용자에 의해 악의적인 코드가 표시되거나 부주의하게 실행되는 것을 막아준다.
htmlentities() 사용, ENT_QUOTES 를 이용해서 따옴표 처리, 적절한 문자 인코딩을 명시 (보통 UTF-8)
[JAVA][CLASS] GmailSMTP.java - Gmail SMTP 를 이용하여 메일 보내기
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class GmailSMTP
{
public static void sendMail(String account, String auth, String to, String subject, String msg, boolean isSSL, boolean isHtml)
{
final String username = account;
final String password = auth;
String mailFrom = username;
String mailTo = to;
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
if (isSSL)
{
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.port", "465");
}
else
{
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.port", "587");
}
Session session = Session.getInstance(props, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(username, password);
}
});
try
{
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(mailFrom));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailTo));
message.setSubject(subject);
if (isHtml)
message.setContent(msg, "text/html");
else
message.setText(msg);
Transport.send(message);
}
catch (MessagingException e)
{
throw new RuntimeException(e);
}
}
}