728x90

Node.js란?

Node.js는 자바스크립트를 실행시키는 구동기로, 자바스크립트의 실행환경을 웹 브라우저 밖에서도 가능하게 합니다. Node.js는 웹 서버(넷플릭스), 모바일 앱(인스타그램), 데스크탑 앱(디스코드 등)에서 사용됩니다.

설치 방법

  1. Node.js 짝수버전(20대)을 다운로드합니다.
  2. CMD 창에서 node -v 명령어를 사용해 설치를 확인합니다.

Node.js 모듈 시스템

Node.js는 패키지 단위로 프로그램을 구성합니다. 복잡한 기능을 기능별로 나누어 관리하는데, 각각의 자바스크립트 파일을 모듈이라 부릅니다.

예:

  • 회원관리 기능: user 모듈
  • 장바구니 기능: cart 모듈
  • 결제 기능: pay 모듈

모듈 시스템

모듈을 생성하고 불러오는 시스템으로, 다양한 기능을 제공합니다. 예시로는 common.js와 es module이 있습니다.

package.json

Node.js 프로젝트에서 사용되는 파일로, 프로젝트의 이름, 버전, 설명, 작성자, 라이센스, 프로젝트 실행에 필요한 의존성 목록이 포함됩니다.


React.js란?

React.js는 Meta(Facebook)이 개발한 오픈소스 자바스크립트 라이브러리로, 대규모 웹 서비스의 UI를 더 편하게 개발하기 위해 만들어졌습니다. 넷플릭스, 인스타그램, 노션 등이 예시입니다.

React의 특징

  1. 화면 업데이트 구현이 쉽습니다.
  2. 컴포넌트 기반으로 UI를 구현합니다.
  3. 화면 업데이트가 빠르게 처리됩니다.

컴포넌트란?

화면을 구성하는 요소로, Header, Main, Footer 등을 각각 header.js, main.js, footer.js로 모듈화하여 사용합니다. 이렇게 하면 중복 코드를 줄일 수 있습니다.

선언형 프로그래밍

목적만 간결히 명시하는 방식으로, 명령형 프로그래밍과 비교됩니다. 리액트는 이 방법을 사용하여 코드를 간결하게 유지합니다.


브라우저의 렌더링

렌더링 과정

  • HTML -> DOM
  • Render Tree -> Layout -> Painting
  • CSS -> CSSDOM

리액트는 복잡한 대규모 서비스에서 성능 저하 없이 브라우저 렌더링을 효율적으로 처리합니다.

Virtual DOM이란?

DOM을 자바스크립트 객체로 흉내낸 복제판.

리액트는 업데이트가 발생하면 실제 DOM을 수정하기 전에 가상의 복제판 DOM에 먼저 반영, 이는 성능을 향상시키기 위한 버퍼 역할을 한다.


Vite

Vite란?

차세대 프론트엔드 개발 툴로, 기본 설정이 적용된 React App을 생성할 수 있다. 리액트는 내부에 서버가 내장되어 있다.

기본 명령어

  • npm run dev: React App 서버를 가동한다.
  • http://localhost:5173/: 현재 가동 중인 리액트 웹 서버에 접속할 수 있는 주소이다.

JSX

JSX란?

JSX는 리액트 컴포넌트에서 HTML과 같은 형태로 요소를 작성할 수 있게 해준다

  1. 요소 여러 개를 하나의 요소처럼 감싸야 한다.
  2. 자바스크립트 표현식은 {}로 감싼다.
  3. 태그는 꼭 닫아야 한다.
  4. class 대신 className을 사용한다.

const Main = () =>{
  const student={
    name:"길동",
    isLogin: true,
  };

return(
  <>
  {student.isLogin ? (
    <div>로그아웃</div>
  ) : (
    <div>로그인</div>
  )}
  </>
)
}
// if(student.isLogin){
//   return <div className="logout">로그아웃</div>;
// }
// else{
//   return <div>로그인</div>
// }
// }

export default Main;


 

 

const Main = () => {
  const student = {
    name: "길동 ",
    isLogin: true,
  };

  return (
    <>
      {student.isLogin ? (
        <div
          style={{ backgroundColor: "yellow", borderBottom: "3px solid blue" }}
        >
          로그아웃
        </div>
      ) : (
        <div>로그인</div>
      )}
    </>
  );
};

export default Main;

 

=


Props와 State

Props

컴포넌트 속성을 설정할 때 사용하는 요소로, 부모 컴포넌트에서 설정할 수 있다

  • defaultProps: 기본값 설정

Button.jsx

const Button = ({text,color}) => { //함수형 컴포넌트
    return <button style={{color:color}}>{text}</button>
}

// const Button = (props) =>{ //함수형 컴포넌트
// console.log(props); //props값이 객체 형태로 담겨서 출력
// return <button style={{color:color}}>{text}</button>
// };

Button.defaultProps={
color: "pink",
}; //default값 -> props에 전달 못받아도 적용됨

export default Button;

App.jsx

import { Fragment } from "react";
import Header from "./components/Header";
import Main from "./components/Main";
import Footer from "./components/Footer";
import Button from "./components/Button";

function App() {
  // App 컴포넌트 (부모 컴포넌트)

  return (
    <>
    <Button text="{메일}" color={"green"}/>
    <Button text="{웹툰}"/>
    <Button text="{카페}"/>
     
    </>
  );
}

export default App;
 
-------------------------------------------------------------
 
import Button from "./components/Button";

function App() {   // App 컴포넌트 (부모 컴포넌트)
  const buttons = {
    text: "메일",
    color: "green",
    name: "리액트",
    a: 1,
  };


  return (
    <>
      <Button text="{메일}" color={"green"} />
      <Button text="{웹툰}" />
      <Button text="{카페}" />
    </>
  );
}

export default App;

 

  • children: 컴포넌트 태그 사이의 내용을 보여주는 props

 

import Button from "./components/Button";

function App() {   // App 컴포넌트 (부모 컴포넌트)
  const buttons = {
    text: "메일",
    color: "green",
    name: "리액트",
    a: 1,
  };


  return (
    <>
      <Button {...buttons} />
      <Button text="{웹툰}" />
      <Button text="{카페}" >
        <div>자식</div>
        </Button>
    </>
  );
}

export default App;
import { Children } from "react";

const Button = ({text,color,children}) => { //함수형 컴포넌트
    return <button style={{color:color}}>
        {text}{children}
        </button>
};

// const Button = (props) =>{ //함수형 컴포넌트
// console.log(props); //props값이 객체 형태로 담겨서 출력
// return <button style={{color:color}}>{text}</button>
// };

Button.defaultProps={
color: "pink",
}; //default값 -> props에 전달 못받아도 적용됨

export default Button;
 
--------------------------
 
import { Children } from "react";

const Button = ({ text, color, children }) => {  //함수형 컴포넌트
  const onClickButton = (e) => {
    console.log(e); // 합성이벤트 (브라우저마다 이벤트 객체가 달라질 수 있어)
                    // 리액트에서는 여러브라우저를 참고해서 통합규격을 만들어 놓음)
    console.log(text);
  };
  return(
    <button onClick={onClickButton}
    style={{color:color}}>  
        {text}
        {children}
    </button>
)
};

 

State

컴포넌트 내부에서 바뀔 수 있는 값 /  배열 비구조화 할당과 spread 연산자를 사용하여 state를 업데이트할 수 있다.

import { Fragment } from "react";
import { useState } from "react";

function App() {
  // App 컴포넌트 (부모 컴포넌트)
  const [state, setState] = useState(0);
  console.log(state);

  return ( // 리렌더링 - 컴포넌트의 state값이 바뀌면 컴포넌트가 returnㅇ르 다시한다 ->
  //                      화면을 다시그린다 -> 그리고 그 떄, 변경된 state값도 바로 화면에 반영됨!
    <>
    <h2>{state}</h2>
    <button onClick={() => {
      setState(state+1);
    }}
    > + </button>
    </>
  )
}

export default App;

 


 

import { Fragment } from "react";
import { useState } from "react";

function App() {
  // App 컴포넌트 (부모 컴포넌트)
  const [state, setState] = useState(0);
  const [computer,setComputer] = useState("OFF");


  return ( // 리렌더링 - 컴포넌트의 state값이 바뀌면 컴포넌트가 returnㅇ르 다시한다 ->
  //                      화면을 다시그린다 -> 그리고 그 떄, 변경된 state값도 바로 화면에 반영됨!
    <>
    <h2>{computer}</h2>
    <button onClick={() => {
      setComputer(state === "ON" ? "OFF" : "ON");
    }}
    > {computer === "ON" ? "끈다" : "켠다"}
    </button>
    </>
  )
}

export default App;

 

 

import { Fragment } from "react"
import { useState } from "react"

const Computer = ({power}) => {
  console.log(power);
  return(
    <div>{power === "ON" ?
        <h1>ON</h1> : <h1>OFF</h1>
  }    
    </div>
  );
}



function App() {   //App 컴포넌트(부모 컴포넌트)
  const [state,setState]=useState(0);
  const [power,setPower] = useState("OFF");

  return (  //리렌더링(reRendering- 컴포넌트의 state값이 바뀌면 컴포넌트가 return을 다시한다 ->
     
    //화면을 다시 그린다 ->  그리고 그때, 변경된 state값도 바로 화면에 반영된다!!!!
    <>
    <div>
      <Computer power={power}/>  {/*부모컴포넌트에서 prop값 설정할 수 있다 */}
      <button onClick={()=>{
        setPower(power==="ON"?"OFF":"ON");
      }}>
        {power==="ON"?"끈다":"켠다"}
      </button>
    </div>

    <div>
      <h1>{state}</h1>
      <button onClick={()=>{
        setState(state+1);
      }}
      >
        +
      </button>
    </div>
    </>
  )
}

export default App

 

같은 기능을 하는 버튼을 설정을 하지 않았지만 동일한 동작을 하는것을 볼 수 있다.

 

리액트에서는 기능별로 따로 구현해주어야한다.

 


 

App.jsx

import { Fragment } from "react";
import { useState } from "react";
import Computer from "./components/Computer";
import Count from "./components/Conut";

function App() {
  //App 컴포넌트(부모 컴포넌트)

  return (
    //리렌더링(reRendering- 컴포넌트의 state값이 바뀌면 컴포넌트가 return을 다시한다 ->
    //화면을 다시 그린다 ->  그리고 그때, 변경된 state값도 바로 화면에 반영된다!!!!
    <>
      <Computer />
      <Count />
    </>
  );
}

export default App;

 

Computer.jsx

import { useState } from "react";

const Computer = () => {
  const [power, setPower] = useState("OFF");
  console.log(power);

   return (
    <div>
      {power === "ON" ? <h1>ON</h1> : <h1>OFF</h1>}

      <button
        onClick={() => {
          setPower(power === "ON" ? "OFF" : "ON");
        }}>
        {power === "ON" ? "끈다" : "켠다"}
      </button>
    </div>
  );
};

export default Computer;

 

Count.jsx

import { useState } from "react";

const Count = () => {
  const [state, setState] = useState(0);
  console.log(state);
  return(
  <>
    <div>
      <h1>{state}</h1>
      <button
        onClick={() => {
          setState(state + 1);
        }}
      >
        +
      </button>
    </div>
  </>
  )
};
 
export default Count;
728x90
728x90

 

<!DOCTYPE html>
<html lang="en">

<head>
  <script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
  <style>
    .fontsizebtn {
      display: flex;
      flex-direction: row;
      position: fixed;
      top: 10px;
      right: 10px;
      padding: 5px;
      align-items: flex-end;
    }

    .fontsizebtn1,
    .fontsizebtn2,
    .fontsizebtn3 {
      border-radius: 4px;
      margin-right: 10px;
      text-align: center;
      display: flex;
      align-items: center;
      justify-content: center;
      cursor: pointer;
    }

    .fontsizebtn1:hover,
    .fontsizebtn2:hover,
    .fontsizebtn3:hover {
      background-color: gray;
    }

    .fontsizebtn1 {
      font-size: 1em;
      padding: 0.5em;
      width: 5px;
      height: 5px;
    }

    .fontsizebtn2 {
      font-size: 1.2em;
      padding: 0.625em;
      width: 5px;
      height: 5px;
    }

    .fontsizebtn3 {
      font-size: 1.3em;
      padding: 0.75em;
      width: 5px;
      height: 5px;
    }
  </style>
</head>

<body>

  <!-- 폰트사이즈 버튼 1em , 1.25배, 1.5배로 늘어나는 페이지 -->
  <div class="fontsizebtn">
    <div class="fontsizebtn1" data-fontsize="1">가</div>
    <div class="fontsizebtn2" data-fontsize="1.2">가</div>
    <div class="fontsizebtn3" data-fontsize="1.3">가</div>
  </div>

  <div class="changeSize">
    <h2> 웹 개발자의 분류 </h2>
    웹퍼블리셔(ui개발자), 개발자(서버개발자): HTML 중심이거나, 서버사이드가 감싸는 웹 구조의 형태를 지향하는 업무 스타일의 직군으로서 웹퍼블리셔는 사용자에게 보여지는 인터페이스 영역을 작업하고, 개발자는
    데이터의 비지니스 로직을 전반으로 담당한다. 웹퍼블리셔는 해외에서는 UI개발자로 불린다.
    <br>
    <br>
    프론트엔드, 백엔드 개발자: 프론트엔드 개발자는 백엔드 API에서 가져온 데이터의 출력, 입력을 통한 비지니스 로직 구성과 사용자와 대화하는 사용자 인터페이스 부분을 작업하는 개발자를 말한다.
    분별하기 헷갈리는 직종으로 웹퍼블리셔가 있는데, 웹퍼블리셔는 html 중심이거나, 서버사이드가 감싸는 구조 형태의 웹을 지향하는 웹퍼블리셔와 개발자의 업무 스타일의 직군으로서 웹표준 반응형웹과 UI를 만드는
    디자인 쪽에 가깝고, 클라이언드 사이드 영역이기도 하지만,
    프론트 엔드 개발자는 프론트엔드, 백엔드의 완전한 분리 구조를 지향하는 업무스타일의 직군으로서 웹퍼블리셔와 같이 인터페이스의 디자인 관점도 있지만, 웹퍼블리셔와 달리 컴포넌트 아키텍쳐를 지향하며, 이벤트나
    서버와 API 통신해서 로직을 어떻게 푸는 관점을 중시한다.
    백엔드 개발자도 기존 개발자와 스펙이 조금 다르고, 백엔드의 뷰는 화면개발이 아닌 API 개발이고, 백엔드 인증 처리도 따로 알아야 하며, 데이터베이스 분석과 API서버를 개발한다.
    프론트엔드에서 전달된 데이터의 포맷이나 데이터베이스 입출력 및 다양한 비즈니스 프로세스를 프로그래밍 코드로 구현하는 역할을 한다.
    데이터베이스, 웹서버, 네트워킹 등 웹 서버의 인프라에 대한 이해가 필요하다. 웹퍼블리셔와 개발자로 나뉜 방식은 모든 호출을 서버에서 가져와야 했고, 컴포넌트화가 안되었지만, 프론트엔드와 백엔드로 나뉜
    개발방식은
    서버의 컴퓨터와 사용자 컴퓨터가 http통신으로 데이터만 교환하고 완전히 분리구조를 지향한다.
    <br>
    <h2>웹 개발자들이 주로 작업하는 환경</h2>
    <ul>
      <li>운영 체제: 윈도, 유닉스, 리눅스</li>
      <li>클라이언트 측면 언어: HTML, CSS, Javascript, XML ,XHTML</li>
      <li>클라이언트 측면 js 프레임워크: jQuery, dojo , prototype, YUI, Jindo</li>
      <li>클라이언트 측면 ui 프레임워크: jQuery UI, fontawesome, bootstrap</li>
      <li>서버 측면 언어 : JAVA, Node.js, C#(ASP.NET), PHP, JSP, VB 스크립트(ASP), Python 펄, Ruby on Rails, grail</li>
      <li>프레임워크 : J2EE, ASP.NET MVC, ASP.NET Webform, Struts, Spring, ibatis , hibernate , gwt ,spring roo, sitemesh , oscache, tiles</li>
      <li>데이터베이스 : Oracle, MS SQL, Mysql, Postgres</li>
      <li>버전 관리 : WinCVS, TotoiseCVS, Subversion, Rational ClearCase, git</li>
      <li>웹 서버 : Nginx, Apache, Tomcat, JBoss, WAS, Bea Logic, IIS , jetty</li>
      <li>도구 : 이클립스, WASD, Editplus, Oracle Developer, 메모장, Notepad++, Putty, FTP 클라이언트, Zend Studio, Brackets, 비주얼 스튜디오</li>
    </ul>
  </div>

  <script>
    $(document).ready(function() {
      $(".fontsizebtn1, .fontsizebtn2, .fontsizebtn3").click(function() {
        let fontSize = $(this).data("fontsize");
        $(".changeSize").css("font-size", fontSize + "em");
      });
    });
  </script>
</body>

</html>

 

 

참고 코드

 

   $('#original').click(function () {
      font_size = 1;

      $('body').css('font-size', font_size + 'em');
   });

 

728x90

'Library > Jquery' 카테고리의 다른 글

[Jquery] slideToggle(), slideUp()  (0) 2024.04.16
[Jquery] wrap  (0) 2024.04.16
[Jquery] Scroll-top, header fix / addclass, removeclass  (0) 2024.04.16
[Jquery] Modal 팝업  (0) 2024.04.16
[Jquery] Upload profile  (0) 2024.04.12
728x90

 

 

<!DOCTYPE html>

<head>
<style>

* {
  box-sizing: border-box;
}
body {
  margin: 0;
  font-family: 'Noto Sans KR', sans-serif;
  font-weight: 300;
  font-size: 15px;
}
a {
  text-decoration: none;
}

/* Header */
header {
  height: 100px;
  background-color: #fff;
  text-align: center;
  line-height: 100px;
  font-size: 3em;
  background-color: #eee;
}

/* Section */
section {
  height: calc(100vh - 250px);
  background-color: #fff;
  text-align: center;
  line-height: 500px;
  font-size: 3em;
}

/* Footer */
footer {
  background-color: #37393d;
  color: #fff;
  height: 150px;
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 40px;
}
.copyright {
  width: 80%;
}
.family {
  width: 18%
}
.policy a {
  color: yellowgreen;
}
.policy a:hover {
  text-decoration: underline;
}
.policy a:last-child {
  color: #fff;
}
.info {
  color: #999;
}
.info p span {
  display: block;
}
.bar {
  display: inline-block;
  width: 1px;
  height: 10px;
  background-color: #555;
  margin: 0 10px;
}

/* Family Site */
.dropdown {
  width: 200px;
  position: relative;
  background-color: #303135;
  padding: 5px;
  border: 1px solid #555;
  cursor: pointer;
  float: right;
}
.sub-navi {
  padding: 0;
  margin: 0;
  list-style: none;
  position: absolute;
  line-height: 2em;
  width: 100%;
  background-color: #58595b;
  border: 1px solid#999;
  bottom: 100%;
  left: 0;
  border-bottom: none;
  display: none;
}
.sub-navi li {
  padding: 1px 10px;
  border-bottom: 1px solid #777;
}
.sub-navi li:hover {
  background-color: #333;
}
.sub-navi li a {
  color: #ccc;
}
.title:after {
  content:"\f107";
  font-family: fontawesome;
  position: absolute;
  top: 0;
  right:0;
  color: #ccc;
  width: 30px;
  height: 100%;
  text-align: center;
  line-height: 30px;
}
.title.act:after{
  transform: rotateX(180deg);
}
  </style>

</head>

<body>

  <div class="container">
    <header>header</header>
    <section>section</section>
    <footer>
      <div class="copyright">
        <div class="policy">
          <a href="#none">개인정보처리방침</a><em class="bar"></em><a href="#none">사이트맵</a>
        </div>
        <div class="info">
          <p>
            <span>
              서울시 서초구 비트캠프<em class="bar"></em>Tel. 010-1111-1111, 4346<em class="bar"></em>Fax. 012-110-1117<em class="bar"></em>E-mail. bit@bit.com
            </span>
            COPYRIGHT (C) BIT NAVER CLOUD
          </p>
        </div>
      </div>
      <div class="family">
        <div class="dropdown">
          <div class="title">FAMILY SITE</div>
          <ul class="sub-navi">
            <li><a href="#none1">강의실Log</a></li>
            <li><a href="#none2">채용</a></li>
            <li><a href="#none3">스토리</a></li>
            <li><a href="#none4">테크</a></li>
          </ul>
        </div>
      </div>
    </footer>
  </div>

<script>
 $('.title').click(function(){
  $('.sub-navi').slideToggle(200);
  $(this).toggleClass('act');
 });

 $('.sub-navi li').click(function(){
  $('.title').text($(this).text());
  $(this).parent('.sub-navi').slideUp(200);
 })
  </script>
</body>

</html>
728x90

'Library > Jquery' 카테고리의 다른 글

[Jquery] 버튼 누르면 폰트사이즈 변경  (0) 2024.04.17
[Jquery] wrap  (0) 2024.04.16
[Jquery] Scroll-top, header fix / addclass, removeclass  (0) 2024.04.16
[Jquery] Modal 팝업  (0) 2024.04.16
[Jquery] Upload profile  (0) 2024.04.12
728x90

<!DOCTYPE html>

<head>

  </style>

</head>

<body>

  <h1 class="test1">요소 복사</h1>
 
  <span class="test2">요소 감싸기</span>


  <span class="test3">요소 모두 한번에 감싸기</span>
  <span class="test3">요소 모두 한번에 감싸기</span>
  <span class="test3">요소 모두 한번에 감싸기</span>

  <div class="test4">안녕</div>

  <h1 class="heading">This is H1</h1>


<script>
  $('.test1').clone().insertAfter('.test1'); // 요소복사
  $('.test2').wrap('<div class="di"></div>'); // 요소 감싸기
  $('.test3').wrapAll('<p></p>'); // 모든 요소 감싸기
  $('.test4').wrapInner('<p></p>'); // 하위요소 감싸기
  $('.heading').replaceWith('<h1>제이쿼리</h1>')// 요소 바꾸기
  </script>
</body>

</html>
728x90

'Library > Jquery' 카테고리의 다른 글

[Jquery] 버튼 누르면 폰트사이즈 변경  (0) 2024.04.17
[Jquery] slideToggle(), slideUp()  (0) 2024.04.16
[Jquery] Scroll-top, header fix / addclass, removeclass  (0) 2024.04.16
[Jquery] Modal 팝업  (0) 2024.04.16
[Jquery] Upload profile  (0) 2024.04.12
728x90

 

 

<!DOCTYPE html>

<head>
  <style>
    body {
      margin: 0;
      height: 2000px;
    }

    header {
      display: flex;
      justify-content: center;
      padding: 20px;
      width: 100%;
      background-color: #eee;
    }

    .header-inner {
      width: 80%;
      display: flex;
      justify-content: space-between;
    }

    .gnb a {
      text-transform: capitalize;
    }

    .top-banner {
      height: 300px;
      background-color: pink;
      font-size: 1.5em;
      display: flex;
      justify-content: center;
      align-items: center;
    }

    header.act {
      position: fixed;
      top: 0;
      left: 0;
    }
  </style>

</head>

<body>

  <div class="container">

    <div class="top-banner" role="banner">Content</div>

    <header>
      <div class="header-inner">
        <div class="logo">jquery</div>
        <div class="gnb" role="navigation">
          <a href="#none">home</a>
          <a href="#none">company</a>
          <a href="#none">product</a>
          <a href="#none">contact</a>
        </div>
      </div>

      <script>
        let n = $('header').offset().top; //300


        $(window).scroll(function () {
          if ($(this).scrollTop() > n) {
            $('header').addClass("act");
          }
          else {
            $('header').removeClass('act');
          }
        })

      </script>
</body>

</html>

 


 

<!DOCTYPE html>

<head>
  <style>

    a {
      text-decoration: none;
      color: #000;
    }


    body {
      margin: 0;
      height: 150vh;
      ;
    }

    header {
      display: flex;
      justify-content: center;
      padding: 20px;
      position: fixed;
      width: 100%;
      background-color: #eee;
      transition: 0.5s;
    }

    .header-inner {
      width: 80%;
      display: flex;
      justify-content: space-between;
    }

    .gnb a {
      text-transform: capitalize;
    }

    .btn-top {
      width: 40px;
      height: 40px;
      position: fixed;
      font-size: 2em;
      color: #fff !important;
      right: 20px;
      bottom: -50px;
      background-color: rgba(0, 0, 0, 0.5);
      border-radius: 5px;
      text-align: center;
      line-height: 45px;
      transition: 0.5s;
    }

    header.active {
      background-color: #fff;
      box-shadow: 0 3px 5px rgba(0, 0, 0, 0.05);
    }

    .btn-top.active {
      bottom: 20px;
    }
  </style>

</head>

<body>

  <header>
    <div class="header-inner">
      <div class="logo">Jquery</div>
      <div class="gnb">
        <a href="#none">home</a>
        <a href="#none">company</a>
        <a href="#none">product</a>
        <a href="#none">contact</a>
      </div>
    </div>
  </header>

  <a class="btn-top" href="#">
    <i class="bi bi-arrow-up-short"></i>
  </a>


<script>
$(window).scroll(function(){
if($(window).scrollTop() > 50){
$('header, .btn-top').addClass('active');
}
else{
$('header, .btn-top').removeClass('active');
}
})
  </script>
</body>

</html>

 

728x90

'Library > Jquery' 카테고리의 다른 글

[Jquery] slideToggle(), slideUp()  (0) 2024.04.16
[Jquery] wrap  (0) 2024.04.16
[Jquery] Modal 팝업  (0) 2024.04.16
[Jquery] Upload profile  (0) 2024.04.12
[Jquery] 포인트정리!  (0) 2024.04.11
728x90

 

<!DOCTYPE html>

<head>
  <style>
    body {
      margin: 0;
      display: flex;
      justify-content: center;
      align-items: center;
      height: 100vh;
    }

    .modal-frame {
      text-align: center;
    }

    .modal-wrapper {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      background-color: rgba(0, 0, 0, 0.2);
      opacity: 0;
      visibility: hidden;
      transition: 0.35s;
    }

    .modal {
      background-color: #fff;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -70%);
      box-shadow: 0 0 1.5em hsla(0, 0%, 0%, 0.35);
      padding: 20px;
      transition: 0.35s;
    }

    .modal-header {
      border-bottom: 1px solid #ddd;
    }

    .modal-header h2 {
      margin-top: 0;
    }

    .close-modal {
      float: right;
    }

    .modal-wrapper.act {
      opacity: 1;
      visibility: visible;
    }

    .modal-wrapper.act.modal {
      transform: translate(-50%, -50%);
    }
  </style>

</head>

<body>

  <div class="modal-frame">
    <h2>Modal</h2>
    <button class="open-modal">Open Modal</button>
  </div>

  <div class="modal-wrapper">
    <div class="modal">
      <div class="modal-header">
        <h2 class="modal-heading">modal</h2>
      </div>
      <div class="modal-content">
        <p>
          안녕하세요 홍길동입니다
        </p>
        <button class="close-modal">Close</button>
      </div>
    </div>
  </div>

  <script>
    $('.open-modal').click(function () {
      $('.modal-wrapper').addClass('act');
    });

    $('.close-modal').click(function () {
      $('.modal-wrapper').removeClass('act');
    });
  </script>
</body>

</html>
728x90

'Library > Jquery' 카테고리의 다른 글

[Jquery] wrap  (0) 2024.04.16
[Jquery] Scroll-top, header fix / addclass, removeclass  (0) 2024.04.16
[Jquery] Upload profile  (0) 2024.04.12
[Jquery] 포인트정리!  (0) 2024.04.11
[Jquery] .html .trigger / .filter  (0) 2024.04.11

+ Recent posts