2010-07-06 46 views
1

編輯:好的,這是什麼工程。它可能不是「正確的」,但是1)它正確顯示& 2)它在W3C驗證。似乎我應該讓所有的定位都是絕對的,並且爲所有的div添加定位,除了那些帶有字段集的字段,我必須將該字段添加到字段集。如果您認爲我錯了,請隨時糾正這一錯誤,但「適用於我」!好極了! Yipee!最後!大量+1,並感謝所有幫助。我有一個理解CSS定位的基本問題


編輯:賞金髮送給任何人可以張貼編輯後的HTML,顯示像Delphi截圖。


我正在使用Borland Delphi生成HTML表單生成器。用戶可以拖動拖放組件來生成一個文件,當他很高興時,他可以生成HTML(我在他的表單末尾彈出一個Submit按鈕)。

因爲我生成每個控件的絕對位置,所以我想在CSS中指定絕對位置。我認爲這意味着我必須使用position: fixed,但這看起來不正確,也不是絕對的。

我在做什麼錯? (該HTML驗證在W3C)

這裏是一個非常基本的基本示例如在Delphi程序
alt text

設計表單時看到這裏,它是在MSIE 8(具有固定位置) alt text

絕對位置 alt text

而且

再次,最後,這裏是HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<title>Input data</title> 
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"> 
</head> 
<body> 
<form action="http://localhost/a_submitted.php" method="post"> 
<div class="TGroupBox" id="GroupBox1"> 
<fieldset style="position: absolute; top:40px; left:40px; width: 857px; height: 441px;"> 
<legend>GroupBox1</legend> 
<div class="TPanel" id="Panel1"> 
<fieldset style="position: absolute; top:64px; left:56px; width: 753px; height: 369px;"> 
<legend></legend> 
<div class="TLabel" id="Label1" style="position: absolute; top:88px; left: 80px; width: 32px; height: 13px;">Label1</div> 
<div class="TEdit" id="Edit1" style="position: absolute; top:80px; left: 72px; width: 121px; height: 21px;"><input type="text" name="Edit1" value="an edit bx"></div> 
<div class="TCheckBox" id="CheckBox1" style="position: absolute; top:88px; left: 80px; width: 97px; height: 17px;">CheckBox1<input type="checkbox" name="CheckBox1" value="CheckBox1Checked"></div> 
<div class="TComboBox" id="ComboBox1" style="position: absolute; top:145px; left: 137px; width: 145px; height: 21px;"> 
    <select size ="1" name="ComboBox1"> 
    <option value="one" selected="selected">one </option> 
    <option value="two">two </option> 
    <option value="three">three </option> 
</select> 
</div> 
<div class="TRadioGroup" id="RadioGroup1"> 
<fieldset style="position: absolute; top:144px; left: 136px; width: 185px; height: 105px;"><legend>RadioGroup1</legend> 
     red: <input type="radio" name="RadioGroup1" value=""><br> 
     white: <input type="radio" name="RadioGroup1" value="" checked><br> 
     blue: <input type="radio" name="RadioGroup1" value=""><br> 
</fieldset> 
</div> 
</fieldset> 
</div> 
</fieldset> 
</div> 
<div><input type="submit" name="submitButton" value="Submit" style="position:relative; top:25px; left: 50%;"></div> 
</form> 
</body> 
</html> 

編輯:賞金髮送給任何人可以張貼編輯的HTML顯示像Delphi截圖。


編輯:好的,這是什麼工程。它可能不是「正確的」,但是1)它正確顯示& 2)它在W3C驗證。似乎我應該讓所有的定位都是絕對的,並且爲所有的div添加定位,除了那些帶有字段集的字段,我必須將該字段添加到字段集。如果您認爲我錯了,請隨時糾正這一錯誤,但「適用於我」!好極了! Yipee!最後!大量+1,並感謝所有幫助。

回答

1

您可以從下面的代碼開始。請務必閱讀別人已經發布:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<title>Input data</title> 
<meta http-equiv="Content-type" content="text/html;charset=UTF-8"> 
</head> 
<body> 
<form action="http://localhost/a_submitted.php" method="post"> 
    <div class="TGroupBox" id="GroupBox1"> 
     <fieldset style=""> 
      <legend>GroupBox1</legend> 
      <div class="TPanel" id="Panel1"> 
       <fieldset style="width: 600px; height: 250px; margin: 20px 50px 50px 20px; padding: 20px; padding-left: 50px"> 
        <div class="TLabel" id="Label1" style="position: absolute; left: 100px; top: 100px;">Label1</div> 
        <div class="TEdit" id="Edit1" style="position: absolute; left: 200px; top: 100px;"><input type="text" name="Edit1" value="an edit bx"></div> 
        <div class="TCheckBox" id="CheckBox1" style="position: absolute; left: 400px; top: 100px;">CheckBox1 <input type="checkbox" name="CheckBox1" value="CheckBox1Checked"></div> 
        <div class="TComboBox" id="ComboBox1" style="position: absolute; left: 100px; top: 150px;"> 
         <select size ="1" name="ComboBox1" style="width: 200px;"> 
          <option value="one" selected="selected">one</option> 
          <option value="two">two</option> 
          <option value="three">three</option> 
         </select> 
        </div> 
        <div class="TRadioGroup" id="RadioGroup1" style="position: absolute; left: 380px; top: 150px;"> 
         <fieldset style=""> 
          <legend>RadioGroup1</legend> 
           <input type="radio" name="RadioGroup1" value=""> red<br> 
           <input type="radio" name="RadioGroup1" value="" checked> white<br> 
           <input type="radio" name="RadioGroup1" value=""> blue<br> 
         </fieldset> 
        </div> 
       </fieldset> 
      </div> 
     </fieldset> 
    </div> 
    <div><input type="submit" name="submitButton" value="Submit" style=""></div> 
</form> 
</body> 
</html> 
+0

Th看起來像答案 - 除了groupbox1和瀏覽器一樣寬。如果你添加pistion,那麼你有答案。我會將它與其他人所說的相提並論(如果還有其他地方我還沒有這樣做,那就獎勵更多的+1)。我的問題是什麼?不從頂部和左側減去parent.top&parent.left? – Mawg 2010-07-12 00:00:54

+1

在屏幕上顯示主佈局後,您需要從純HTML開始並添加CSS屬性。當然,這有助於理解CSS如何工作,特別是定位。你不應該做的是開始在這裏和那裏放置值。一次處理一個元素並緩慢進行。最後,研究其他人的工作非常有幫助。 – Anax 2010-07-12 00:49:09

+0

+1謝謝!我嘗試了一次,一次一個,慢慢地,一次一個,直到我嵌套組件爲止。順便說一句,我試着問一個相關的問題在http://stackoverflow.com/questions/3226799/html-forms-css-should-position-be-on-the-enclosing-div-or-the-enclosed-cont和他們說這個位置是在DIV上,而不是在

上。任何意見? – Mawg 2010-07-12 10:46:09

1

爲了幫助您瞭解關於CSS定位:http://www.w3schools.com/css/css_positioning.asp

+0

這就是我想我有固定的位置做。任何想法,爲什麼它不工作? – Mawg 2010-07-06 06:23:56

+0

嘗試將「left」改爲「margin-left」,將「top」改爲「margin-top」以表示「絕對」位置,並查看其差異。 – 2010-07-06 07:47:51

+0

對不起,jeaffrey,這並沒有幫助 – Mawg 2010-07-10 02:00:37

3

您的問題是絕對定位是相對於絕對定位的父。如果父母不是絕對的位置,它會查找樹,直到它找到絕對定位的元素或身體。 只需:確保一切都絕對定位,包括窗體和div。

+0

+1,所以我在他們附屬的divs和componets位置?但那是否包含fraemset? – Mawg 2010-07-11 14:07:12

1

我其實只是遇到了這個問題。如果一個div絕對定位並嵌套在另一個未完全定位的div中,它將相對於父div定位。

在你的代碼中,例如,Label1是絕對定位的,但它位於Panel1之內,它不是絕對定位的。

您可以使您的div樹的所有級別都絕對定位,也可以使用負值將事物定位在您想要的位置。如果你不小心,兩者都會變得混亂。

+0

+1謝謝。我認爲我通過絕對定位所有東西讓事情變得容易,但我認爲我必須確定組件的位置 - 沒有意識到我需要定位DIV。在Groupbox1上我需要定位fieldset以及div嗎? – Mawg 2010-07-11 14:10:19

8

position: fixed裝置top:right:bottom:,和left:是相對於瀏覽器窗口和元件不與頁滾動。

position: relativetop:裝置,right:bottom:,和left:是相對於其中元件的上,右,下,和左側本來如果沒有定位。它意味着任何絕對定位的子元素相對於此元素放置。

position: absolute裝置top:right:bottom:,和left:是相對於包含它的最近的相對定位元件的側面。如果它不在相對定位的元素中,則position: absolute以大多數人首先期望的方式工作:top:,right:,bottom:left:相對於頁面的邊緣。


對於它是什麼樣子,你正在試圖做的,我認爲你應該每個元素位置這樣

<div style="position: absolute; left: {X}px; top: {Y}px"> 

其中{X}和{Y}用的座標更換元素的左上角出現在表單設計器中。

+0

+1啊,所以位置應該在div上,而不是在它所包含的組件上?或者,如果事實,也許它應該在兩者上? (我想給高度/寬度以及頂部/左側,如果沒有問題的話) – Mawg 2010-07-11 14:06:02

+0

Hmmm,「絕對位置元素相對於第一個父元素具有非靜態位置」... so在我的delphi代碼中,也許我應該把所有的CSS都做成絕對的,但是因爲Delphi組件對於屏幕來說確實是絕對的,所以不是把它寫成copment.top,component,而是把它們寫成copment.top - compnent.parent.top,component.parent.left等? – Mawg 2010-07-11 14:27:50

-1

你的問題很簡單,IE瀏覽器是一個荒謬和不穩定的瀏覽器。它很少正確顯示頁面,並且通常在每個其他瀏覽器中工作的頁面都有問題。嘗試使用chrome,safari,opera或firefox代替。

+3

這不是他的問題。 – melhosseiny 2010-07-10 02:56:16

+0

+1因爲我傾向於同意你的觀點,但我別無選擇 - 我必須使用MS IE – Mawg 2010-07-11 14:07:51

+0

「並且通常會遇到問題在其他瀏覽器中工作的頁面「=誇張 – 2010-07-11 19:08:50

1

我想說問題是你給的嵌套絕對定位元素topleft的值。

對於絕對定位的父母和孩子,孩子的座標是相對於父母的。你可以檢查這個事實here。玩的價值觀,併爲自己看。

您的代碼的另一個問題是,對於表單元素,您不應該在包含元素上設置寬度/高度。你應該在表單元素上設置它。

編輯:我試圖計算出合適的值,這並不完美,因爲我沒有來自delphi程序的值,並且您使用的值不是delphi程序給出的值,從您的代碼中可以看出和截圖。查看結果here

+0

+1,但是我希望有一些CSS大師會給我一個真實的答案,因爲我在這裏丟失了 – Mawg 2010-07-11 14:11:06

+1

增加了示例代碼 – melhosseiny 2010-07-11 19:33:21

1

只需設置position絕對是不夠的,基本上解決你剛纔有lefttop風格的元素髮揮的位置。

這裏是固定的HTML

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
    <title>Input data</title> 
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> 
</head> 
<body> 
<form action="http://localhost/a_submitted.php" method="post"> 
<div class="TGroupBox" id="GroupBox1"> 
<fieldset style="position: absolute; top:40px; left:40px; width: 857px; height: 441px;"> 
<legend>GroupBox1</legend> 
<div class="TPanel" id="Panel1"> 
<fieldset style="position: absolute; top:10px; left:10px; width: 753px; height: 369px;"> 
<div class="TLabel" id="Label1" style="position: absolute; top:35px; left: 80px; width: 32px; height: 13px;">Label1</div> 
<div class="TEdit" id="Edit1" style="position: absolute; top:35px; left: 200px; width: 121px; height: 21px;"><input type="text" name="Edit1" value="an edit bx"></div> 
<div class="TCheckBox" id="CheckBox1" style="position: absolute; top:35px; left: 420px; width: 97px; height: 17px;"><input type="checkbox" name="CheckBox1" value="CheckBox1Checked"> CheckBox1</div> 
<div class="TComboBox" id="ComboBox1" style="position: absolute; top:145px; left: 80px; width: 145px; height: 21px;"> 
<select size ="1" name="ComboBox1"> 
<option value="one" selected="selected">one </option> 
<option value="two">two </option> 
<option value="three">three </option> 
</select> 
</div> 
<div class="TRadioGroup" id="RadioGroup1"> 
<fieldset style="position: absolute; top:145px; left: 250px; width: 185px; height: 105px;"><legend>RadioGroup1</legend> 
red: <input type="radio" name="RadioGroup1" value=""><br> 
white: <input type="radio" name="RadioGroup1" value="" checked><br> 
blue: <input type="radio" name="RadioGroup1" value=""><br> 
</fieldset> 
</div> 
</fieldset> 
</div> 
</fieldset> 
</div> 
<div><input type="submit" name="submitButton" value="Submit" style="position:relative; top:28px; left: 50%;"></div> 
</form> 
</body> 
</html>