# tailwind css應用相關筆記 ###### tags: `tailwind`,`css` ## 切版&排版 ### 上方navbar,左側sidebar ```htmlembedded= <div class=" bg-green-700 h-[10vh] w-full -z-10 flex pl-4 "> <span class="leading-[10vh] text-white text-2xl font-extrabold">hihi</span> </div> <div class="absolute h-[100vh] w-[150px] bg-black text-white"> <div class="mt-2">123</div> </div> ``` ## align ### 水平置中absolute element 使用left-0 right-0 mx-auto, 再設定w即可 ```htmlembedded! <div class="relative"> <div class="absolute bg-yellow-200 shadow-md shadow-yellow-700 top-[-17%] w-[120px] left-0 right-0 mx-auto h-[120px] rounded-[100%] "> </div> </div> ``` ### inline vertical align ex1 align-top,align-middle,align-bottom (限inline跟inline-block元素使用) ```htmlembedded! <div class="main"> <div class="inline text-4xl align-top">text</div> <div class="inline align-middle">text</div> <div class="inline align-bottom">text</div> </div> ``` ## scrollbar ### 常用屬性 只在需要時顯現y軸scrollbar scroll-y-auto overflow-y-auto 永遠顯現y軸scrollbar overflow-y-scroll ## form element ### 去除input被點擊時出現的outline [參考資料](https://stackoverflow.com/questions/3397113/how-to-remove-focus-border-outline-around-text-input-boxes-chrome) ```htmlembedded! <input type="text" class="outline-0"> ``` ## plugin ### 自製plugin:設定元素寬度 plugins/twkhjl-col.js ```htmlembedded! const plugin = require('tailwindcss/plugin') module.exports = plugin(function ({ matchUtilities}) { matchUtilities( { 'twkhjl-col': function (value) { let arr=value.split(','); if(arr.some(function(e){ return isNaN(e*1) || e*1 < 0; })){ return {}; } let m=arr.length==1?'2':arr[1]; let output = (100 / arr[0])-m*2; return { 'width': `${output}%`, 'margin-left':`${m}%`, 'margin-right':`${m}%`, }; }, } ) }) ``` tailwind.config.js ```javascript! ... plugins: [ require('./plugins/twkhjl-col') ], ... ``` html ```htmlembedded! <!-- 只寫一個數字,表示(100/N-4)%,如輸入3,則表示欄寬佔(100/3-4)%=29.3333...%,ml跟mr會自動設定為2% --> <div class="flex flex-wrap"> <div class="w-full md:twkhjl-col-[3]">123</div> <div class="w-full md:twkhjl-col-[3]">123</div> <div class="w-full md:twkhjl-col-[3]">123</div> </div> <!-- 寫兩個數字n1,n2,表示(100/n1-n2*2)%,ml跟mr均為n2% ,下方範例表示元素寬度為(100/3-1*2)=31.333..%,ml跟mr均為1% --> <div class="flex flex-wrap"> <div class="w-full md:twkhjl-col-[3,1]">123</div> <div class="w-full md:twkhjl-col-[3,1]">123</div> <div class="w-full md:twkhjl-col-[3,1]">123</div> </div> ``` ## grid ### 基本使用 ```htmlembedded! <div class="grid grid-cols-1 gap-x-2 gap-y-4 sm:grid-cols-2 md:grid-cols-3 p-4 border-4 border-black"> <div class="bg-purple-600 rounded-xl text-center p-4 text-white">01</div> <div class="bg-purple-600 rounded-xl text-center p-4 text-white">02</div> <div class="bg-purple-600 rounded-xl text-center p-4 text-white">03</div> <div class="bg-purple-600 rounded-xl text-center p-4 text-white">04</div> <div class="bg-purple-600 rounded-xl text-center p-4 text-white">05</div> <div class="bg-purple-600 rounded-xl text-center p-4 text-white">06</div> <div class="bg-purple-600 rounded-xl text-center p-4 text-white sm:col-span-2 md:col-span-3 mt-7">01</div> </div> ``` ## flex ### 將特定element寬度符合其文字內容 橫向: **mx-auto mt-0** ```htmlembedded <style> *{ border:1px solid black; } </style> <div class="flex flex-col"> <div class="mx-auto ml-0">some text</div> <div class="">some text</div> <div class="">some text</div> </div> ``` 直向: **my-auto mt-0** ```htmlembedded! <style> *{ border:1px solid black; } </style> <div class="flex h-[150px]"> <div class="my-auto mt-0">some text</div> <div class="">some text</div> <div class="">some text</div> </div> ``` ### 將所有element延伸 直向: 使用 **items-stretch** ```htmlembedded <style> *{ border:1px solid black; } </style> <div class="flex h-[150px] items-stretch"> <div class="">some text</div> <div class="">some text</div> <div class="">some text</div> </div> ``` 橫向: 使用 **justify-items-stretch** ```htmlembedded <style> *{ border:1px solid black; } </style> <div class="flex flex-col items-stretch"> <div class="">some text</div> <div class="">some text</div> <div class="">some text</div> </div> ``` ### 將最左邊那個element靠左對齊,其他往右靠 方1:使用mr-auto 此方式的element border不變 ```htmlembedded! <div class="flex"> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl mr-auto">A</div> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl">B</div> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl">C</div> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl">D</div> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl">E</div> </div> ``` 方2:使用flex-1 此方式會把剩下的空白都加進去該element的border ```htmlembedded! <div class="flex"> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl flex-1">A</div> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl">B</div> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl">C</div> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl">D</div> <div class="m-2 w-20 h-20 bg-black text-white text-center py-6 text-2xl">E</div> </div> ``` ## image ### background image basic usage 方1:直接將路徑寫死 ```htmlembedded! <div class="bg-[url('https://fakeimg.pl/300/')] h-[300px] w-full bg-no-repeat bg-cover bg-center"></div> ``` 方2:修改tailwind.css.config ```css! /** @type {import('tailwindcss').Config} */ module.exports = { content: ["./*.{html,js}"], theme: { extend: { backgroundImage: { 'hero': "url('https://fakeimg.pl/300/')", } }, }, plugins: [], } ``` 使用方式示意 ``` <div class="bg-hero h-[300px] w-full bg-no-repeat bg-cover bg-center"></div> ``` ### img搭配半透明背景顏色 ```htmlembedded! <div class="relative"> <img src="https://fakeimg.pl/650x350/" class="w-full mx-0"> <div class=" absolute top-0 w-full h-full bg-purple-900 bg-opacity-60 flex flex-col justify-center "> <div class="text-6xl text-white text-center">text</div> </div> </div> ``` ## video ### full-screen video background https://daily-dev-tips.com/posts/tailwind-css-full-screen-video-header/ *video關鍵字:free video loop ```htmlembedded! <header class="relative flex items-center justify-center h-screen overflow-hidden"> <video autoplay loop muted class="absolute z-10 w-auto min-w-full min-h-full max-w-none -z-10"> <source src="ur_video_link.mp4" type="video/mp4" /> </video> </header> ``` ## hover effect ### 下方底線往兩邊延伸 [參考資料](https://htmlcodex.com/hospital-website-template/) ```htmlembedded! <div class=" inline-block relative before:absolute before:w-0 before:bg-gray-400 before:h-1 before:bottom-0 before:left-1/2 before:hover:w-full before:hover:left-0 before:transition-all before:duration-200 ">link1</div> ``` ## Opacity ### border opacity https://v2.tailwindcss.com/docs/border-opacity border-opacity-數字 e.g. border-opacity-50 ``` <div class="border-4 h-[50px] w-1/2 ml-[20%] mt-5 border-green-500 border-opacity-50"></div> ``` ## transition & animation ### 用高度切換做出下拉效果 ```htmlembedded= <div class="border-2 border-black max-h-[10px] hover:max-h-[500px] overflow-hidden transition-all duration-200"> Lorem ipsum dolor sit amet consectetur adipisicing elit. Culpa eius, beatae est quos modi, quidem rem repellendus aperiam eos, magni ad voluptates eaque itaque at voluptate quod consectetur nemo porro! </div> ``` ### 使用animate-ping(tailwind預設效果) https://play.tailwindcss.com/nm6ywMPazm ```htmlembedded= <span class="mt-10 mx-[30vw] flex h-[150px] w-auto items-center justify-center border-2 border-black"> <span class="absolute h-[50px] w-[50px] animate-ping rounded-full border-2 border-black bg-teal-200"></span> <span class="relative h-[50px] w-[50px] rounded-full border-2 border-black bg-teal-500"></span> </span> ``` ### checkbox勾選動畫 https://play.tailwindcss.com/fPyOwVAAmi ```htmlembedded! <label class="relative flex items-center ml-10 mt-10"> <input type="checkbox" class="peer absolute left-0 h-0 w-0" /> <span class="relative block h-[35px] w-[35px] rounded-full shadow-inner shadow-black hover:bg-gray-200 peer-checked:bg-gray-200 transition-all duration-200 after:top-5 after:left-5 after:absolute after:h-[0px] after:w-[0px] after:rotate-[225deg] after:border-t-[0px] after:border-l-[0px] after:border-t-green-700 after:border-l-green-700 peer-checked:after:h-[15px] peer-checked:after:w-[12px] peer-checked:after:border-t-[4px] peer-checked:after:border-l-[4px] peer-checked:after:top-2 peer-checked:after:left-2.5 after:transition-all after:duration-200 "></span> <div class="ml-2 relative after:w-0 after:transition-all after:duration-150 after:absolute after:bottom-0 after:left-0 after:border-b-2 after:border-b-green-500 peer-checked:after:w-full ">記住我</div> </label> ```