flexbox의 주축(main axis)과 교차축(cross axis)
flexbox의 주축(main axis)과 교차축(cross axis)
CSS 데모: flexbox의 align-self 데모 버튼을 클릭해 보세요!
교차축(cross axis)을 기준으로 '개별 플렉스 아이템'을 어떻게 정렬할지를 지정할 수 있습니다.
<div class="flex-container">
    <div class="item">1</div>
    <div class="item item-self">Self</div>
    <div class="item">3</div>
</div>
.flex-container { /* 플렉스 컨테이너 */
    display: flex;
    height: 150px;
    border: 4px solid silver;
    flex-direction: row; /* 주축(main axis, 기본 축)을 결정 */
    align-items: stretch;
}
.item { /* 플렉스 아이템 */
     border: 4px solid blue;
     background-color: yellow;
}
.item.item-self {
    background-color: yellow;
    align-self: /* value <= 라이브 데모에서 동적으로 구현 */
}
/*
 * 일부 스타일 코드는 가독성을 위해 생략했습니다!
*/
selector {
    align-self: auto | flex-start | flex-end | center | baseline | stretch
}
/* 키워드 값 */
align-self: auto; /* 초깃값 */
align-self: flex-start;
align-self: flex-end;
align-self: center;
align-self: baseline;
align-self: stretch;

/* 글로벌 값 */
align-self: inherit;
align-self: initial;
align-self: revert;
align-self: revert-layer;
align-self: unset;
flexbox의 align-items 속성에 대한 값과 그 효과를 보여주는 그림입니다.
flexbox의 align-items 속성에 대한 값과 그 효과를 보여주는 그림입니다.
align-self 속성은 align-items 값을 개별 플렉스 아이템(자식)에서 재정의합니다.
<div class="chat-container">
    <div class="message"> <!-- 상대방 메시지 (기본 정렬) -->
        안녕하세요! 오늘 작업 어디까지 진행됐나요?
    </div>
    <div class="message my-message">
        방금 CSS 레이아웃 작업 끝냈습니다. 이제 align-self만 적용하면 돼요!
    </div>
    <div class="message"> <!-- 상대방 메시지 (기본 정렬) -->
        오, 좋네요! 채팅창 디자인이 훨씬 깔끔해 보이겠어요.
    </div>
    <div class="message my-message">
        네, 금방 완성해서 보여드릴게요! 🚀
    </div>
</div>
/* 채팅창 전체 박스 */
.chat-container {
    display: flex;
    flex-direction: column; /* 메시지를 위에서 아래로 쌓음 */
    justify-content: flex-start;
    align-items: stretch;
    gap: 12px; /* 메시지 사이 간격 */
    padding: 20px;
    max-width: 300px;
    background-color: #E9E9EB;
    border-radius: 10px;
}

/* 공통 메시지 스타일 */
.message {
    padding: 10px 15px;
    border-radius: 15px;
    font-size: 14px;
    line-height: 1.4;
    max-width: 80%; /* 메시지가 너무 길어지지 않게 제한 */
    background-color: #fff;
    box-shadow: 0 1px 2px rgba(0,0,0,0.1);
    align-self: flex-start; /* 상대방 메시지는 기본적으로 왼쪽 정렬 (flex-start) */
}

/* 내 메시지 (align-self의 핵심 활용) */
.my-message {
    background-color: #007AFF;
    color: #fff;
    border-bottom-right-radius: 2px; 
    align-self: flex-end; /* 부모의 정렬을 무시하고 나만 오른쪽 끝으로! */
}
실제 적용된 모습

caniuse.com에서 더 자세한 정보를 확인해 보세요.