프로그래밍/수업일지 (39)

728x90

 

수업내용 정리 (VSCode - JS)

 

1. 산술/할당 연산자

    <script>
        // 산술 연산자
        console.log(1+2);
        console.log(parseInt(10/3));
        console.log(10%3);

        let a;
        a+=1;
        console.log(a); //NaN: 숫자가 아님

        a=2;
        a+=1;
        console.log(a);

        
        // 비교연산자
        const b=1;  // final int b=1;
        const c=3;  // final int c=3;
        console.log(b<c);

        function isEqual(x,y){
            return x==y;
        }
        console.log(isEqual(1,1));
        console.log(isEqual(1,2));
        console.log(isEqual(1,'1'));


        // 삼항연산자
        const d=10, e=20, f=30;
    </script>

 

 

2. 삼항 연산자

  <script>
    const a= 1<2
    if(a){
      console.log('참')
    }else{
      console.log('거짓')
    }
    console.log(a?'참':'거짓')
  </script>

 

 

3. 조건문

  <script>
    function random() {
      return Math.floor(Math.random() * 10)
    }
    const a = random()
    if (a === 0) {
      console.log('a is 0')
    }else if(a===2){
      console.log('a is 2')
    }else{
      console.log('rest...')
    }
  </script>
  <script>
    function random() {
      return Math.floor(Math.random() * 10)
    }
    const a = random()
    switch(a){
     case 0:
      console.log('a is 0')
      break;
    case 2:
      console.log('a is 2')
      break;
    default:
      console.log('rest...')
    }
  </script>

 

 

4. 반복문

  <script>
    const ulEl=document.querySelector('ul')
    for(let i=0; i<10; i++){
      const li=document.createElement('li')
      li.textContent=`list-${i+1}`
      if((i+1)%2===0){  //짝수번째 클릭시  
        li.addEventListener('click',function(){
        console.log(li.textContent)
      })
      }
      ulEl.appendChild(li)
    }
        // 나중에 추가적으로 배울 것
  </script>

 

 

5. 변수 유효범위

  <script>
    //var: 함수레벨 scope, 의도하지 않는 범위에서 사용될수 있다.메모리누수
    //let, const: 블록레벨 scope
    function scope(){
      //console.log(a)  // let,const: not defined에러, var: undefined출력
      if(true){
        //console.log(a)  // let,const: not defined에러, var: undefined출력
        var a =123
        //console.log(a)   //모두 정상
      }
      console.log(a)  //let,const: not defined에러, var: 123
    }
    scope()
  </script>

 

 

6. 형변환

  <script>
    //형변환
    const a=1
    const b='1'
    console.log(a===b)  //일치 연산자
    console.log(a==b)  //동등 연산자시 형변환 일어남(비권장)
    //참 값
    //true, {}, [], 1,2,'false',-12, '3.14'.....
    //거짓 값(암기)
    //false, '', null, undefined, 0,-0, NaN(Not a Number)
    if('false'){  //false
      console.log(123)
    }
   console.log('NaN: ', 1+undefined)   //NaN: 숫자에 더할수 없는 값
  </script>

 

 

7. 함수

    <script>
        // 컴파일 언어(java, c, c++...) <---> 인터프리터 언어(js, 파이썬)
        // 기명 함수
        function sum(x,y){
            return x+y;
        }
        let a=sum(1,3);
        const b=sum(1.3, 2.3);
        console.log(a, b);
        console.log(a+b);
        console.log(sum(10,20)+sum(2.3,4.4));

        // 익명함수 (함수를 sum2 변수에 저장)
        // 함수도 객체
        const sum2 = function(x,y){
            if(x<2){
                return;
            }
            return x+y;
        };
        console.log(sum2);
        console.log(sum2(1,3)); // undefined 값이 없을때
        console.log(sum2(4,3));
        // let ulEl=document.getElementById('ul'); // 이것도 객체임

        function sum3(){
            console.log(arguments); //내장된 매개변수
            return arguments[0]+arguments[1]+arguments[2]
        }
        console.log(sum3(3,7,3));

        // 함수 오버로딩없음
        function sum4(x,y,z){
            console.log(x,y,z);
        }
        sum4(); //undefined undefined undefined
        sum4(10);   //undefined undefined
        sum4(10,20);    //undefined
        sum4(10,20,30); //10 20 30
        sum4(10,20,30,40);  //10 20 30
    </script>

 

 

8. 화살표 함수

    <script>
        // const double=function(x){return x*2}
        // console.log('double: ',double(7));
        // const dbArrow=(x)=>{return x*2}
        // const dbArrow= x=> {return x*2}
        // const dbArrow= x=> {x*2}
        // const dbArrow= x=> x*2
        // const dbArrow= x=>{console.log(x); return x*2}
        // console.log('dbArrow: ',dbArrow(8));
        // const dbArrow= ()=> [1,2,3]
        // console.log('arr: ', dbArrow(), dbArrow().length);
        //const dbArrow= (x)=> {name: 'cha', age: x} // 함수의 중괄호인지 객체의 중괄호인지 구분을 못함
        //console.log('obj: ', dbArrow());
        let person={name:'kim', age:20} // 객체
        console.log(person.name, person.age);
    </script>

 

 

9. 즉시 실행함수

    <script>
        const a = 7; // 전역변수
        function double(){
        console.log(a*2);
        }
        double(); // 밑에 즉시실행함수가 있으면 꼭 세미콜론(;)을 붙여줘야한다.

        // 즉시실행함수
        // IIFE, Immediately-Invoked Function Expression
        (function(){
        console.log(a*3);
        })(); // 두 덩어리

        (function(){
        console.log(a*4);
        }()); // 한 덩어리 (권장)
        </script>

 

 

10. 함수 호이스팅

    <script>
        // 호이스팅(Hoisting): 위로 끌어올리다.
        // 함수 선언부가 유효범위 최상단으로 끌어올려지는 현상
        // function double(){}
        const a=7;

        function double(){
            console.log(a*2);
        }
        const square=function(){
            console.log(a*2);
        }
        const square2= ()=> console.log(a*a);
        
        // 익명함수는 호이스팅 불가

        double()
        square()
        square2()
    </script>

 

 

11. 변수 호이스팅

  <script>
    //호이스팅(hoisting)이란
//자바스크립트 함수는 실행되기 전에 함수 안에 필요한 변수값들을 모두 모아서 유효 범위의 최상단에 선언한다.
//자바스크립트 Parser가 함수 실행 전 해당 함수를 한 번 훑는다.
//함수 안에 존재하는 변수/함수선언에 대한 정보를 기억하고 있다가 실행시킨다.
//유효 범위: if,for단위 블록{}내에 변수를 선언해도 유효범위는 function단위 블록 {}이다., 

//호이스팅의 대상
//var 변수 선언과 함수선언문에서만 호이스팅이 일어난다. 함수 표현식은 호이스팅 안됨.
//var 변수/함수의 선언만 위로 끌어 올려지며, 할당은 끌어 올려지지 않는다.

//let/const 변수 선언과 함수표현식에서는 호이스팅이 발생하지 않는다.
//java처럼 if, for단위 블록{}내에 변수를 선언하면 해당{}이 유효범위다. 
		
	//지역변수>전역변수 
const pi = 3.14; //전역 상수변수(global v)

fct1();
fct2(3,5);

function fct1() {
    //var a,b; 함수의 상단에 호이스팅
    //console.log('a: ',a)  //var:undefined, let,const:error
    //console.log('b: ',b)  //var:undefined 
    let a = 100,b = 200; //지역변수(local variable)

    if (1) {
        let a = 30,b = 40; //java error, 위의 const와 let을 var로 변경해 보자.
        console.log("1=" + a);
        console.log("1=" + b);
    }
    console.log(a);  //var는 마지막에 선언된 변수가 위의 변수를 덮어버린다.
    console.log(b);  //let,const는 100, 200
    
    console.log('전역변수:' + pi)
}

function fct2(a, b) { //함수정의부
  console.log('fct2 call:', a, b)  
  console.log('gv:' + pi);
    
}
//메소드 오버로딩은 없지만 유연하다.
fct2()   
fct2(10)
fct2(10,20,30)

//함수선언부는 호이스팅 되지 않음
//    const fct=function(){  //익명 함수
//        console.log("함수 출력");
//    };
//    fct();
//    console.log(typeof fct);

function test(show) {
    show();
}
//ES6 화살표함수=> , 자바 람다(lambda) ->

test(() => {
    console.log('function call');
    console.log('second line');
});
// test(function() {
//      console.log('function call');
//      console.log('second line');
// });
  </script>

 

 

12. 타이머 함수

  <script>
    //타이머 함수: JS 전역함수(어디서든 호출가능한 함수)
    //setTimeout(함수, 시간): 일정 시간 후 함수실행
    //setInterval(함수, 시간): 시간 간격바다 함수 실행
    //clearTimeout(): 설정된 Timeout 함수를 종료
    //clearInterval(): 설정된 Interval 함수를 종료
    // setTimeout(function(){
    //   console.log('hello!')
    // }, 3000)
    // const timer=setTimeout(()=>{
    //   console.log('hello!')
    // }, 3000)
    console.log('비동기 처리')

    const timer = setInterval(() => {
      console.log('hello!')
    }, 3000)

    //h1태그를 클릭하면 
    const h1El = document.querySelector('h1')
    h1El.addEventListener('click', () => {
      //clearTimeout(timer) //setTimeout함수가 작동하지 않음
      clearInterval(timer) //setInterval함수가 작동하지 않음
    })
  </script>

 

 

13. 콜백

<script>
//콜백(Callback)
//함수의 인수로 사용되는 함수
//setTimeout(함수, 시간)
// function timeout(){
//   setTimeout(()=>{
//     console.log('hello!')
//   },3000)
// }
// timeout()
// console.log('Done!') //Done먼저 출력후 3초뒤 hello출력
function timeout(cb){
  //아래 익명함수는 setTimeout의 콜백함수임
  setTimeout(()=>{  
    console.log('hello!')
    cb()   
  },3000)
}
//콜백 함수 사용 목적
//1.익명함수가 timeout의 인자로 사용됨
//2.timeout실행시 특정 위치 실행 보장하기 위해
timeout(()=>{    
  console.log('Done!') 
})
</script>

 

 

14. 생성자 함수

  <script>
    //리터럴({},[],"") 방식의 객체 생성
    // const kim={
    //   //필드
    //   //property
    //   firstName: 'kim',
    //   lastName: 'dong',
    //   //method
    //   getFullName: function(){  //=>함수 금지(this가 상위객체를 의미함)
    //     //this: 현재 소속된 객체데이터를 의미
    //     return `${this.firstName} ${this.lastName}`
    //     //return `${kim.firstName} ${kim.lastName}`
    //   }
    // }
    // console.log(kim.getFullName())
    // const lee={
    //   firstName: 'lee',
    //   lastName: 'na',
    //   getFullName: function(){
    //     return `${this.firstName} ${this.lastName}`    
    //   }
    // }
    // console.log(lee.getFullName())
    //생성자 함수를 이용한 객체 생성
    //java의 클래스와 유사(?)
    //new와 사용하는 생성자함수는 대문자로 지정
    function User(first, last) {
      this.firstName = first //this생략 안됨
      this.lastName = last
      //메모리 비효율적(객체마다 함수객체를 생성함)
      // this.getFullName=function(){  
      //   return `${this.firstName} ${this.lastName}`
      // }
    }
    //메모리 효율적
    //함수객체를 user함수의 prototype에 1번만 생성한다.
    User.prototype.getFullName = function () {
      return `${this.firstName} ${this.lastName}`
    }
    //생성자 함수를 통한 kim인스턴스 생성  
    const kim = new User('kim', 'dong')
    const lee = new User('lee', 'na')
    console.log(kim)
    console.log(lee)
    console.log(kim.getFullName())
    console.log(lee.getFullName());

    //javaScript는 prototype(원형)기반 언어임
    const arr = [1, 2, 3];
    console.log(arr)
    //배열객체의 prototype의 includes메소드 확인
    console.log(arr.includes(4)) //false
    console.log(arr.includes(2)) //true
  </script>

 

 

15. this

  <script>
    //this
    //일반 함수는 (호출 위치!)에서 따라 this정의!
    //화살표 함수는 자신이 (선언된 함수 범위!)에서 this정의!
    const kim={
      name: 'kim',
      normal: function(){
        console.log(this.name)
        console.log(this)  //kim객체
      },
      arrow:()=>{  //특정 함수범위에 선언되고 있지 않음
        console.log(this.name)
        console.log(this)  //window객체
      }
    }
    kim.normal()  //kim 
    kim.arrow()   //'' or undefined
    
    const lee={
      name: 'lee',
      normal:kim.normal,
      arrow: kim.arrow
    }
    //호출위치가 여기! 그래서 this는 lee객체 참조함
    lee.normal();
    //선언된 위치(범위)는 그대로임! this는 window객체 참조함
    lee.arrow();

    // 생성자 함수에서 getFullName을 화살표함수로
    // 만들어서 this값을 확인해보자

    const timer={
      name: 'kim',
      timeout: function(){
        //setTimeout의 내부에서 콜백을 호출중이라서 name출력안됨
        //setTimeout(function(){
        //  console.log('t:', this.name)  //window 객체
        //}, 2000)
        //timer객체의 timeout메소드에 선언되었으므로 name출력됨        
        //setTimeout함수에서는 화살표함수를 쓰는것이 좋다.
        setTimeout(()=>{
          console.log('t:', this.name) //timer객체
        }, 2000)
      }
    }
    timer.timeout()
  </script>

 

 

16. ES6 Classes

  <script>
    const hong = {
      name: 'hong',
      //normal: function(){
      //   console.log(this.name)
      // },
      //위 메소드의 간소화 표현
      normal() {
        console.log(this.name)
      },
	  //화살표함수 간소화 안됨
      arrow: () => {
        console.log(this.name)
      }
    }
    hong.normal()
    hong.arrow()

    ////ES6 Classes
    //생성자 함수활용을 class로 간소화 할 수 있음
    //class는 react에서 많이 활용함
    class User {
      constructor(first, last) {
        this.firstName = first //this생략 안됨
        this.lastName = last
      }
      //prototype에 1번만 생성한다.
      getFullName() {
        return `${this.firstName} ${this.lastName}`
      }
    } //end class
    //생성자 함수를 통한 kim인스턴스 생성  
    const kim = new User('kim', 'dong')
    const lee = new User('lee', 'na')
    console.log(kim)
    console.log(lee)
    console.log(kim.getFullName())
    console.log(lee.getFullName());
  </script>

 

 

17. 상속(확장)

  <script>
    //java class와 아주 유사함
	//생성자 및 메소드객체가 prototype에 1번 생성됨
    class Car{
      constructor(gasoline){
        //super()에러
        this.gasoline=gasoline
      }
      showGuageInfo(){
        console.log('gas: ', this.gasoline)
      }
    }
    class HybridCar extends Car{
      constructor(gasoline, electric){
        super(gasoline)
        this.electric=electric
      }
      showGuageInfo(){
      super.showGuageInfo()
        //console.log('gas: ', this.gasoline)  //가능
        console.log('elec: ', this.electric)
      }
    }
    class HybridWaterCar extends HybridCar{
      constructor(gasoline, electric, water){
        super(gasoline,electric)
        this.water=water
      }
      showGuageInfo(){
        super.showGuageInfo()
        //console.log('gas: ', this.gasoline) //가능
        //console.log('elec: ', this.electric) //가능
        console.log('water: ', this.water)
      }
    }
  const car1=new HybridWaterCar(50,1000,30)
  const car2=new HybridCar(40,500)
  console.log(car1)
  car1.showGuageInfo()
  console.log(car2)
  car2.showGuageInfo()
  </script>

 

 

18. 문자

  <script>
    //JS 데이터
    //String: "", '', ``
    //Number:
    //Boolena: true, false
    //underfinde:
    //null:
    //Array: []
    //Object: {}
    //String.prototype.indexOf() 메소드는 String객체 모두 사용할 수 있다.
    let result='Hello world!'.indexOf('world')
    console.log(result)  //첫글자index는 0부터
    result='Hello world!'.indexOf('kim')
    console.log(result)  //검색실패 -1
    
    const str='대한민국 최고'  //문자열 리터럴 객체 
    //const str=new String('대한민국') //문자열 정식 객체
    console.log(str.length) //7
    console.log(str.indexOf('만세') != -1)  //false
    console.log(str.slice(0,3))  //대한민(idx:0~2)
    console.log(str.slice(5,7))  //최고(idx:5~6)
    console.log(str.slice(2, -1))  //민국 최(idx:2~뒤쪽 1문자미만) 
    console.log(str.replace('대한민국','한국' ))  //한국 최고
    console.log(str.replace(' 최고','' ))  //삭제효과, 대한민국
    const email='surecha@nuri.com'
    console.log(email.match(/.+(?=@)/))  //정규표현식:@앞쪽 문자열 찾아줘 
    console.log(email.match(/.+(?=@)/)[0]) 
    const str2='    Hello world  '
    console.log(str2.trim()) //문자열 앞뒤 공백제거 
  </script>

 

 

19. 숫자와 수학

  <script>
    const pi=3.141592
    console.log(pi)

    const str=pi.toFixed(2)  //'3.14'문자열 반환
    console.log(str)
    console.log(typeof str);
    //window객체 전역함수 parseInt, parseFloat(권장)
    const integer = parseInt(str)
    const float = parseFloat(str)
	//number객체 static 함수: parseInt, parseFloat(비권장)
	//const integer=Number.parseInt(str)
    //const float= Number.parseFloat(str)
    console.log(integer)  //3
    console.log(float)    //3.14 
    console.log(typeof integer, typeof float) //number  number
    //Math: 수학관련 객체
    console.log('abs: ', Math.abs(-12))  //12
    console.log('min: ', Math.min(2,8,5,6))  //2
    console.log('max: ', Math.max(2,8,5,6))  //8
    console.log('ceil: ', Math.ceil(3.14)) //4, 올림함수
    console.log('floor: ', Math.floor(3.14)) //3, 절삭함수
    console.log('round: ', Math.round(3.14)) //3, 반올림함수
    console.log('random: ', Math.random())   //0.0~1.0미만 랜덤함수
    const rand=Math.floor(Math.random() * 10)
    console.log(rand)  //0~9사이 난수 발생
  </script>

 


728x90
728x90

 

수업내용 정리 (VSCode - CSS)

 

1. 홈페이지

 1-0) 미리보기

기본
커서 올려두었을 시

 

 1-1) Index.html ㄱ 

더보기
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./style.css">
</head>
<body>
    <div class="container">
        <!-- logo -->
        <div class="logo">
            <img src="./images/logo_overwatch.png" alt="" id="logo_overwatch">
        </div>
        <div class="heroes">
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div>
            <div class="hero">
                <div class="image"></div>
            </div> <!--hreo end-->
        </div> <!--hreos end-->
        <!-- logo -->
        <div class="logo2">
            <img src="./images/logo_blizzard.png" alt="" id="logo_blizzard">
        </div>
    </div> <!--container end-->
</body>
</html>
  • 이미지가 들어갈 위치를 생성했다.
  • 로고는 이미지를 index에서 바로 넣었고, 로고를 제외한 이미지(캐릭터)는 style에서 넣으려고 위치 생성만 했다.

 

 1-2) style.css

  • 박스 설정
.container{
    padding: 50px 0;
}

.container .heroes{
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    max-width: 700px;
    padding: 40px 20px;
    margin: 0 auto;
}
  • 로고나 캐릭터가 들어가는 가장 큰 박스에 padding을 주어 양쪽 여백을 준다. (배경X 미리보기에서 보이지 않는 박스)
  • display: flex → .container 안에 있는 .heroes를 수평정렬 한다. (미리보기 내 캐릭터들을 수평정렬해준다. 해당 코드가 없으면 캐릭터들이 한줄에 하나씩만 존재한다.)
더보기
  • display: flex가 존재하지 않을 때
  • flex-wrap: wrap → .container 안에 있는 .heroes를 자동으로 줄바꿈한다. (미리보기 내 캐릭터들을 자동 줄바꿈해준다. 
더보기
  • flex-wrap가 존재하지 않을 때
  • justify-content: center → .container 안에 있는 .heroes를 가운데로 정렬해준다. (미리보기 내 캐릭터들을 가운데 정렬해준다.)
더보기
  • justify-content: center가 존재하지 않을 때
  • max-width: 700px → 넓이가 700px보다 작을 때, 자동으로 재배치한다. (미리보기 내 캐릭터를 배치해준다.)
더보기
  • max-width: 700px가 존재하지 않을 때 (700px 이상일때)

 

  • max-width: 700px를 적고 화면이 700px보다 작을때
  • padding: 40px 20px → .heroes에 padding을 주어 상하/좌우에 여백을 줬다.
더보기
  • padding: 40px 20px가 존재하지 않을 때 (.heroes 밖에 있는 로고와 딱 붙는다.)
  • margin: 0 auto → .container 안에 있는 .heroes에 width가 있고, block일때 가로 가운데 정렬을 해준다.
더보기
  • margin: 0 auto가 존재하지 않을 때

 

  • body 설정
body{
    height: 100%;
    background-image: url("./images/bg.jpg");
    background-size: cover;
    background-repeat: no-repeat;
    background-attachment: fixed;
}
  • height: 100% → 뷰포트 높이 값을 100%로 적용한다.
  • background-image: url("./images/bg.jpg") → 배경이미지 삽입
더보기
  • background-image: url("./images/bg.jpg")가 존재하지 않을 때
  • background-size: cover → 화면 축소 시 배경이미지 가로 너비에 맞춘다.
더보기
  • background-size: cover가 존재하지 않을 때 (화면 너비에 따라 배경 이미지가 가려질 수 있음)
  • background-repeat: no-repeat → 배경 이미지의 반복을 제거한다. (이미지가 끝나도 반복하지 않도록 한다.)
  • background-attachment: fixed → 스크롤해도 배경이미지가 안 움직이도록 고정한다.
더보기
  • background-attachment: fixed가 존재하지 않을 때

 

 

  • 존재할때

 

  • 가장 작은 박스 설정
.container .heroes .hero{
    width: 80px;
    height: 84px;
    background-color: #555;
    margin: 4px;
    border: 3px solid #fff;
    transform: skewX(-14deg);
    border-radius: 10px;
    box-sizing: border-box;
    transition: transform 0.2s,
                background-color 0.5s;
    overflow: hidden;
}
  • width, height → .container 내 .heroes 내 .hero의 크기를 지정한다. (미리보기 내 캐릭터 이미지 크기를 지정해준다.)
  • background-color: #555 → .hero의 배경색을 #555555로 지정한다.
더보기
  • 배경색 지정을 안 했을 때 ( 삽입한 이미지가 투명화가 되어있거나 이미지 삽입을 안 하면 배경 이미지가 배경색이 된다.)
  • margin: 4px → .hero 간 간격을 준다.
더보기
  • 간격을 안 줬을 때
  • border: 3px solid #fff → .hero에 선을 그리고, 그 선의 색상을 지정한다.
더보기
  • 선을 그리지 않았을 때
  • transform: skewX(-14deg) → .hero를 x축으로 14도만큼 기울인다.
더보기
  • 기울이지 않았을 때
  • border-radius: 10px → .hero의 네모칸을 둥글게 깎는다.
더보기
  • 둥글게 깎지 않았을 때 
  • box-sizing: border-box → .hero의 사이즈가 처음 설정한 사이즈에서 벗어나지 않도록 한다.
더보기
  • 설정하지 않았을 때

 

  • 설정했을 때 (차이가 보일진 모르겠으나 설정했을 때 사이즈가 더 작다.)
  • transition: transform 0.2s, background-color 0.5s → 0.2초 동안 전환, 배경색은 0.5초동안 전환한다. (밑에 hover에서 설정을 해놨기 때문에 커서를 올렸을 때 전환)
  • overflow: hidden → 이미지가 넘치는 것을 제어한다.
더보기
  • 넘침 제어를 하지 않았을 때
.container .heroes .hero:hover{
    /* 배경 그라데이션 */
    background: linear-gradient(to top, #555, rgb(112,194,190));
    /* background-color: rgb(112,194,190); */   /* 단색 */
    transform: scale(1.4) skewX(-14deg);
    z-index: 1;
}
  • background: linear-gradient(to top, #555, rgb(112,194,190)) → .hero에 커서를 올려두었을 때 배경을 그라데이션으로 채운다.
  • transform: scale(1.4) skewX(-14deg) → .hero의 크기를 1.4배 확대하고, x축을 -14만큼 이동한다.
  • z-index: 1  → 커서를 올렸을 때 캐릭터를 가장 맨 위로 올린다.
더보기
  • z-index를 사용하지 않았을 때 
.container .heroes .hero .image{
    /* 부모 .hero의 크기를 기준으로설정, 크기 줘야 배경이 보임 */
    width: 140%;
    height: 100px;
    /* 이미지 가운데 정렬 */
    background-position: center;
    /* 이미지 축소 */
    background-size: 90px;
    /* 이미지 반복 제거 */
    background-repeat: no-repeat;
    /* 기울임 제거, 왼쪽+위로 이미지 이동 */
    transform: skewX(14deg) translateX(-16px) translateY(-10px);
}

 

  • 캐릭터 이미지 설정 ㄱ 
더보기
/* .hero가 첫째인 요소의 .image에 캐릭터 이미지 설정 */
.container .heroes .hero:nth-child(1) .image{ background-image: url("./images/hero1.png"); }
.container .heroes .hero:nth-child(2) .image{ background-image: url("./images/hero2.png"); }
.container .heroes .hero:nth-child(3) .image{ background-image: url("./images/hero3.png"); }
.container .heroes .hero:nth-child(4) .image{ background-image: url("./images/hero4.png"); }
.container .heroes .hero:nth-child(5) .image{ background-image: url("./images/hero5.png"); }
.container .heroes .hero:nth-child(6) .image{ background-image: url("./images/hero6.png"); }
.container .heroes .hero:nth-child(7) .image{ background-image: url("./images/hero7.png"); }
.container .heroes .hero:nth-child(8) .image{ background-image: url("./images/hero8.png"); }
.container .heroes .hero:nth-child(9) .image{ background-image: url("./images/hero9.png"); }
.container .heroes .hero:nth-child(10) .image{ background-image: url("./images/hero10.png"); }
.container .heroes .hero:nth-child(11) .image{ background-image: url("./images/hero11.png"); }
.container .heroes .hero:nth-child(12) .image{ background-image: url("./images/hero12.png"); }
.container .heroes .hero:nth-child(13) .image{ background-image: url("./images/hero13.png"); }
.container .heroes .hero:nth-child(14) .image{ background-image: url("./images/hero14.png"); }
.container .heroes .hero:nth-child(15) .image{ background-image: url("./images/hero15.png"); }
.container .heroes .hero:nth-child(16) .image{ background-image: url("./images/hero16.png"); }
.container .heroes .hero:nth-child(17) .image{ background-image: url("./images/hero17.png"); }
.container .heroes .hero:nth-child(18) .image{ background-image: url("./images/hero18.png"); }
.container .heroes .hero:nth-child(19) .image{ background-image: url("./images/hero19.png"); }
.container .heroes .hero:nth-child(20) .image{ background-image: url("./images/hero20.png"); }
.container .heroes .hero:nth-child(21) .image{ background-image: url("./images/hero21.png"); }
.container .heroes .hero:nth-child(22) .image{ background-image: url("./images/hero22.png"); }
.container .heroes .hero:nth-child(23) .image{ background-image: url("./images/hero23.png"); }
.container .heroes .hero:nth-child(24) .image{ background-image: url("./images/hero24.png"); }
.container .heroes .hero:nth-child(25) .image{ background-image: url("./images/hero25.png"); }
.container .heroes .hero:nth-child(26) .image{ background-image: url("./images/hero26.png"); }
.container .heroes .hero:nth-child(27) .image{ background-image: url("./images/hero27.png"); }
.container .heroes .hero:nth-child(28) .image{ background-image: url("./images/hero28.png"); }
.container .heroes .hero:nth-child(29) .image{ background-image: url("./images/hero29.png"); }
.container .heroes .hero:nth-child(30) .image{ background-image: url("./images/hero30.png"); }
.container .heroes .hero:nth-child(31) .image{ background-image: url("./images/hero31.png"); }
.container .heroes .hero:nth-child(32) .image{ background-image: url("./images/hero32.png"); }

 

  • 로고 설정
/* logo 이미지 설정 */
.container .logo{
    max-width: 300px;
    margin: 0 auto;
    padding: 0 20px;
}
.container .logo img{
    width: 300px;
}
.container .logo2{
    max-width: 100px;
    margin: 0 auto;
    padding: 0 20px;
}
.container .logo2 img{
    width: 100px;
}

 


 

전체 피드백

  • 오늘 오전에 선생님이 하시는 것 따라하는 식으로 수업을 진행했는데 이번 수업은 생각보다 재미있었다. 물론, 자바를 할 때가 제일 재밌었다..

 


728x90
728x90

 

수업내용 정리 (VSCode - CSS)

 

1. 테두리

 1-1) 선

<body>
    <div class="container">
        <div class="item">item1</div>
        <div class="item">item2</div>
    </div>
</body>
    <style>
        .container .item{
            width: 100px;
            height: 100px;
            background-color: rgb(118,118,180);
        }
        .container *:first-child{
            /* 선 두께, 종류, 색상(기본값 검정) (일반적 순서) */
            /* border: 4px solid #f90; /#ff9900을 줄여서 사용할 수 있음 둘둘둘일 경우 */
            border: 4px solid rgb(25,25,120);

            /* 선 굵기 */
            border-width: 1px;

            /* 선 색 */
            border-color: #24272B;

            /* 선 종류 */
            border-style: dashed; /* 점선 */
        }
    </style>
  • border: 선 두께, 종류, 색상 한 번에 설정 가능
  • border-width: 선 굵기
  • border-color: 선 색
  • border-style: 선 종류

 

 1-2) 둥글게

<body>
    <div></div>
</body>
    <style>
        div{
            width: 100px;
            height: 100px;
            background-color: #24272B;
            margin: 20px;
            border-radius: 20px;
        }
    </style>
  • border-radius: 모서리를 깎아서 둥글게 만든다.

 

 

2. 크기계산

<body>
    <div class="item">Hello</div>
    <div class="item">Hello</div>
</body>
    <style>
        .item {
            width: 100px;
            height: 100px;
            background-color: #24272B;
        }

        .item:first-child {
            padding: 20px;
            border: 5px solid;
            box-sizing: border-box;
            /*border-box: 요소의 내용+padding+border로 크기(width:100px)를 계산
              기본값: content-box: 요소의 내용만으로 크기(width:100px)를 계산  */
        }
    </style>

 

 

3. 넘침 제어

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>
    <style>
        .parent{
            background-color: rgb(118,118,180);
            width: 200px;
            height: 200px;
            /* 넘침제어 */
            overflow: hidden;
            /* overflow: auto; */
        }
        .child{
            width: 300px;
            height: 100px;
            background-color: rgb(25,25,120);
        }
    </style>
  • overflow 속성: 넘침을 방지 / 부모에게 줘야함
  • visible: 넘침 내용을 그대로 보여줌(기본값)
  • hidden: 넘침 내용을 잘라냄
  • sroll: 넘침 내용을 잘라냄
  • auto: 넘침 내용이 있는 경우에만 잘라내고 스크롤바 생성

 

 

4. 출력특성

<body>  
    <span>Hello World!</span>
    <br>
    <!-- 아래 a태그에 가로세로 사이즈 주기 -->
    <a href="http://www.naver.com">네이버</a>
    <a href="http://www.daum.net">다음</a>
</body>
    <style>
        body{
            font-size: 20px;
            margin: 20px;
        }
        span{
            /* dispaly는 사이즈 안 먹음 block이면 먹음 */
            /* none 안 보임 */
            display: block;
            width: 100px;
            height: 50px;
            background-color: rgb(118,118,180);
            color: aliceblue;
        }
         a{
            /* visibility: hidden; / 영역은 유지하지만 사라짐 */
            /* display: none; / 영역까지 사라짐*/
            display: block;
            width: 100px;
            height: 80px;
            background-color: rgb(118,118,180);
            color: aliceblue;
            border: 1px solid #24272B;
            box-sizing: border-box;
            text-align: center;
         }
    </style>
  • a 태그에 가로세로 크기 주기는 문제였다.
        /* display속성: 요소의 화면출력 특성
          1.각 요소에 이미 지정되어 있는 값
          -block: 상자(레이아웃) 요소
          -inline: 글자 요소(width,height안됨)
         -inline-block: 글자+상자요소
         2.따로 지정해서 사용하는 값
         -flex: 플렉스 박스(1차원 레이아웃,주로 수평정렬시 사용)
         -grid: 그리드(2차원 레이아웃)
         -none: 화면에서 사라짐(영역이 사라진다.유용함)
         -기타: table, table-row, table-cell 등.. */

 

 

5. 투명도

<body>
    <div class="parent">
        <div class="child"></div>
    </div>
</body>
    <style>
        .parent {
            background-color: rgb(118, 118, 180);
            width: 200px;
            height: 200px;
            /* 넘침제어 */
            overflow: hidden;
            /* overflow: auto; */
        }

        .child {
            width: 300px;
            height: 100px;
            background-color: rgb(25, 25, 120);
            /* .07(7%) / .5(50%) / 1(100%) */
            opacity: 0.5;
        }
    </style>

 

 

6. 글꼴 (p 문단 출처: 링크)

<body>
    <h1>Hello World!</h1>
    <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        Phasellus vel tempor ex, sit amet dignissim nulla. In vel libero arcu.
        In faucibus, libero sed fringilla hendrerit, dolor lectus pulvinar ante, in aliquam ligula neque sed ante.
        Ut tortor purus, mollis ac dui nec, finibus dignissim elit. Aliquam at ipsum erat. Aenean vitae porttitor lectus, eu mollis est.
        Etiam blandit felis ut tellus accumsan tempus. Quisque dapibus risus id finibus sagittis.
        Maecenas semper nisl ac quam commodo, in pharetra neque condimentum.
    </p>
</body>
    <style>
        h1{
            font-size: 24px;
            /* 100~900 */
            font-weight: 700;
            font-style: italic;
            /* sans-serif(고딕체계열), serif(바탕체계열) */
            font-family: 'Times New Roman', Times, sans-serif;
        }
        p{
            width: 350px;
            height: 200px;
            padding: 10px;
            border: 1px solid;
            box-sizing: border-box;
            text-align: center;

            /* 줄 높이(세로 가운데 정렬 시 사용) 현재는 flex로 정렬 / 단위: px */
            /* line-height: 16px; */
            line-height: 2; /* 글자크기의 두배 */
            
            margin: 0 auto; 
        }
    </style>

 

 

7. 문자

<body>
    <a href="https://google.com">Google</a>
    <p>
        1. 동해물과 백두산이 마르고 닳도록
        하느님이 보우하사 우리나라 만세
        무궁화 삼천리 화려 강산
        대한 사람 대한으로 길이 보전하세
    
        2. 남산 위에 저 소나무 철갑을 두른 듯
        바람 서리 불변함은 우리 기상일세
        무궁화 삼천리 화려 강산
        대한 사람 대한으로 길이 보전하세
      </p>
</body>
    <style>
        a{
        display: block;
        width: 200px;
        height: 100px;
        background-color: rgb(118,118,180);
        font-size: 24px;
        color: aliceblue;
        text-decoration: none;
        text-align: center;

        /* 세로 가운데 정렬(편법) */
        line-height: 100px;
        }
        p{
            /* text-align: center; */
            /* 들여쓰기(양수)/내어쓰기(음수) */
            text-indent: 50px;
        }
    </style>

 

 

8. 배경

<body>
    <div></div>
    <!-- <img src="http://via.placeholder.com/640x480" alt=""> -->
</body>
    <style>
        div{
            width: 300px;
            height: 400px;
            background-color: #24272b;
            background-image: url("../img/Jinx.png");
            /* background-size: 300px 400px; 위 이미지를 늘린것 */
            /* 이미지 사이즈(비율 유지 확대/축소): 기본값(auto), px */
            background-size: contain;
            background-repeat: no-repeat; /* 반복 안 함 */
            /*  방법1: top, bottom, left, rifht(조합 가능), center
                방법2: x축:100px y축:30px */
            background-position: center;
            background-attachment: fixed; /* 스크롤해도 이미지는 움직이지 않음 */
        }
        body{
            height: 3000px;
        }
    </style>
  • cover: 더 넓은 너비에 맞춤
  • contain: 더 짧은 너비에 맞춤

 

 

9. 띄움

 9-1) float

<body>
    <img id="img1" src="../img/Viego.png" alt="비에고" width="150">
    <img id="img2" src="../img/Jinx.png" alt="징크스">
    <!-- <div style="border: 1px solid rgb(118,118,180);">영역</div> -->
    <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        In vehicula tempus sagittis.
        Ut non sagittis velit.
        Integer pretium commodo erat eget pellentesque.
        Proin in malesuada arcu, a tincidunt neque.
        Integer turpis libero, mollis mollis eros vitae, ullamcorper
        pulvinar dolor.
    </p>
    <p class="second">
        Cras volutpat odio ac aliquam mattis.
        In fermentum purus massa, id congue dolor lacinia eu. Nulla facilisi.
        Vivamus a scelerisque tortor, sit amet maximus mi.
        Morbi condimentum velit eget felis commodo, vel ornare lectus volutpat.
        In ac gravida neque.
        Suspendisse ex enim, efficitur et nunc quis, ullamcorper sollicitudin magna.
    </p>
</body>
    <style>
        #img1 {
            /* 흐름에서 제외 */
            float: right;
        }
        #img2 {
            float: left;
        }
        .second{
            clear:both;
        }
    </style>
  • float 속성: 가장 위 레이어에서 자리는 차지하나, 정상흐름에서 제외된다.

 

 9-2) float_clear

<body>
    <h2>넘침 제어</h2>
    <div class="container">
        <div class="box_container">
            <div class="box">Box1</div>
            <div class="box">Box2</div>
            <div class="box">Box3</div>
            <div class="box">Box4</div>
        </div>
    </div>
</body>
    <style>
        .container {
            margin-top: 35px;
        }

        .box_container {
            overflow: hidden;
            padding: 10px;
            background-color: bisque;
        }

        .box_container .box {
            float: left;
            width: 100px;
            height: 100px;
            background-color: #09f;
        }

        /* 가족간에 붕괴된 레이아웃 잡는 방법 세가지 */
        /* 설정하지 않으면 부모높이가 0이 된다. */
        /* 부모에게 overflow:hidden 적용*/
        /* 부모에게 float 적용*/
        /* 부모에게 clearfix 적용- 많이 사용하지만 귀찮음*/

        /* .box_container .box1,
        .box_container .box2 {
            float: left;
        }
        .box_container .box3 {
            clear: both; / float을 무시 /
        } */
    </style>

 

 

10. 배치

 10-1)

<body>
    <div class="static">
        position:static
    </div>
    <div class="relative">
        position:relative 
		<div class="absolute">position:<br/>absolute</div>		
    </div>  
    <div class="fixed">
        position:fixed
    </div>
</body>
    <style>
        body{
            height: 3000px;
        }
        div{
            width: 200px;
            height: 200px;
            text-align: center;
        }
        div.static{
			position: static;
            /*기본값이고 문서의 정상적인 흐름에 따라 배치됨*/
            background-color: yellow;
            /*stacit에서는 top, left적용되지 않음*/
			top:100px;
            left: 200px;
        }
        div.relative{
            background-color: aqua;
            position: relative;
            /*정상적인 위치에서 상대적으로 요소가 배치됨*/
            top: 100px;
            left: 20px;
        }
        div.absolute{
            position: absolute;
            /*static 부모 역할 못함
              부모(보통relative)가 있다면 부모좌상단을 기준으로 배치됨*/
            width: 100px;
            height: 100px;
            border: 3px solid red;
            left: 50%;
            top: 50%;
        }
        div.fixed{
            background-color: coral;
            position:fixed;
            /*화면스크롤시 같은 위치에 고정됨*/ 
            top: 10%;
            right:10%;
        }
    </style>

 

 10-2)

<body>
  <!--부모 div는 overflow:hidden으로 설정한다.-->
  <div id="parent">
    <div class="child">자식 DIV</div>
    <div class="child">자식 DIV</div>
  </div>
</body>
  <style>
    #parent{
            /*부모 Div는 overflow:hidden을 무조건 설정
			 부모보다 자식의 width,height가 큰 경우 잘라내기 위해 */
             border:3px solid black;
            overflow:hidden;
            /*z-index: 부모가 무조건 자식 아래에 위치한다.*/
            
        }
        .child{
            border:1px solid blue;
            float:left;
            /*디테일하게 영역을 설정하기 위해선 float을 사용할 것.*/ 
            /*display: inline-block;*/
            height: 100px;
           background-color: antiquewhite;
           margin:10px;
        }
  </style>

 

 

11. 배치

 11-1)

<body>
  <!-- position속성: 요소의 위치 지정 기준 
    static: 기준없음(기본값)
    relative: 요소 자신을 기준(부모 역할)
    absolute: 위치 상 부모 요소를 기준(자식 역할)
    fixed: 뷰포트(브라우저)를 기준
    
    <position과 같이 사용하는 방향속성들:음수 가능>
      top, bottom, left, right, z-index(중요)
 -->
  <div class="wrap">
    <div class="container">
      <div class="item">1</div>
      <div class="item">2</div>
      <div class="item">3</div>
    </div>
  </div>
</body>
  <style>
    
    .wrap{
      width: 400px;
      height: 300px;
      background-color: tomato;
      /* 여기도 위치상 부모가 아니면 브라우저가 부모가 된다. */
      /* position: relative; */
    }
    .container {
      width: 300px;
      background-color: royalblue;
      /* absolute, fixed는 위치상의 부모 구조가 무너지는 경우가 있다. */
      position: relative;
    }

    .container .item {
      border: 4px dashed red;
      /* background-color: orange; */
    }
    .container .item:nth-child(1) {
      width: 100px;
      height: 100px;
      background-color: antiquewhite;
    }

    .container .item:nth-child(2) {
      width: 140px;
      height: 70px;
      background-color: azure;
      /*relative는 원래영역은 차지하고 있고 지정 좌표에 나타나므로 사용되지 않음*/
	  /* position: relative; */
      /*absolute는 위치상 부모요소를 기준으로 배치하므로 형제들을 신경쓰지 않고 위치한다.*/
      position: absolute;
      top: 30px;
      right: 30px;
	  /*container div가 위치상 부모요소가 되려면 
      position: relative;로 설정해야 함 
      만약 relative가 아니고 할아버지 요소가 relative면
      위치상 부모는 할아버지 요소가 된다. 
      그것도 아니면 화면(뷰포트)기준으로 배치한다. */
    /*fixed: 뷰포트(브라우저)를 기준으로 생성:스크롤시 위치 고정 */
      /* position: fixed; */
      
    }
    /* position: fixed; 테스트시 설정*/ 
    body{
      height: 3000px;
    }
    .container .item:nth-child(3) {
      width: 70px;
      height: 120px;
      background-color: aquamarine;
    }
  </style>

 

 11-2) 

<body>
  <!-- 요소 쌓임 순서: Stack order 
    1.요소에 position속성의 값이 있는 경우 위에 쌓임(static 제외)
    2.1번 조건이 같은 경우, z-index속성의 숫자 값이 높을 수록 위에 쌓임
    3.1번2번 조건까지 같은 경우, html의 다음 구조일 수록 위에 쌓임
  -->
  <div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
  </div>
</body>
  <style>
    .container {
      width: 300px;
      background-color: royalblue;
      /* absolute, fixed는 위치상의 부모 구조가 무너지는 경우가 있다. */
      position: relative;
    }

    .container .item {
      width: 100px;
      height: 100px;
      border: 4px dashed red;
      /* background-color: orange; */
    }
    .container .item:nth-child(1) {
      background-color: orange;
      position: relative;
      /* z-index 기본값:0, 없으면 2번째가 위로 온다  */
      /* z-index: 1;  */
      
    }
    .container .item:nth-child(2) {
      background-color: orangered;
      position: absolute;
      top: 50px;
      left: 50px;
    }
    .container .item:nth-child(3) {
      background-color: aqua;
      /* position이 없이 z-index가 높아도 우선순위에 밀린다. */
      position: fixed;
      z-index: 3;
      top: 30px;
      left: 30px;
    }
  </style>

 

 11-3)

<body>
  <!-- z-index속성: 값이 높을수록 위에 쌓인다(기본값:auto(0), 너무큰수는 관리가 힘듬) 
    1.요소에 position속성의 값이 있는 경우 위에 쌓임(static 제외)
    2.1번 조건이 같은 경우, z-index속성의 숫자 값이 높을 수록 위에 쌓임
    3.1번2번 조건까지 같은 경우, html의 다음 구조일 수록 위에 쌓임
  -->
  <div class="container">
    <div class="item">1</div>
    <div class="item">2</div>
    <div class="item">3</div>
  </div>
  <hr>
  <span>Hello!</span>
</body>
  <style>
    .container {
      width: 300px;
      background-color: royalblue;
      /* absolute, fixed는 위치상의 부모 구조가 무너지는 경우가 있다. */
      position: relative;
      /* overflow: hidden; */
    }

    .container .item {
      width: 120px;
      height: 120px;
      border: 4px dashed red;
    }

    .container .item:nth-child(1) {
      /* position:static; */
      background-color: orange;
      
    }

    .container .item:nth-child(2) {
      background-color: orangered;
      position: absolute;
      top: 50px;
      left: 100px;
      z-index: 1;
    }

    .container .item:nth-child(3) {
      background-color: aqua;
      /* position이 없이 z-index가 높아도 우선순위에 밀린다. */
      position: absolute;
      bottom: -30px;
      right: -10px;
      z-index:2;
    }
    span{
      width: 100px;
      height: 100px;
      background: orange;
      font-size: 40px;
      /* absolute or fixed일때 display는 block로 변환된다.*/
      position:absolute;
    }
  </style>

 

 

12. Light-Box

<body>
  <div id="bg">
    <div id="popup">
      <h2>공지사항-LightBox</h2>
    </div>
  </div>
</body>
  <style>
    #bg {
      /* display: flex;   */
      /* flex-wrap:wrap ;           */
      background-color: black;
      opacity: .5;
      /* width: auto;     */
      height: 100vh;
      /*하늘에서 바라본 건물의 높이이다.
      부모,자식div간에는 적용되지 않음
    */
      /* z-index: 2; */
    }

    #popup {
      text-align: center;
      width: 500px;
      height: 600px;
      margin: 0 auto;
      /*width있을 때덩어리 가운데 정렬*/
      background-color: yellow;
      /* z-index: 3; */
    }
  </style>

 

 

13. Flex

 13-1)

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
    </div>
    
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
    </div>
</body>
    <style>
        /*Flex Container(부모 요소)*/
        .container {
            background-color: royalblue;
            /*display:부모전용속성,
			flex:부모요소는 block, 자식요소는 수평정렬함
			inline-flex(사용빈도적음):부모요소는 inline, 자식요소는 수평정렬함 
			*/
            /*수평 주축 설정: 기본값(row),row-reverse: 자식요소를 오른쪽->왼쪽 배치 */
            /* flex-direction: row-reverse; */
            /*수직 주축 설정(사용빈도없음, display:block시 어짜피 수직이므로): column,column-reverse */
            /* flex-direction: column-reverse; */
            padding: 10px;
            margin: 10px;
       }

        /*Flex Items(자식 요소)*/
        .container .item {
            width: 100px;
            height: 100px;
            border: 3px dashed red;
            background-color: orange;
        }
    </style>

 

 13-2) 

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
    </div>
</body>
    <style>
        /*Flex Container(부모 요소)*/
        .container {
            background-color: royalblue;
            /*display(부모전용속성): flex;
            부모요소는 block이고,  Flex Items(자식 요소)를 수평정렬함*/
            display: flex;
            /*display: inline-flex; 부모요소는 inline이고, 자식요소는 수평정렬(사용빈도 적음) */
            /*수평 주축 설정: 기본값(row),row-reverse: 자식요소를 오른쪽->왼쪽 배치 */
            /*flex-direction: row-reverse;*/
            padding: 10px;
            margin: 10px;

            width: 300px;
            /* 자식높이가 부모높이를 초과시 height 삭제 */
            /* height: 200px;  */
            height: 400px; 
            /*flex-wrap: 기본값(nowrap)_Flex Items(자식 요소)를 줄바꿈 안함(너비가 줄어들수 있음)
              wrap: 자식요소를 줄바꿈(너비 줄지 않음)
            */
            flex-wrap: wrap;

            /*justify-content: 자식요소 수평 정렬방식*/
            /*기본값:flex-start(왼쪽정렬),flex-end(오른쪽정렬), center(가운데정렬)  */
            /* justify-content:center ; */
            
            /*align-content: 자식요소가 여러줄일때 수직 정렬방식(한줄일때 동작안함????테스트해보니 한줄도 정렬됨)
              flex-wrap: wrap설정해야 정렬가능함, 그래서 align-items를 많이 사용함 */
            /*기본값:stretch(높이를 늘림), flex-start(위쪽정렬),flex-end(아래쪽정렬), center(가운데정렬)  */
            /* align-content:flex-end ; */

             /*align-items: 자식요소를 한줄마다 수직 정렬방식(align-content보다 많이 사용)*/
            /*기본값:stretch(높이를 늘림), flex-start(위쪽정렬),flex-end(아래쪽정렬), center(가운데정렬)  */
            align-items: flex-start;
    

        }

        /*Flex Items(자식 요소)*/
        .container .item {
            width: 100px;
            /* 수직 정렬 stretch시 height생략해 볼것 */
            height: 100px;
            border: 3px dashed red;
            background-color: orange;
        }
    </style>

 

 13-3) 

<body>
  <h2>Flex: 정렬</h2>
  <div id="wrap">
    <div class="floating-box">box1</div>
    <div class="floating-box">box2</div>
    <div class="floating-box">box3</div>
    <div class="floating-box">box4</div>
    <div class="floating-box">box5</div>
    <div class="floating-box">box6</div>
    <div class="floating-box">box7</div>
    <div class="floating-box">box8</div>
  </div>
</body>
  <style>
    /* Flex Container(부모요소) */
    #wrap {
      /* overflow: hidden;  필요없음*/
      display: flex;
      /* 너비 설정하지 말것 */
      max-width: 300px;
      height: 500px;
      /* 자동 줄바꿈 */
      flex-wrap: wrap;
      /* 수평 정렬 */
      justify-content: center;
      /* 수직 정렬1:  flex-wrap:wrap 설정해야 정렬가능함*/
      /* align-content: center; */
      /* 수직 정렬2: flex-wrap:wrap 필요없음,
      자식요소를 한줄마다 수직 정렬방식(align-content보다 많이 사용) */
      align-items:center;
      /* 수직 정렬 stretch시 자식요소 height 삭제할것  */
      /* align-items: stretch; */
      padding: 10px;
      border: 1px dashed red;
    }
 /* Flex Items (자식 요소)*/
    .floating-box {
      /* div내 컨텐츠(문자) 정렬위해 설정 */
      display: flex;
      /* 컨텐츠(문자) 수평 정렬 */
      justify-content: center;
      /* 컨텐츠(문자) 수직 정렬 */
      align-content: center;
      width: 50px;
      /* 수직 정렬 stretch시 height생략해 볼것 */
      height: 100px;
      border: 3px solid orange;
      margin: 10px;
    }
  </style>

 

  13-4) 

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
    </div>
</body>
    <style>
        /*Flex Container(부모 요소)*/
        .container {
            width: 500px;
            height: 400px; 
            display: flex;
            background-color: royalblue;
            justify-content: center;
            /* align-items: stretch; 기본값*/
            align-items: center;
    

        }

        /*Flex Items(자식 요소)*/
        .container .item {
            width: 100px;
            /* 수직 정렬 stretch시 height:auto 또는 생략해 볼것 */
            height: 100px;
            border: 3px dashed red;
            background-color: orange;
        }
    </style>

 

 13-5)

<body>
    <div class="container">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
    </div>
</body>
    <style>
        /*Flex Container(부모 요소)*/
        .container {
            width: 500px;
            height: 400px; 
            display: flex;
            background-color: royalblue;
            justify-content: center;
            /* align-items: stretch; 기본값*/
            align-items: center;
        }

        /*Flex Items(자식 요소)*/
        .container .item {
            width: 100px;
            /* 수직 정렬 stretch시 height:auto 또는 생략해 볼것 */
            height: 100px;
            border: 3px dashed red;
            background-color: orange;
            /* Flex Item의 증가 너비 비율: 기본값(0),
            부모수평영역에 자식요소가 1:1:1비율의 수평 배치 */
            flex-grow: 1;
            /* Flex Item의 공간 배분 전 기본 너비: 기본값(auto, 요소 내용 너비)*/
            /* 0px: 요소 내용 너비 무시 */
            flex-basis: 0;
        }
        .container .item:nth-child(3) {
            flex-grow: 2;
        }
    </style>

 

 13-6)

<body>
    <h1> Flex: 정렬 </h1>
    <div id="wrap">
        <div class="item">box1</div>
        <div class="item">box2</div>
        <div class="item">box3</div>
        <div class="item">box4</div>
        <div class="item">box5</div>
        <div class="item">box6</div>
        <div class="item">box7</div>
        <div class="item">box8</div>
    </div>
</body>
    <style>
        /* Flex Container(부모요소) */
        #wrap{
            /* overflow: hidden; */
            display: flex;
            max-width: 500px;
            height: 500px;
            /* 자동 줄바꿈 */
            flex-wrap: wrap;
            /* 수평정렬 */
            justify-content: center;
            /* 정렬방향 */
            /* justify-content: flex-start; 왼쪽정렬 */
            /* 수직정렬 */
            align-items: center;

            padding: 10px;
            border: 1px dashed red;
        }
        /* Flex Items(자식요소) */
        .item{
            /* float: left; */
            width: 50px;
            height: 100px;
            border: 3px solid orange;
            display: flex;
            /* 수평정렬 */
            justify-content: center;
            /* 수직정렬 */
            align-items: center;
        }
    </style>

 


728x90
1 2 3 4 5 ··· 13