如果引用或轉貼,麻煩註明出處與本網誌連結,否則視為侵權。
顯示具有 網頁設計 標籤的文章。 顯示所有文章
顯示具有 網頁設計 標籤的文章。 顯示所有文章

2022年6月21日

網頁設計 - 使用圖示但免製作免上傳圖示的四種方法

作者: Fred F.M. Wang (FW知識瑣記) 日期:2022-6-21

網站設計時需要使用圖示,但常需自行製作或購買然後上傳網站,如何免製作免上傳圖示直接使用圖示的方法。

1 直接使用字元集或HTML符號 : 參考 https://www.htmlsymbols.xyz/

   1.1 ASCII標準字元集 : 範圍: 十進制 0~127

   1.2 UTF-8擴充字元集 : 範圍: 十進制 128~1327

   1.3 HTML符號 : 範圍: 十進制 8192~129501

2 使用網路圖示庫 Font Awesome Icons

3 使用網路圖示庫 Bootstrap Icons

4 使用網路圖示庫 Google Icons

    2~4 參考 https://www.w3schools.com/icons/icons_reference.asp



 

 

 

2021年12月20日

甚麼是糟糕的網頁設計

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2021-12-20

可用性設計與用戶體驗這門學問在網頁設計已經談了很多年了,還是有很多網站犯了一些糟糕的錯誤。下面是筆者認為糟糕的三類網頁設計。

第一類,干擾用戶閱讀內容

  1. 跳出式視窗(或廣告),特別是佔滿整個畫面的跳出式視窗,顯示內容前跳出或用戶捲動內容過程跳出都嚴重干擾用戶閱讀內容,皆不可取,使用嵌入式廣告則干擾比較小。
  2. 自動撥放音樂。
  3. 載入太多與內容無關或Size太大的圖片或廣告內容,造成等待時間太長。
  4. 先顯示影片或動畫才出現主題相關的內容。


第二類,操作困難

  1. 需要多次點擊才能找到需要的內容,建議網站內任何內容不要超過三次滑鼠點擊就可以看到。
  2. 過小的選單連結或文字連結,難以選擇或點擊進入想看的內容。
  3. 返回首頁困難。
  4. 非正規與慣用的操作方式。 


第三類,視覺效果不佳

  1. 內容與背景對比不足,可讀性太差。
  2. 太多且雜亂的文字與圖片。
  3. 排版過於混亂,內容過度壅擠或過度使用格線。
  4. 配色不佳,沒有一致的色系。
  5. 閃爍的內容。
  6. 缺乏支援不同平台的設計,例如iOS或Android等行動平台。
  7. 顯示與排版對少數族群不友善,例如色盲者,視弱者等。

 


 

2021年9月29日

網頁設計 : 如何設計一個表頭固定但內容可以捲動的表格

作者: Fred F.M. Wang (FW知識瑣記) 日期: 2021-9-29

網頁中如何設計一個表頭固定但內容可以捲動的表格


       要讓表格表頭固定,內容可以捲動,首先,table header(thead)與table body(tbody)必須各

自設定顯示方式為block(CSS設定 display: block;),但是,table header(thead)與table body

(tbody)各自設定為block時,表頭與內容的欄位寬度就無法對齊。因此,必須透過Javascript設定table header欄寬與table body的欄寬一致


==================================================

<style>

thead.fixedHeader {    display: block;    }

thead.fixedHeader tr th { padding: 4px 0px!important;    }

tbody.scrollContent {  

    display: block;    

    overflow: auto;    

}

</style>



<table id="itemtable">

    <thead id="itemheader" class="fixedHeader">

       <tr>

    ..

    </tr>

    </thead>


   <tbody id="itemcontent" class="scrollContent">

       <tr>

    ..

    </tr>

   </tbody>


=============================================

 <script type="text/javascript">

$( document ).ready(function () {

   // 設定捲動區域,區域底部不要超過視窗底部

    var content_y = get_offset_y("itemcontent"); // 取得table body畫面左上角的座標y位置

    var content_height = window.screen.height - content_y - 200;   // 設定table body的高     

    document.getElementById("itemcontent").style.height= content_height + "px"; 

   

  // 設定table header欄寬與table body的欄寬一致 by Fred

  var theader = document.getElementById("itemheader");

  var tbody = document.getElementById("itemcontent");

  row0 = theader.rows[0];  // table header row

  row1 = tbody.rows[0];     // table body 1st row   


  // 逐一設定table header每一欄欄寬等於table body每一欄的實際顯示寬度

  for (var j = 0; j < row1.cells.length; j++) {

      row0.cells[j].style.width = (row1.cells[j].offsetWidth - 1) + "px";  // offsetWidth:實際顯示

寬度,注意要減一,否則無法對齊

  }


/* 取得一個HTML元素在畫面中的位置(左上角的座標y位置) */

function get_offset_y(id) {

    var e = document.getElementById(id);

    var offset = {x:0,y:0};

    while (e)

    {

       offset.x += e.offsetLeft;

       offset.y += e.offsetTop;

       e = e.offsetParent;

    }


    if (document.documentElement && (document.documentElement.scrollTop 

|| document.documentElement.scrollLeft))    {

       offset.x -= document.documentElement.scrollLeft;

       offset.y -= document.documentElement.scrollTop;

    

  } else if (document.body && (document.body.scrollTop || document.body.scrollLeft))   {

       offset.x -= document.body.scrollLeft;

       offset.y -= document.body.scrollTop;

  

  } else if (window.pageXOffset || window.pageYOffset)   {

       offset.x -= window.pageXOffset;

       offset.y -= window.pageYOffset;

    }


    // alert(offset.x + '\n' + offset.y);    

    return offset.y

}

</script>

註: 取得一個HTML元素在畫面中的位置參考來源https://stackoverflow.com/questions/211703/is-it-possible-to-get-the-position-of-div-within-the-browser-viewport-not-withi

2021年3月17日

如何設計網頁連結來開啟與特定對象Skype或QQ的對話窗

作者: Fred F.M. Wang (FW知識瑣記) 日期:2021-3-7

開發同仁或客戶通訊錄網頁時,可以透過通訊錄中的郵件地址連結,開啟預設電子郵件軟體的

新信件, 收件人為特定對象的郵件地址,方式如下 :

<a href="mailto:郵件地址"> Email: 郵件地址 </a>


如果要在網頁中開啟與特定對象Skype或QQ軟體的對話窗要如何做到呢? 方法如下 : 


Skype :

<a href='skype:Skype帳號?chat'>Skype: Skype帳號</a>


QQ:

<a href='tencent://message/?uin=QQ號碼&Site=qq&Menu=yes'>QQ: QQ號碼</a>

2020年4月10日

[繁簡中文並存問題]網頁應用上傳檔案檔名變成亂碼的解決方法

作者: Fred F.M. Wang (FW知識瑣記) 日期:2020/4/10


透過網頁上傳檔案有很麻煩的問題,就是上傳檔名可能有特殊字元,或各種編碼,如簡體字等,上
傳到後台後,因為平台,作業系統或資料庫的限制,檔案名字常常變成亂碼。

要處理這些亂碼的問題相當棘手,筆者研究了許多方法,都無法完美解決。

因此,有一個新的構想,也就是跳過轉碼,直接將上傳的檔案變成英數字的檔名,在系統中記錄原始
檔名與轉換過的檔名之間的關聯。下面是處理的步驟: 

想法 : 
1 上傳的檔案 一律轉存成數字編碼的檔案

2 資料庫中附件記錄 上傳的原始檔案名稱與轉換過的檔案名稱

3 程式中的連結 連結到轉換過的檔案名稱,顯示原始檔案名稱,如下 :
<a href='實體檔案路徑\轉換過的檔案名稱'>原始檔案名稱</a>

如此,不管檔案名稱有簡體字或任何無法處理的字元,都可以上傳與讀取

筆者已經依上面的構想,完成實作成功。

2019年11月22日

[網頁程式設計] 為什麼Submit按鈕失效?

作者: Fred F.M. Wang (FW知識瑣記) 日期:2019-11-22


在網頁程式設計時,有時候會發生很奇怪的錯誤,在某些狀況下按Submit按鈕,後端程式卻沒有執行
,其他狀況又不會有問題,除錯半天還是找不到錯誤。

第一種情況就是您的Javascript或jQuery的語法有錯,如果您不想自己一行一行檢視錯誤,就將程式
貼到網路上免費的線上語法檢查網頁檢查看看。 
如 codebeautify.org的JavaScript Validator  ,piliapp.com的Javascript Validator 等

如果語法都正確,那有可能是發生在按Submit按鈕時網頁內有隱藏的輸入區塊有必填(required)的輸
入欄位,這個欄位該輸入資料而沒有輸入,就會卡住Submit的送出。

因為這個輸入區塊在特定條件下才會顯示,測試時不容易發現。

解決方式就是 :
* 此區塊的輸入欄位不要設定為required欄位,在需要顯示此輸入區塊來輸入資料時,再透過
javascript或jquery設定為required

例如
/* 按下cfmbutton按鈕,開啟addbox區塊 */
 $("span#cfmbutton").click(function (e) {
    $('#addbox').css('display','table-row');  // 開啟addbox區塊
     $("input[name='f_plandlvdate']").attr('required', true);    // addbox區塊中的兩個欄位設為必填
    $("input[name='f_quantity']").attr('required', true);   
});

/* 按下closeaddbox按鈕, 關閉addbox區塊  */  
 $("button[name = 'closeaddbox']").click(function (e) {    
    $("input[name='f_plandlvdate']").attr('required', false);      // addbox區塊中的兩個欄位取消必填
    $("input[name='f_quantity']").attr('required', false);                
    $('#addbox').css('display','none');    // 關閉addbox區塊
 });   

2019年11月1日

[Ajax-PHP] HTML表單按下送出按鈕後,使用Ajax呼叫後台程式檢查表單內容的注意事項

作者: Fred F.M. Wang (FW知識瑣記) 日期:

javascript除了除錯不容易外, 在Ajax上也有一些奇怪的地方,下面是我爬過一些國外的技術文章與
自己多次錯誤嘗試的結果。

如果您HTML表單要在按下送出按鈕後,需要先呼叫後台程式檢查表單內容(使用Ajax)後, 再實際將
表單送到後台處理。HTML程式碼如下 :

<form action="form_action.php" id="signupForm" method="get">
...輸入資料...
  <input type="submit" value="Submit" />
</form>


有下面四點注意事項 : 
1. 表單按下送出(Submit)按鈕後, 要先用event.preventDefault() 取消表單預設送出Submit動作, 也就是的form_action.php將不會執行, 如果少這行就不會正常呼叫後台檢查表單內容的程式。

2. 再使用Ajax呼叫後台檢查表單內容的程式(check_signup.php), Ajax程式碼如下方
$('#signupForm').submit(...) 內的程式碼,如果使用GET方式傳遞參數時, 部分參數內容無法傳遞
, 例如參數值有"XXX" 時就無法傳遞,改用POST就沒有問題,因此,建議一律採用POST方式傳遞資
料給後台程式。


3.表單內容檢查完畢(也就是後台檢查表單內容的程式執行完畢), 回傳資料給Ajax程式,如果無
誤時,執行 this.unbind('submit'); 這個功能用來先解除(unbind)檢查表單的事件處理程序,也就
是後面的this.submit()不會再呼叫自行撰寫的
$('#signupForm').submit(...) 程式 (如果不寫unbind, 會重複執行這段Ajax程式)。

4. 執行this.submit(); 等同於再按下送出(Submit)按鈕 。也就是執行form_action.php
5. $.ajax(...); 後到function結束前如果還有程式碼,就完全不會執行。
 
Javascript內的程式碼 :
 
$('#signupForm').submit(function(event){
    event.preventDefault();  // 取消表單預設送出Submit動作
    $.ajax({
        url: 'check_signup.php',  // 後台檢查表單內容的程式
        method: 'POST',
        data: {user_name:$('#user_name').val(),email:$('#email').val(),
                first_name:$('#first_name').val(),last_name:$('#last_name').val(),
                password:$('#password').val(),password2:$('#password2').val(),},
        dataType: 'json',
        success: function(data){  // 表單內容檢查完畢
            for(var input_field in data){
                $('#'+input_field+'-error').html(data[input_field]);
            }
            var if_signup = true;
            for(var key in data){
                if(data[key]!==""){
                    if_signup = false;
                    break;
                }
            }
            if(if_signup){ // 檢查無誤
                this.unbind('submit');
                this.submit();
            }
        }
     });

      //  這裡如果還有程式碼,完全不會執行。

2019年9月5日

HTML表單要在按下送出按鈕後,使用Ajax呼叫後台程式檢查表單內容的注意事項

作者: Fred F.M. Wang (FW知識瑣記) 日期:2019-09-05

javascript除了除錯不容易外, 在Ajax上也有一些奇怪的地方,下面是我爬過一些國外的技術文章與
自己多次錯誤嘗試的結果。

如果您HTML表單要在按下送出按鈕後,先使用Ajax呼叫後台程式檢查表單內容後, 再實際送到後台
。有下面四點注意事項 : 

1. 使用GET方式傳遞參數時, 部分參數內容無法傳遞, 例如參數值有"XXX" 時就無法傳遞, 所以要改用POST。
2. 表單送出前, 使用Ajax呼叫後台程式檢查表單內容時, 要先用event.preventDefault()取消表單送出Submit動作, 否則不會正常呼叫後台程式。
3. 檢查完畢,檢查無誤時,使用this.unbind('submit'); this.submit(); 先解除(unbind)表單的事件處理程序, 也就是submit()送出時
不會再執行自行撰寫的$(“form”).submit(...), 而是直接送出表單, 如果不寫unbind, 會重複執行這
段Ajax程式。
4. 如果submit, $.ajax(...); 後到function結束前如果還有程式碼,完全不會執行。

範例程式碼如下 : 


2019年4月9日

Javascript設計模式書籍(含電子書)推薦

作者: Fred F.M. Wang (FW知識瑣記) 日期: 20190409

如何您覺得已經對Javascript有一定的了解,又想提升自己Javascript開發的功力,就該看看Javascript Design Pattern的書籍,相信對您會有很大的幫助,下面提供相關書籍與電子書連結。學寫程式的人多看看英文版的書籍,對您將來利用廣大的網際網路英文資源(比中文多太多了),來解決程式設計的問題,將有很大的幫助。

1
「Javascript patterns」的圖片搜尋結果 作者: Stoyan Stefanov  2010
中文版 : JavaScript 設計模式
英文版電子書

2

「JavaScript设计模式」的圖片搜尋結果 作者: Addy Osmani 2007

3

「Pro JavaScript Design Patterns」的圖片搜尋結果作者: Harmes, Ross/ Diaz, Dustin 2008
英文版電子書

4
「Mastering JavaScript Design Patterns」的圖片搜尋結果 作者:Simon Timms 2014
英文版電子書