πGo to GitHub by clicking the image above!π
What is this?
Neomorphism(neumorphism) Design Framework Open Source
Tech Stack
Organization
neomo/
βββ css/
β βββ components/
β β βββ alert.css
β β βββ badge.css
β β βββ breadcrumb.css
β β βββ button.css
β β βββ card.css
β β βββ dropdown.css
β β βββ icon.css
β β βββ modal.css
β β βββ navbar.css
β β βββ navigation.css
β β βββ pagination.css
β β βββ progressbar.css
β β βββ select.css
β β βββ spinners.css
β β βββ tab.css
β β βββ toast.css
β β βββ tooltips.css
β βββ content/
β β βββ table.css
β βββ forms/
β β βββ checkbox.css
β β βββ file.css
β β βββ floatinglabel.css
β β βββ input.css
β β βββ radio.css
β β βββ range.css
β β βββ switches.css
β βββ helpers/
β β βββ coloredLinks.css
β β βββ typography.css
β βββ layout/
β β βββ columns.css
β β βββ container.css
β βββ color.css
β βββ neomo.css
βββ dist/
β βββ neomo.min.css
β βββ neomo.min.js
βββ js/
βββ neomo.js
1. button.css
κ°μ΄λ° μ λ ¬
justify-content: center; //κ°λ‘μΆμ κΈ°μ€μΌλ‘ μ’μ°μ λν μ λ ¬
align-items: center; //μΈλ‘μΆμ κΈ°μ€μΌλ‘ μ’μ°μ λν μ λ ¬
box-shadow
.button:hover {
outline: 0;
cursor: pointer;
box-shadow: inset 3px 3px 5px #b8b9be, inset -3px -3px 5px #fff !important;
}
- inset λ€μ μ€λ 첫 λ²μ§Έ μμ: offset-x, μν 거리λ₯Ό μλ―Ένλ©° μμ κ°μ κ·Έλ¦Όμλ₯Ό μμμ μΌμͺ½μ νμν¨
- inset λ€μ μ€λ λ λ²μ§Έ μμ: offset-y, μμ§ κ±°λ¦¬λ₯Ό μλ―Ένλ©° μμ κ°μ κ·Έλ¦Όμλ₯Ό μμμ μμͺ½μ νμν¨
- inset λ€μ μ€λ μΈ λ²μ§Έ μμ: blur-radius, κ°μ΄ ν΄μλ‘ κ·Έλ¦Όμ ν
λλ¦¬κ° νλ €μ§κ³ ν¬κΈ°κ° λ 컀μ§κ³ μμ΄ λ λ°μμ§
λ²νΌ ν¬κΈ° μ€μ
button.normal {
width: 5rem;
height: 2.7rem;
}
- μ λμ μΈ κ°: px
- μλμ μΈ κ°: rem, em
- rem: κΈ°μ€μ΄ λλ κ°μ μ΅μμ μμμ font-size (e.g. html νκ·Έ)
- em: κΈ°μ€μ΄ λλ κ°μ νμ¬ μ€νμΌ μ§μ μμμ font-size (e.g. div νκ·Έ)
2. spinners.css
animation
.loader.point-purple {
border-bottom: 3px solid var(--purple);
border-radius: 50%;
width: 1.5em;
height: 1.5em;
animation: spin 2s linear infinite;
}
@keyframes spin {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}
- 0% λμ From μ¬μ© κ°λ₯
- 100% λμ To μ¬μ© κ°λ₯
- animation-timing-function: linear -> μ λλ©μ΄μ
ν¨κ³Όκ° μ²μλΆν° λκΉμ§ μΌμ ν μλλ‘ μ§ν
- animation-iteration-count: infinite
3. tooltips.css
display
.tooltip {
position: relative;
display: inline-block;
}
- inline: μ ν μ€λ°κΏ μμ΄ ν μ€μ λ€λ₯Έ μ리먼νΈλ€κ³Ό λλν λ°°μΉ
- block: μ ν μ€λ°κΏμ΄ λ€μ΄κ° νΌμ ν μ€ μ°¨μ§
- inline-block: inline μ리먼νΈμ²λΌ λλν λ°°μΉλμ§λ§, width & height & margin & padding μμ± μ§μ κ°λ₯
position
.tooltip {
position: relative;
display: inline-block;
}
.tooltip .tooltip-content {
visibility: hidden;
padding: 7px;
width: fit-content;
position: absolute;
z-index: 100;
}
- static: position μμ±μ λΆμ¬νμ§ μμμ λ κ°μ§λ λν΄νΈ κ°
- relative: νμ¬ μμΉμμ μλμ μΈ offset μμ±μ μ€ μ μμ
- absolute: λΆλͺ¨ μ€μ staticμ΄ μλ μμμ μμΉλ₯Ό κΈ°μ€μΌλ‘ μλμ μΈ offset μμ±μ μ€ μ μμ(νμ¬ μμΉκ° λ³νλ κ²μ μλ!)
translate
.tooltip .tooltip-content.bottom {
transform: translateX(-50%);
top: 115%;
left: 50%;
}
- νμ¬ μμΉλ₯Ό κΈ°μ€μΌλ‘ μ΄λ
- translateX(): κ°λ‘λ‘ μ΄λ(μμ κ°μ μ€λ₯Έμͺ½/μμ κ°μ μΌμͺ½)
- translateY(): μΈλ‘λ‘ μ΄λ(μμ κ°μ μλμͺ½/μμ κ°μ μμͺ½)
- translate(X, Y): κ°λ‘μΈλ‘ κ°μΌλ‘ μ΄λ
4. input.css
> κ²°ν©μ
.input-group > input {
border: none;
}
- 첫 λ²μ§Έ μμμ λ°λ‘ μλ μμμΈ λ
Έλλ₯Ό μ ν
flex
.input-group {
display: flex;
width: fit-content;
border-radius: 10px;
box-shadow: 3px 3px 7px #ababab, -3px -3px 7px #ffffff;
}
- flex container
- container μμ μλ μμ΄ν
λ€μ κ°λ‘ λ°©ν₯μΌλ‘ λ°°μΉλκ³ , μμ μ΄ κ°μ§ λ΄μ©λ¬Όμ widthλ§νΌλ§ μ°¨μ§
- flex-directionμ row, column, row-reverse, column-reverseκ° μμ
5. switches.css
+ κ²°ν©μ
input:checked + .switch {
background: white;
box-shadow: inset 3px 3px 5px #b8b9be, inset -3px -3px 5px #fff;
}
- 첫 λ²μ§Έ μμμ λ°λ‘ λ€μ μμΉνλ©΄μ κ°μ λΆλͺ¨λ₯Ό 곡μ νλ λ λ²μ§Έ μ ν
6. CSS Selectors
μ ν μ νμ
- μ£Όμ΄μ§ λ
Έλ μ΄λ¦(input)μ κ°μ§ λͺ¨λ μμλ₯Ό μ ν
ν΄λμ€ μ νμ
- μ£Όμ΄μ§ ν΄λμ€ νΉμ±(index)μ κ°μ§ λͺ¨λ μμλ₯Ό μ ν
ID μ νμ
- id νΉμ±(toc)μ λ°λΌ μμλ₯Ό μ ν
- λ¬Έμ λ΄μλ μ£Όμ΄μ§ idλ₯Ό κ°μ§ μμκ° νλλ§ μ‘΄μ¬