์ค์์ดํผ ์ฌ๋ผ์ด๋ autoplay๋ก ๋์ด๊ฐ๊ฒ ๋๋ฉด ํ
์คํธ๊ฐ ์๊ฐํ
์ ๋๊ณ
์ข์์ ์ฐ๋ก ์ค๋ฅด๋ฅต ๋ฑ์ฅํ๋ ํ
์คํธ ํจ๊ณผ๊ตฌํ
<!--css-->
.sc-visual .swiper-slide .text{
position: absolute;
text-align: center;
top: 50%;
transform: translate(-50%,-50%);
left: 50%;
font-size: 100px;
line-height: 1.2;
letter-spacing: -2.4px;
font-weight: 800;
color: #fff;
}
.sc-visual .swiper-slide .text br{display: none;}
.sc-visual .swiper-slide .text span{
display: block;
white-space: nowrap;
width:0%; ๐
overflow: hidden;๐
opacity: 0; ๐
transition: width 0.3s 0.8s,opacity 0.8s 0.8s;
}
.sc-visual .swiper-slide-active .text span{
width: 100%; ๐
opacity: 1; ๐
}
swiper slide์ .text์ width: 0%
๋ฅผ ์ฃผ๊ณ ๋์น๋ฉด ์ฌ๋ผ์ง๋๋ก
overflow: hidden
์ฒ๋ฆฌ๋ฅผ ํ์๋ค. ๊ทธ ํ์๋ ํฌ๋ช
๋๋ฅผ 0์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๋ํ๋ ๋ ํฌ๋ช
๋ 0์์ ์์ํ๋๋ก ์ค์ !
๊ทธ ํ swiper slide๊ฐ active ์ํ๊ฐ ๋์์ ๋์ .text ํจ๊ณผ๋ฅผ ์ฃผ๋ฉด ๋์ด๋ค! width: 100%;
, opacity: 1;
swiper-slide-active ์ํ๊ฐ ๋๋ฉด width๊ฐ 0% โ 100%,
opacity๊ฐ 0 โ 1์ด ๋๋ค!, ์ข๋ ์์ฐ์ค๋ฝ๊ฒ ์ฒ๋ฆฌ๋ฅผ ํ๊ธฐ์ํด
transition์ ์ฃผ๋๋ฐ width์ opacity๋ฅผ ๊ฐ๊ฐ ๋ช
๋ช
ํ์ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
transition: width 0.3s 0.8s,opacity 0.8s 0.8s;
width์ 0.3s๋ ์ง์์๊ฐ์ ์๋ฏธ, 0.8s๋ delay๋ฅผ ์๋ฏธํ๋ค.
<!--js-->
const mainSwiper = new Swiper('.sc-visual .swiper', {
autoplay:{
delay:5000,
},
loop :true,
speed: 1000,
simulateTouch: false, //๋ง์ฐ์ค ๋๋๊ทธ ๋ง๊ธฐ
});
์๋์ผ๋ก ์ฌ๋ผ์ด๋ ๋์ง ์๋๋ก simulateTouch: false
๋ก ๋ง์ฐ์ค ๋๋๊ทธ๋ฅผ ๋ง์์ฃผ์๋ค.
speed๊ฐ์ ์กฐ์ ํ์ฌ ๋ค์ ์ฌ๋ผ์ด๋๋ก ๋์ด๊ฐ ๋ ๋ถ๋๋ฝ๊ฒ ๋ณด์ฌ์ง๋๋ก ํ๋ค.
<!--html-->
<div class="cor-area [select-area]">
<span class="title">๋ฒ์ธ</span>
<select name="" class="selectbox">
<option value="" disabled selected>๋ฒ์ธ์ ํ</option>
<option value="NAVER">NAVER</option>
<option value="NAVER Cloud">NAVER Cloud</option>
<option value="WORKS MOBILE">WORKS MOBILE</option>
<option value="SNOW">SNOW</option>
<option value="NAVER LABS">NAVER LABS</option>
<option value="NAVER WEBTOON">NAVER WEBTOON</option>
<option value="NAVER FINANCIAL">NAVER FINANCIAL</option>
<option value="NAVER I&S">NAVER I&S</option>
</select>
</div>
์ค์์ดํผ์ ๋ค๋น๊ฒ์ด์
์ด ์ฌ๋ผ์ด๋ ๋งจ ์ฒ์์ ์ค๊ฑฐ๋, ๋ง์ง๋ง์ ๋ค๋ค๋์ ๋ ๋ฒํผ์ ์์์ ๋ณ๊ฒฝํ๋๋ก ํ๋ ค๊ณ ํ๋ค.
<!--js-->
on:{
reachBeginning ๐: function() {
var swiperPrev = $('.swiper .prev-btn');
swiperPrev.addClass('.swiper-button-disabled');
},
reachEnd ๐: function() {
var swiperNext = $('.swiper .next-btn');
swiperNext.addClass('swiper-button-disabled');
}
}
์ฒ์ ์๋ ํ์์ ๋ swiper์ on ์์ฑ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์ฃผ๋ ค๊ณ ํ๋ค.
reachBeginning
์ด๋ผ๋ ๋งจ์ฒ์์ ๋ค๋ค๋์ ๋ ์ด๋ฒคํธ ๋ฐํ,
reachEnd
๋ง์ง๋ง์ ๋ค๋ค๋์ ๋ ์ด๋ฒคํธ ๋ฐํ์ด ๋๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์งํํ๋๋ฐ....
<!--css-->
.sc-cont .swiper .control-area .swiper-button-disabled{
opacity: 0.4;
}
.swiper-button-disabled์์ -disabled
๋ผ๋ ํด๋์ค๋ช
์ ์ค์์ดํผ์ ์์์ ์ฒ์์ด๋ ๋์ ๋ค๋ค๋ผ์ ์ ์ฉ์ด ๋์ง ์๋ ๊ตฌ๊ฐ์ ์ ์ฉ์ด ๋์ด, ๊ทธ๋ฅ .swiper-button-disabled์ css๋ฅผ ๋ฃ์ด์ฃผ๋ฉด js๋ฅผ ์ธ ํ์๋ ์์ด ์ ์ฉ์ด ๊ฐ๋ฅํ๋ค!!
<option value="" disabled selected>๋ฒ์ธ์ ํ</option>
'disabled selected'
๋ฌธ๊ตฌ๋ฅผ option๋ ์์ ์์ฑํ๋ฉด placeholder์ฒ๋ผ ํ
์คํธ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ณด์ฌ์ง๋ค.
disabled
๋ ๋ ์ ํํ ์ ์๋๋ก ํ๋ ์์ฑ
selected
๋ placeholder์ฒ๋ผ ํ ์คํธ๊ฐ ๊ธฐ๋ณธ์ผ๋ก ๋ณด์ฌ์ง
.sc-search .select-flex select option:disabled { display: none; }
CSS๋ก disabled์ธ select option์ display: none; ์ฒ๋ฆฌํ๋ฉด ์ ํ ๋ฆฌ์คํธ์ ๋ณด์ฌ์ง์ง ์๋๋ค.
input::placeholder{
font-weight: bold;
color: #d0d0d0;
}
์์ ๊ฐ์ด placeholder๋ ์ ํํด css์์ ์ด ๊ฐ๋ฅํ๋ค.
$('select').change(function(){
$(this).css('color','#000');
});
์๋ฌด๊ฒ๋ ์ ํํ์ง ์์ ์ฒ์ ํ ์ค๋ ํ์์ด ๋ง์ผ๋ ์ ํํ์ ๋๋ ๊ฒ์ ์์ด์ด์ผ ํ๋ ๊ฒฝ์ฐ!
select๋ click ์ด๋ฒคํธ๊ฐ ์๋๋ผ,
๊ฐ์ ์ ํํ์ ๋ ์ด๋ฒคํธ๋กchange
๋ผ๋ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉ!!
์ฌ์ดํธ ์์ ์ ํ ๋ ๋ชจ๋ฐ์ผ์ ๋จผ์ ์์ ํ pc๋ฅผ ์์ ํ๋ ๊ฒ์ด ๋ ์ฉ์ดํ๋ค๊ณ ํ๋ค. ๋ชจ๋ฐ์ผ์์ ์์ ํ์ pc๋ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ด๋ค.
๋ค์ํ ํ๋ฉด ํด์๋์ ๋ฐ๋ผ HTML์ ์ ์ฉํ๋ ์คํ์ผ์ ์ ํํ ์ ์๋ CSS3์ ์์ฑ์ผ๋ก ์ ์ฐํ๊ฒ ์ปจํ
์ธ ๋ฅผ ๋ฐฐ์นํ ์ ์๋ค.
๊ธฐ๋ณธ ๋ฌธ๋ฒ!
@media (screen) {
content;
}
์์ฑ ์์น!
1. ๊ฐ css ํ์ผ ํ๋จ์ ํ๊ธฐ๋ ํ๊ณ ~
2. response.css ํ์ผ์ ์์ฑ ํ๊ธฐ๋ ํ๊ณ ~
3. ์์ค ๋ฐ๋ก ๋ฐ์ ์์ฑ (scss) ํ๊ธฐ๋ ํ๊ณ ~
์์ฑ ๋ฐฉ๋ฒ!
//๋๋ต ๊ตฌํ์ด ์๋ ๊ฒ ๊ฐ์ ๋์ด์์ ์์
. ๋ณดํต 1200 ์ด์
/* ์์pc [1025px]๊น์ง๋ง์กํ๋ฉด๋. */
@media (max-width:1229px) {}
/* ๋ชจ๋ฐ์ผ๋ฒ์ [768px]๊น์ง๋ง์กํ๋ฉด๋. */
@media (max-width:1024px) {}
/* ๋ชจ๋ฐ์ผ๋ฒ์ [320]๊น์ง๋ง์กํ๋ฉด๋. */
@media (max-width:767px) {}
๊ผญ ์ด ์์น๋ก ํด์ผํด! ๋ผ๋ ์ ๋ต์ ์๋ค.
๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ๋ถ๊ธฐ์ ์ ์๋์ ๊ฐ๋ค.
- ๋ชจ๋ฐ์ผ : 320px ~ 767 ๋๋ 768px
- ํ๋ธ๋ฆฟ : 768px ~ 1024px
- ๋ ธํธ๋ถ : 1025px ~ 1200 ๋๋ 1280px
- ๋ฐ์คํฌํ : 1200, 1280px ...๋ฑ๋ฑ (1200 ์ด์)
swiper๋ breakpoints๋ก ๋ฐ์ํ์ ์ง์ํ๋ค.
const swiper = new Swiper('.swiper-container', {
slidesPerView: 1 โ
,
spaceBetween: 10,
breakpoints: {
768: {
slidesPerView: 2, //๋ธ๋ผ์ฐ์ ๊ฐ 768๋ณด๋ค ํด ๋
spaceBetween: 40,
},
1024: {
slidesPerView: 3, //๋ธ๋ผ์ฐ์ ๊ฐ 1024๋ณด๋ค ํด ๋
spaceBetween: 50,
},
});
โ ํ์๊ฐ ๋ ๊ณณ์ ๋ณด๋ฉด slidesPerView: 1๋ก ์์ ์ด ๋์ด์๋๋ฐ, ์ด ๋ถ๋ถ์ ๋ชจ๋ฐ์ผ ๊ธฐ๋ฐ์ ๊ธฐ์ค์ผ๋ก ์ก๊ณ ์ฐจ์ธฐ ์ฌ์ด์ฆ๋ฅผ ๋๋ ค๊ฐ๋ฉฐ ์กฐ์ ์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์ 1๋ก ์์ ์ ํ์๋ค.
์๋ ๋ชจ๋ฐ์ผ ๋๋ ์ฌ๋ผ์ด๋๊ฐ ํ ๊ฐ 768 ์ฌ์ด์ฆ ์ด์์ผ ๋๋ 2๊ฐ 1024์ฌ์ด์ฆ ์ด์ ์ผ ๋๋ 3๊ฐ๋ผ๋ ์์ ์ฝ๋์ด๋ค.
<div class="group-search2">
<button class="search-box">Search Jobs</button>
<div class="pop-search">
<div class="search-wrap"><input type="text" class="btn-search" placeholder="Search Jobs"></input></div>
<ul class="list">
<span class="pop-tilte">์ง๊ตฐ/์ง๋ฌด</span>
<li class="item">
<a href="" class="depth1">Tech</a>
<div class="sub">
<div class="chk-wrap depth-title">
<input type="checkbox" id="tech">๐
<label for="tech">์ ์ฒด</label>๐
</div>
<ul class="depth2" data-parent="tech">๐
<li>
<a href="">Software Development</a>
<ul class="depth3">
<li>
<div class="chk-wrap">
<input type="checkbox" id="soft1">โจ
<label for="soft1">Frontend</label>โจ
</div>
</li>
<li>
<div class="chk-wrap">
<input type="checkbox" id="soft2">โจ
<label for="soft2">Android</label>โจ
</div>
</li>
</ul>
</li>
(...์๋ต)
id๋ก label๊ณผ input ์ฐ๊ฒฐ : input id์ label for ๊ฐ์ ๊ฐ๊ฒ (tech)
//์ ์ฒด ๋ถ๋ถ
<input type="checkbox" id="tech">๐
<label for="tech">์ ์ฒด</label>๐
//ํ์ ๋ฆฌ์คํธ ๋ถ๋ถ
<input type="checkbox" id="soft1">โจ
<label for="soft1">Frontend</label>โจ
์ฒดํฌ๋ฐ์ค ์์ญ์ ๋์์ธ ์์ ์ด ๋ถ๊ฐํ์ฌ ์จ๊น ์ฒ๋ฆฌ ํ
๊พธ๋ฐ ์์์ธ ์ฒดํฌ๋ฐ์ค๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
// blind์ ๋์ผํ๊ฒ ์ค์ , ์ฒดํฌ๋ฐ์ค ์์ญ ์จ๊ธฐ๊ธฐ!
.chk-wrap input {
position: absolute;
width: 1px;
height: 1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
margin: -1px;
}
.chk-wrap label::before {
content: '';
width: 8px;
height: 8px;
border: 1px solid #d0d0d0;
border-radius: 50%;
}
.chk-wrap input:checked+label::before {
background: #000;
}
click ์ด๋ฒคํธ๋ก ๋ชจ๋ input์ด ์ฒดํฌ ๋์ด์์ผ๋ฉด ํด์
๊ทธ๋ ์ง ์๋ค๋ฉด ๋ชจ๋ input์ ์ฒดํฌ ํ์ฑํ
$('.depth-title label').click(function(){
idVal=$(this).siblings('input').attr('id');
if($(this).siblings('input').prop('checked') === true){
$(`[data-parent="${idVal}"]`).find('input').prop('checked',false)
}else{
$(`[data-parent="${idVal}"]`).find('input').prop('checked',true)
}
});
$('.btn-clear').click(function () {
$("input[type='checkbox']").prop("checked", false);
});
<div class="sub">
<div class="chk-wrap depth-title">
<input type="checkbox" id<="tech">
<label class="all-chk" for="tech">์ ์ฒด</label>
</div>
<ul class="depth2" data-parent="tech">๐
<li>
<a href="">Software Development</a>
<ul class="depth3">
<li>
<div class="chk-wrap">
<input type="checkbox" id="soft1">
<label for="soft1">Frontend</label>
</div>
</li>
</ul>
<li>
(...์๋ต)
$('.depth3 .chk-wrap label').click(function(){
parentName = $(this).parents('.depth2').data('parent');
// ์ฒดํฌ์๋์์ ๊ฐ์๋ฅผํ์
0,1,2,
// ์ฒดํฌ์๋์์ ๊ฐ์๋ฅผํ์
1,2,3,
if($(this).siblings('input').is(':checked')){
if($(`[data-parent="${parentName}"] input:checked`).length === 1){
๐ $(`#${parentName}`).prop('checked',false)
}
}
})
depth3์ chk-wrap์ label์ parents(๋ถ๋ชจ์ค์์~)
depth2์ธ ํด๋์ค์ data-parent๊ฐ์ parentName ์ผ๋ก ๋ช
๋ช
ํ๊ณ ,
depth3์ chk-wrap์ labelํ๊ทธ๋ฅผ ํด๋ฆญ์์ ํด๋น ๋ผ๋ฒจ์ ํ์ ์ธ
inputํ๊ทธ๊ฐ .is(':checked') (์ต์
์ด checked ์ํ)๊ฐ 1์ด๋ ๋!
[data-parent="${parentName}"]
์ ์์ฑ์ checked๋ฅผ false(ํด์ ) ์ํจ๋ค.