안녕하세요 상훈입니다.

우리의 WebApplication을 조금이라도 더 예쁘게 꾸며줄 css - transition을 포스팅하겠습니다.

간단한 설명과 함께 화면 구성

 

그 중 hover의 이벤트를 사용하려고 합니다.

html에서는 클래스명만 정해주시면 됩니다.

<body>
    <p>width, height, bg-color, transform 을 위한 트랜지션 결합.</p>
    <div class="transform"></div>
</body>

클래스명 "transform"에 대해서 아래의 style을 지정해주면 됩니다.

<style>
.transform{
    border: 1px solid black;
    display: block;
    width: 100px;
    height: 100px;
    background-color: #0000FF;
    
    -webkit-transition: width 2s, height 2s, background-color 2s, -webkit-transform 2s;
    transition: width 2s, height 2s, background-color 2s, transform 2s;
}

.transform:hover {
    background-color: #FFCCCC;
    width:200px;
    height:200px;
    -webkit-transform: rotate(180deg);
    transform: rotate(180deg);
}
</style>

 

rotate를 보시면 아시다시피 transitiontransform으로 지정한 내용을 살펴보면,

 

2초동안 [ 가로 200px, 세로 200px, 배경색 #FFCCCC, 180도 회전 ] 을 하게됩니다.

결과물

이상입니다.

해당 내용은 전부 'MDN WebDocs' 에 작성되어져 있습니다.

 

CSS 트랜지션 사용하기 - CSS: Cascading Style Sheets | MDN

CSS 트랜지션은 CSS 속성을 변경할 때 애니메이션 속도를 조절하는 방법을 제공합니다. 속성 변경이 즉시 영향을 미치게 하는 대신, 그 속성의 변화가 일정 기간에 걸쳐 일어나도록 할 수 있습니

developer.mozilla.org

 

 

 

반응형

안녕하세요 상훈입니다.

Vue.js + tailwind.css 를 이용하여 모달창을 구현하도록 하겠습니다.

컴포넌트의 개념을 첨가하였으니, 양해바랍니다. (컴포넌트 넣을줄만 알면 됨)

모달창 구현하기

 

<template >
  <div
    v-if="ModalDisplay"
    class="shadow-lg w-full h-full flex bg-black bg-opacity-70 justify-center align-middle items-center ">
      <div class="w-1/3 h-1/2 bg-white rounded relative">
        <div class="relative w-full">
            <div class="flex text-center items-center justify-center pt-2">
                <h1 class="font-bold text-2xl">모달창 레이아웃</h1>
            </div>
            <svg 
                @click="ModalDisplay = false" 
                id="closeModalBtn" xmlns="http://www.w3.org/2000/svg" class=" cursor-pointer h-10 w-10 absolute top-0 right-0 hover:text-red-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
                <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M6 18L18 6M6 6l12 12" />
            </svg>
        </div>
        <div class="w-full pt-5">
            <hr>
            <p class="py-5 px-5 text-xl">
                안녕하십니까?<br>
                모달창입니다.
            </p>
        </div>
        <div class="w-full">
            <button
                @click="ModalDisplay = false" 
                class="absolute bottom-0 right-0 border border-solid round w-24 h-10  my-2 mx-3 hover:text-red-700 hover:border-red-500" >
            닫기</button>
        </div>
      </div>
  </div>
</template>

<script>
export default {
    data() {
        return {
            ModalDisplay: true,
        }
    }
}
</script>

<style>

</style>

 

 

v-if @click 바인딩으로 해당 기능을 구현하였습니다.

 

ModalDisplay기본값으로 true로 해서 자동적으로 출력되어져있게 해놓고,
닫기 버튼이나, X버튼을 눌렀을 때 종료가 되게 하는 겁니다. 

 

svgbutton으로 감싸서 button으로 바꾸는게 용도에 맞아 좋아보입니다.

 

모달창 구현하기 완성

 


혹시나해서 App.vue 도 게시

<template>
  <Modal />

</template>

<script>
import Modal from './components/Modal.vue';

export default {
  components: {
    Modal,
  },
}
</script>

<style>

</style>

 

반응형

 

안녕하세요 상훈입니다.

이 글을 PHP에 올려야할지 javascript에 올려야할지 고민을 1초 정도 했고 자바스크립트 기반이기 때문에 자바스크립트에 게시하게 되었습니다.

해당 과정은  [  select-box의 한 항목을 선택하면, 그 아래의 select-box가 활성화되면서 해당되는 리스트를 출력  ]  합니다.

Ajaxphp에 호출을 하면, php의 데이터베이스에서 데이터를 출력하여 배열에 담고,
담은 배열을 json endcode하여 출력하는 값을 json 형식으로 받아, 파싱하여 출력하는 것입니다.

 

 

1. javascript(ajax) (제이쿼리 필요합니다! [ cdn 링크 ] )
2. php

 

[ jQuery ] jQuery 제이쿼리 CDN 링크 공유

안녕하세요 상훈입니다. 자바스크립트 - 제이쿼리의 cdn을 공유합니다. 해당 코드 한줄을 내에 넣어줍니다.

code-hoon.tistory.com

 

HTML

<select id="name" onchange="selectItem()" name="name">
   <option value="" selected>아이템 리스트들</option>
   <option value="item01" >아이템 리스트1</option>
   <option value="item02" >아이템 리스트2</option>
   <option value="item03" >아이템 리스트3</option>
</select>
<select id="item_name">
   <option value="">선택해주세요</option>
</select>

 

이러한 html 요소들이 존재합니다.

onchange() 기능을 이용해 js에서 감지할 수 있도록 함수로 선언해주었습니다.

좌측에 select-box와 우측에 빈 select-box

 

리스트 요소 중 하나를 선택하면 해당되는 2번째 select-box에 값을 출력해줍니다. [ 데이터베이스 이용 ]

JAVASCRIPT  -  아래에서 상세히 설명

<script>
  function selectItem(value){
      any_name = document.querySelector('#name').value
      
      $.ajax({
        url: "getItemList.php",
        method: "POST",
        data: { any_name: any_name }
      })
      .done(
      	(result) => {
      		if(result === ''){
      			const item_name = document.querySelector('#item_name')
      			while(item_name.hasChildNodes() ){
      				item_name.removeChild(item_name.firstChild)
      			}
      			$('#item_name').append('<option value="">' + '선택해주세요 ' + '</option>');	
      		}else{
      			const item_name = jQuery.parseJSON(result)
      			i = 0
      			$.each(item_name, function(){
      				$('#item_name').append('<option value="' + item_name[i] + '">' + item_name[i] + '</option>');
      				i++
      			});
      		}
      	}
      )
      .fail( () => { alert('다시 시도해주세요.') })
  }
</script>

 

ajax 기본 틀

클릭시 복사할 수 있는 페이지로 이동(새창)

 

PHP [getItemList.php]

<?php
// 
if($any_name = $_POST['any_name'] ){
    
    //database 연동
    include '../db.php'; 
    
    //sql 작성
    $sql = "select item_name from 테이블 where 컬럼명 = '$any_name' ";
    $result = mysqli_query($conn, $sql);
    
	// 빈 배열 $array[]에 $row['item_name'] 넣어주기
    while($row = mysqli_fetch_assoc($result)){
        $array[] = $row['item_name'];
    }

	// json 객체로 변환하여 echo
    echo json_encode($array, JSON_UNESCAPED_UNICODE);

    
}else{
    echo ""; // 만약 선택하지 않았을 때 반환하는 값 : null
}

 


처음부터 보자면, 

1. name 이라는 id 를 가진 요소의 을 가져온다. ( 첫번째 select-box에서 선택한 요소 )

2. ajax를 이용하여 데이터를 송신한다. 

  [ 목적지 : url, 
    방식 : method(get, post) , 
    송신할 요소 (parameter) : data  ] 

 

3. php 에서 데이터를 출력하고 json 객체 출력해주기
   -> 주석으로 충분히 설명을 했다고 생각합니다.

 

4. javascript 에서 .done 부분

 

if영역(return null)else영역(return json)은 각기 다른 결과를 나타냅니다. 

else영역(return json)부터 보자면, 
1. item_name이라는 상수에 JSON을 파싱한 결과값(result)을 담습니다.
2. jQuery의 each함수를 사용하여, item_name을 반복해줍니다.
3. 각각 가지고 있는 item_name의 개수에 따라 결과에 추가 리스트의 개수가 달라집니다.

이와 같이 값이 호출되었습니다.

if영역(return null) 에서는 추가했던 option제거해주는 역할을 합니다.
 (혹은 이 내용을 기본값으로 하는 것도 좋을것같군요. 기본적으로 속을 비워주고, option을 채워주는 방식으로요.)

 


평소 ajax를 잘 사용하지 않아 해당 내용을 작성하는데에 조금 헤맸습니다.

이번 기회로인해 공부 잘하고 갑니다. ㅎㅎ

 

 

참고

 

jQuery.ajax() | jQuery API Documentation

Description: Perform an asynchronous HTTP (Ajax) request. The $.ajax() function underlies all Ajax requests sent by jQuery. It is often unnecessary to directly call this function, as several higher-level alternatives like $.get() and .load() are available

api.jquery.com

 

 

[자바스크립트] 모든 자식 엘레멘트 삭제하기 (Remove all children)

[Javascript] Removing all children using DOM * HTML로 프로그래밍하다보면 모든 자식 노드를 삭제해야하는 경우가 생긴다 그럴때 사용하면 되는 간단한 팁이다. var cell = document.getElementById("cell"); w..

unikys.tistory.com

 

이상입니다.

 

반응형

안녕하세요 상훈입니다.

$.ajax({
   url: ' ' ,
   method: ' ' ,
   data: {   },
   erorr: (  ) => {  },
   success: (  ) => {  }
})

이랬던 ajax가 변경되었습니다.

 

$.ajax({
   url: ' ' ,
   method: ' ' ,
   data: {  } ,
})
.done (  )
.fail (  )

 

참고 바랍니다.

 

 

jQuery.ajax() | jQuery API Documentation

Description: Perform an asynchronous HTTP (Ajax) request. The $.ajax() function underlies all Ajax requests sent by jQuery. It is often unnecessary to directly call this function, as several higher-level alternatives like $.get() and .load() are available

api.jquery.com

 

반응형

 

안녕하세요 상훈입니다. 

금일은 Vue.js - Tailwind.css 를 이용하여 간단한(나는 안간단함ㅠ) 예제를 구현해보려고합니다.

결과물

프로젝트 설치방법은 Tailwind.css에서 git clone(클릭시 이동) 방식으로 진행하여
npm install, build를 통해 npm module들을 다운로드 받고,
vue.js는 cdn으로 연동하였습니다.

다음번에는 vue-cli를 통해 진행하는것도 좋을 것 같습니다.

사용한 vue.js 항목으로는 
v-if, v-for, v-on, v-model, v-show, v-binding 등이고, tailwind.css 의 클래스를 입력하는 것들이 생각보다 빡셌습니다. 후...

많은 조건문을 넣느라 토하는줄 

많은 조건문-클래스 입력의 예시,,

 

 

해당 내용은 컴포넌트의 분리 없이 한개의 html로 모두 구성이 되었습니다.

componenets를 다루지 않은게 조금 아쉽네요.

 

 

요 부분은 왜 [ ] 대괄호를 사용한걸까요?

 

 

 

강의

전체 프로젝트

 

GitHub - ThirusOfficial/simple-quiz-app-vue3-tailwind-css

Contribute to ThirusOfficial/simple-quiz-app-vue3-tailwind-css development by creating an account on GitHub.

github.com

 

감사합니다.

 

반응형

안녕하세요 상훈입니다.

Vue.js + Tailwind.css 를 처음이용하여 클론코딩을 해보았는데, 결과를 포스팅하겠습니다.

 

핀터레스트(pinterest)클론코딩(clone coding) 했고, 해당 UI의 가장 기본적인 요소만 Vue.js로 코딩하였습니다.

 

Pinterest

요리법, 집 꾸미기 아이디어, 영감을 주는 스타일 등 시도해 볼 만한 아이디어를 찾아서 저장하세요.

www.pinterest.co.kr

 

기본적인 Vue.js의 지식을 갖고 있었기 때문에 vue 자체의 난이도는 적당하였고, 도움이 잘 되었습니다.

 

pinterest feed

 

그러나 왜인지 모르게 자꾸 image의 경로가 안잡혔고, 결과적으로도 잡지 못하였습니다. (아예 width, height 없음)

따로 <img src="./assets/1.jpg"> 이렇게 주었을 때는 또 잘 작동하더라구요. 왜냐고.

 

 

아래의 모든 항목이 Component를 통해 참조는 되었는데, class가 적용이 안된건지 이해를 못하겠군요..

해당 컴포넌트는 아래와 같이 mouseover, mouseleave에 해당하는 경우의 값을 주었는데 말이죠.

@mouseover="hover = true" @mouseleave="hover = false"

기본으로 false를 주었는데 작동하지 않네요.

 

왜일까유 v-if으로 주었어야하나?? 이게 뭐람 ㅋㅋㅋ

tailwind 해보니까 클래스명이 직관적이어서 좋았습니다. 

부트스트랩의 클래스명보다 좀 더 좋다고 느껴졌어요. 다만,,, 적용하는 과정이 조금 까다로웠어요.

cdn으로 하면 편했을텐데 해당 cdn 없이 설치로 진행하였습니다.

 

tailwind.css cdn.

 <link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet">.

 

 

 

강의

 

참고

 

v-bind:src에서 이미지를 불러오지 못할때

이미지를 vue에서 가져올때 라고 작성후 크롬 개발자모드로 확인하면 소스는 변환되어 보이지만 이미지는 정상적으로 보입니다. 그러나, src 속성을 바인딩 하고 크롬 개발자모드로 확인하면 소

hwd3527.github.io

 

반응형

안녕하세요 상훈입니다.

해당 에러에 대해 말씀드리겠습니다.

바인드를 하려는 대상에 key설정되지 않았기에 해당 에러가 발생하였습니다.

그러니 :key를 추가하면 됩니다.

예시)

이렇게 button을 data-binding으로 v-for를 사용하려고할 때, key를 정해주지 않아 발생하는 에러입니다.

위처럼 key 값을 정해주면 해결됩니다.

 

이상입니다.

 

반응형

안녕하세요 상훈입니다.

Vue.js - Tailwind.css 를 적용하려고 하는데 에러가 발생하였습니다.

This relative module was not found: * ./assets/index.css?vue&type=style&index=0&lang=css in ./src/App.vue
This relative module was not found: * ./routes/index.js in ./src/main.js

자세히 보니 경로가 잘못되었더군요

그래서 본래 

였던 것을 

로 변경하였습니다.

그리고 다시 

npm run serve를 통해 vue-cli를 실행시켜주니, 에러가 해결되었습니다.


만약 이런 사소한 경로 잡는 문제로 해결이 안된다면, 아래의 해당 블로그를 참조 바랍니다.

 

vue error 해결법 : This relative module was not found: * ./routes/index.js in ./src/main.js

vue에서 처음 프로젝트를 실행하다보면 아래와 같은 에라가 발생하는 경우가 있다. This relative module was not found: * ./routes/index.js in ./src/main.js 위와 같은 에러는 main.js에서 해당 index.js 파일..

wotres.tistory.com

 

 

이상입니다. 감사합니다.

반응형

+ Recent posts