Package tabularx can help in calculating the column widths.
There are four columns, which should fill the available space (\linewidth).
Then the column specification using X columns is given in the following example. Package tabularx takes care of \tabcolsep and the width of the vertical rules, if it calculates the column width.
\documentclass{article}
\usepackage{array}
\usepackage{tabularx}
\begin{document}
\noindent
\begin{tabularx}{\linewidth}{
|>{\hsize=.4\hsize}X|% 10% of 4\hsize
>{\hsize=1.2\hsize}X|% 30% of 4\hsize
>{\hsize=1.2\hsize}X|% 30% of 4\hsize
>{\hsize=1.2\hsize}X|% 30% of 4\hsize
% sum=4.0\hsize for 4 columns
}
\hline
A & B & C & D \\
\hline
\end{tabularx}
\end{document}

Solution without package tabularx
The problem can be solved with simple p-columns:
LaTeX adds width \tabcolsep to the left and right of a column by default.
Vertical lines have width \arrayrulesep if package array is loaded (the packages is often implicitly loaded by other packages). Otherwise, the contribution to the table width is zero.
The following example first calculates the net table width for the columns for use in the p-columns. The calculation is done with e-TeX's \dimexpr. Alternatively, package calc with \setlength can be used.
\documentclass{article}
\usepackage{array}
\newdimen\NetTableWidth
\begin{document}
\noindent
\NetTableWidth=\dimexpr
\linewidth
- 8\tabcolsep
- 5\arrayrulewidth % if package array is loaded
\relax
\begin{tabular}{%
|p{.1\NetTableWidth}|%
p{.3\NetTableWidth}|%
p{.3\NetTableWidth}|%
p{.3\NetTableWidth}|%
}
\hline
A & B & C & D \\
\hline
\end{tabular}
\end{document}
p{.1\textwidth}but when adding up you need to take account of\tabcolsepspace either side of teh column, ans\arrayrulewidthfor the rules (if you usearraypackage) – David Carlisle Jun 07 '15 at 09:56tabular, nottabluarand it's open-ended ;-) – Jun 07 '15 at 09:57%inside the code. – Sigur Jun 07 '15 at 09:58