2021/05/07

ไฝฟ็”จ CSS ่ฎ“ๅœ–็‰‡ไธ็ ดๆ ผ

็พๅœจๆ˜ฏ responsive ็š„ๆ™‚ไปฃ,ๆ‰€ๆœ‰็š„้ ้ข้ƒฝๅฟ…้ ˆๅš้Ÿฟๆ‡‰ๅผ,่™•็†้€™็จฎ็ถฒ็ซ™็š„ๆ™‚ๅ€™,ๅœ–็‰‡ๆœ€ไปคไบบ้ ญ็—›,ๆœ‰ๆ™‚ๅ€™็„กๆณ•่ฆ็ฏ„ๅฎขๆˆถๆ˜ฏๅฆๅ‚ณๆˆ‘ๅ€‘่ฆๆฑ‚็š„ๆฏ”ไพ‹,ๆ‰€ไปฅๅฟ…้ ˆๅœจๅ‰็ซฏๅšไธ€ไบ›ๆ‰‹่…ณ่ฎ“็•ซ้ข็œ‹่ตทไพ†่ตท็ขผไธ้‚ฃ้บผ็ณŸ。

html
<div class="container">
    <div class="row row-no-gutters">
        <div class="col-md-3">
            <div class="box">
                <img src="https://via.placeholder.com/700x400.png">
            </div>
        </div>
        <div class="col-md-3">
            <div class="box">
                <img src="https://via.placeholder.com/600x400.png">
            </div>
        </div>
        <div class="col-md-3">
            <div class="box">
                <img src="https://via.placeholder.com/600x200.png">
            </div>
        </div>
        <div class="col-md-3">
            <div class="box">
                <img src="https://via.placeholder.com/300x500.png">
            </div>
        </div>
    </div>
</div>

้€™ๆ˜ฏๅคง้ƒจๅˆ†ไฝฟ็”จ bootstrap ๆ™‚ๆœƒไฝฟ็”จ็š„ๆŽ’็‰ˆ,ไธ€ๅ€‹ๅ››ๆ ผๅœ–็‰‡็š„้…็ฝฎ,ๆˆ‘ๆ”พไบ†ๅนพๅผตๅฎŒๅ…จไธๅŒๅฐบๅฏธ็š„ placeholder ๅœ–็‰‡,ไธ€่ˆฌไบบ่™•็†ๆœƒๅœจ img ไธŠไธ‹ max-width: 100%,่ฎ“ไป–ๅฏฌๅบฆไธๆœƒ็ˆ†่กจ,ไฝ†้ซ˜ๅบฆ็š„้ƒจๅˆ†ๅฐฑๆœƒ่ขซๅœ–็‰‡ๆ’้ซ˜ไบ†,ๆœ‰ไบ›ไบบๆœƒๆŠŠๅœ–็‰‡่ฎŠๆˆ background,ๅ†ๅˆฉ็”จ cover ๅฑฌๆ€งๆญ้… padding-top + overflow: hidden ๆ’้ซ˜ๅบฆ่ฎ“ๅœ–็‰‡็ฝฎไธญไธฆไธ”ไธ็ ดๆ ผ,ไฝ†้€™ๆจฃๆœƒๅฝฑ้Ÿฟ SEO,ๆˆ‘่‡ชๅทฑ่ฉฆๅ‡บไบ†ไธ€ๅ€‹้…็ฝฎ้‚„ไธ้Œฏ。

scss
.container {
  .box {
    width: 100%;
    padding-top: 66.6%;
    overflow: hidden;
    position: relative;
    border: 1px solid grey;
  }

  .box {
    img {
      position: absolute;
      top: 0;
      left: 0;
      width: 100%;
      height: 100%;
      object-fit: cover;
    }
  }
}

้€™ๆจฃ็š„้…็ฝฎๆณ•ๅฏไปฅๅœจไธๅฐ‡ๅœ–็‰‡่ฎŠๆˆ background ็š„ๆƒ…ๆณไธ‹่ฎ“ๅœ–็‰‡ๆปฟ็‰ˆๅฑ…ไธญ,IE 11 ไปฅไธ‹ไธๆ”ฏๆด,ไธ้Žๆˆ‘ไธๅœจไนŽ。

2021/05/05

Vagrant provision with docker and docker-compose install

vagrant ๆไพ›ไบ† provision ๅˆๅง‹ๅŒ–ๅŠŸ่ƒฝ,ๅฏไปฅ้กžไผผ Dockerfile ๅœจๅˆๅง‹ๅŒ– vagrant ็š„ๆ™‚ๅ€™ๅฐฑๆŠŠๆƒณ่ฆๅฎ‰่ฃ็š„ๅ…งๅฎน่™•็†ๅฅฝ,ไธ‹้ข็คบ็ฏ„ไธ€ไธ‹ๅฆ‚ไฝ•ๅฎ‰่ฃไธ€ๅ€‹ไนพๆทจ็š„ ubuntu ๅพŒๆŠŠ docker ไปฅๅŠ docker-compose ไธ€ไฝตๅฎ‰่ฃ。

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/focal64"

  config.vm.provider "virtualbox" do |vb|
    vb.memory = "1024"
  end

  config.vm.provision "shell", inline: <<-SHELL
    docker -v &> /dev/null

    if [[ $? != 0 ]]; then
      echo "start install docker"
      curl -sL https://get.docker.com/ | sudo bash
      sudo usermod -aG docker vagrant
      docker -v
    else
      echo "docker installed"
    fi

    docker-compose -v &> /dev/null

    if [[ $? != 0 ]]; then
      echo "start install docker-compose"
      sudo curl -sL "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
      sudo chmod +x /usr/local/bin/docker-compose
      sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
      docker-compose -v
    else
      echo "docker-compose installed"
    fi
  SHELL
end

็”ฑๆ–ผ provision ๆœ‰ๅฏ่ƒฝ้‡่ค‡ไฝฟ็”จ,ๆ‰€ไปฅๆœ€ไธ€ไบ›ๅŸท่กŒๆชขๆŸฅๆ˜ฏๅฟ…่ฆ็š„,้€™้‚Šๆˆ‘ๆชขๆŸฅๅทฒๅฎ‰่ฃ็š„ๆŠ€ๅทงๆ˜ฏไฝฟ็”จ -v ้€™ๅ€‹ๅƒๆ•ธ,ๅฆ‚ๆžœๆฒ’ๆœ‰ๅฎ‰่ฃ,็ณป็ตฑๆœƒๅ ฑ้Œฏ,ๅ› ๆญค $? ๆœƒ้ž 0,่—‰ๆญคๅˆคๆ–ทๆœ‰ๆฒ’ๆœ‰ๅฎ‰่ฃ้Ž。